WooCommerce Gutenberg Products Block - Version 2.5.16

Version Description

Download this release

Release Info

Developer aljullu
Plugin Icon 128x128 WooCommerce Gutenberg Products Block
Version 2.5.16
Comparing to
See all releases

Code changes from version 5.5.0 to 2.5.16

Files changed (290) hide show
  1. .prettierrc.js +0 -3
  2. LICENSE +0 -674
  3. assets/css/abstracts/_breakpoints.scss +1 -3
  4. assets/css/abstracts/_colors.scss +43 -19
  5. assets/css/abstracts/_mixins.scss +31 -147
  6. assets/css/abstracts/_variables.scss +17 -10
  7. assets/css/editor.scss +4 -24
  8. assets/css/style.scss +1 -317
  9. assets/img/block-error.svg +2727 -0
  10. assets/img/grid.svg +50 -0
  11. assets/img/no-matching-products.svg +1 -0
  12. assets/img/no-products.svg +1 -0
  13. assets/js/atomic/blocks/component-init.js +0 -118
  14. assets/js/atomic/blocks/index.js +0 -15
  15. assets/js/atomic/blocks/product-elements/add-to-cart/attributes.js +0 -12
  16. assets/js/atomic/blocks/product-elements/add-to-cart/block.js +0 -87
  17. assets/js/atomic/blocks/product-elements/add-to-cart/constants.js +0 -12
  18. assets/js/atomic/blocks/product-elements/add-to-cart/edit.js +0 -86
  19. assets/js/atomic/blocks/product-elements/add-to-cart/frontend.js +0 -12
  20. assets/js/atomic/blocks/product-elements/add-to-cart/index.js +0 -32
  21. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/external.js +0 -13
  22. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/grouped/group-list/index.js +0 -14
  23. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/grouped/index.js +0 -13
  24. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/index.js +0 -4
  25. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/simple.js +0 -54
  26. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/index.js +0 -63
  27. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/attribute-picker.js +0 -101
  28. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/attribute-select-control.js +0 -91
  29. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/index.js +0 -35
  30. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/style.scss +0 -33
  31. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/test/index.js +0 -395
  32. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/utils.js +0 -208
  33. assets/js/atomic/blocks/product-elements/add-to-cart/shared/add-to-cart-button.js +0 -174
  34. assets/js/atomic/blocks/product-elements/add-to-cart/shared/index.js +0 -3
  35. assets/js/atomic/blocks/product-elements/add-to-cart/shared/product-unavailable.js +0 -19
  36. assets/js/atomic/blocks/product-elements/add-to-cart/shared/quantity-input.js +0 -28
  37. assets/js/atomic/blocks/product-elements/add-to-cart/style.scss +0 -49
  38. assets/js/atomic/blocks/product-elements/button/attributes.js +0 -8
  39. assets/js/atomic/blocks/product-elements/button/block.js +0 -145
  40. assets/js/atomic/blocks/product-elements/button/constants.js +0 -15
  41. assets/js/atomic/blocks/product-elements/button/edit.js +0 -29
  42. assets/js/atomic/blocks/product-elements/button/index.js +0 -32
  43. assets/js/atomic/blocks/product-elements/button/style.scss +0 -36
  44. assets/js/atomic/blocks/product-elements/category-list/attributes.js +0 -8
  45. assets/js/atomic/blocks/product-elements/category-list/block.js +0 -64
  46. assets/js/atomic/blocks/product-elements/category-list/constants.js +0 -15
  47. assets/js/atomic/blocks/product-elements/category-list/edit.js +0 -33
  48. assets/js/atomic/blocks/product-elements/category-list/index.js +0 -32
  49. assets/js/atomic/blocks/product-elements/category-list/style.scss +0 -23
  50. assets/js/atomic/blocks/product-elements/image/attributes.js +0 -24
  51. assets/js/atomic/blocks/product-elements/image/block.js +0 -144
  52. assets/js/atomic/blocks/product-elements/image/constants.js +0 -15
  53. assets/js/atomic/blocks/product-elements/image/edit.js +0 -159
  54. assets/js/atomic/blocks/product-elements/image/frontend.js +0 -12
  55. assets/js/atomic/blocks/product-elements/image/index.js +0 -32
  56. assets/js/atomic/blocks/product-elements/image/style.scss +0 -53
  57. assets/js/atomic/blocks/product-elements/image/test/block.test.js +0 -139
  58. assets/js/atomic/blocks/product-elements/price/attributes.js +0 -45
  59. assets/js/atomic/blocks/product-elements/price/block.js +0 -135
  60. assets/js/atomic/blocks/product-elements/price/constants.js +0 -15
  61. assets/js/atomic/blocks/product-elements/price/edit.js +0 -133
  62. assets/js/atomic/blocks/product-elements/price/index.js +0 -32
  63. assets/js/atomic/blocks/product-elements/rating/attributes.js +0 -8
  64. assets/js/atomic/blocks/product-elements/rating/block.js +0 -79
  65. assets/js/atomic/blocks/product-elements/rating/constants.js +0 -15
  66. assets/js/atomic/blocks/product-elements/rating/edit.js +0 -23
  67. assets/js/atomic/blocks/product-elements/rating/index.js +0 -32
  68. assets/js/atomic/blocks/product-elements/rating/style.scss +0 -52
  69. assets/js/atomic/blocks/product-elements/sale-badge/attributes.js +0 -8
  70. assets/js/atomic/blocks/product-elements/sale-badge/block.js +0 -67
  71. assets/js/atomic/blocks/product-elements/sale-badge/constants.js +0 -15
  72. assets/js/atomic/blocks/product-elements/sale-badge/edit.js +0 -24
  73. assets/js/atomic/blocks/product-elements/sale-badge/index.js +0 -35
  74. assets/js/atomic/blocks/product-elements/sale-badge/style.scss +0 -16
  75. assets/js/atomic/blocks/product-elements/save.js +0 -12
  76. assets/js/atomic/blocks/product-elements/shared/config.js +0 -34
  77. assets/js/atomic/blocks/product-elements/shared/editor.scss +0 -11
  78. assets/js/atomic/blocks/product-elements/shared/with-product-selector.js +0 -90
  79. assets/js/atomic/blocks/product-elements/sku/attributes.js +0 -8
  80. assets/js/atomic/blocks/product-elements/sku/block.js +0 -54
  81. assets/js/atomic/blocks/product-elements/sku/constants.js +0 -12
  82. assets/js/atomic/blocks/product-elements/sku/edit.js +0 -30
  83. assets/js/atomic/blocks/product-elements/sku/index.js +0 -32
  84. assets/js/atomic/blocks/product-elements/sku/style.scss +0 -7
  85. assets/js/atomic/blocks/product-elements/stock-indicator/attributes.js +0 -8
  86. assets/js/atomic/blocks/product-elements/stock-indicator/block.js +0 -80
  87. assets/js/atomic/blocks/product-elements/stock-indicator/constants.js +0 -15
  88. assets/js/atomic/blocks/product-elements/stock-indicator/edit.js +0 -30
  89. assets/js/atomic/blocks/product-elements/stock-indicator/index.js +0 -32
  90. assets/js/atomic/blocks/product-elements/stock-indicator/style.scss +0 -17
  91. assets/js/atomic/blocks/product-elements/summary/attributes.js +0 -8
  92. assets/js/atomic/blocks/product-elements/summary/block.js +0 -72
  93. assets/js/atomic/blocks/product-elements/summary/constants.js +0 -15
  94. assets/js/atomic/blocks/product-elements/summary/edit.js +0 -24
  95. assets/js/atomic/blocks/product-elements/summary/index.js +0 -32
  96. assets/js/atomic/blocks/product-elements/summary/style.scss +0 -11
  97. assets/js/atomic/blocks/product-elements/tag-list/attributes.js +0 -8
  98. assets/js/atomic/blocks/product-elements/tag-list/block.js +0 -64
  99. assets/js/atomic/blocks/product-elements/tag-list/constants.js +0 -15
  100. assets/js/atomic/blocks/product-elements/tag-list/edit.js +0 -33
  101. assets/js/atomic/blocks/product-elements/tag-list/index.js +0 -32
  102. assets/js/atomic/blocks/product-elements/tag-list/style.scss +0 -23
  103. assets/js/atomic/blocks/product-elements/title/attributes.js +0 -41
  104. assets/js/atomic/blocks/product-elements/title/block.js +0 -130
  105. assets/js/atomic/blocks/product-elements/title/constants.js +0 -15
  106. assets/js/atomic/blocks/product-elements/title/edit.js +0 -131
  107. assets/js/atomic/blocks/product-elements/title/frontend.js +0 -12
  108. assets/js/atomic/blocks/product-elements/title/index.js +0 -32
  109. assets/js/atomic/blocks/product-elements/title/style.scss +0 -35
  110. assets/js/atomic/blocks/product/button/index.js +39 -0
  111. assets/js/atomic/blocks/product/image/index.js +145 -0
  112. assets/js/atomic/blocks/product/index.js +7 -0
  113. assets/js/atomic/blocks/product/price/index.js +34 -0
  114. assets/js/atomic/blocks/product/rating/index.js +34 -0
  115. assets/js/atomic/blocks/product/sale-badge/index.js +37 -0
  116. assets/js/atomic/blocks/product/summary/index.js +34 -0
  117. assets/js/atomic/blocks/product/title/index.js +98 -0
  118. assets/js/atomic/components/product/button/index.js +199 -0
  119. assets/js/atomic/components/product/image/index.js +105 -0
  120. assets/js/atomic/components/product/index.js +7 -0
  121. assets/js/atomic/components/product/price/index.js +72 -0
  122. assets/js/atomic/components/product/rating/index.js +51 -0
  123. assets/js/atomic/components/product/sale-badge/index.js +32 -0
  124. assets/js/atomic/components/product/summary/index.js +32 -0
  125. assets/js/atomic/components/product/title/index.js +48 -0
  126. assets/js/atomic/utils/block-styling.js +0 -12
  127. assets/js/atomic/utils/create-blocks-from-template.js +0 -18
  128. assets/js/atomic/utils/get-block-map.js +0 -17
  129. assets/js/atomic/utils/index.js +0 -5
  130. assets/js/atomic/utils/render-parent-block.tsx +0 -126
  131. assets/js/atomic/utils/render-standalone-blocks.js +0 -27
  132. assets/js/base/components/block-error-boundary/block-error.js +11 -35
  133. assets/js/base/components/block-error-boundary/index.js +5 -41
  134. assets/js/base/components/block-error-boundary/style.scss +21 -25
  135. assets/js/base/components/button/index.tsx +0 -48
  136. assets/js/base/components/button/stories/index.js +0 -11
  137. assets/js/base/components/button/style.scss +0 -35
  138. assets/js/base/components/cart-checkout/address-form/address-form.tsx +0 -244
  139. assets/js/base/components/cart-checkout/address-form/index.ts +0 -1
  140. assets/js/base/components/cart-checkout/address-form/prepare-address-fields.ts +0 -131
  141. assets/js/base/components/cart-checkout/address-form/test/index.js +0 -178
  142. assets/js/base/components/cart-checkout/form-step/index.js +0 -95
  143. assets/js/base/components/cart-checkout/form-step/style.scss +0 -97
  144. assets/js/base/components/cart-checkout/form-step/test/__snapshots__/index.js.snap +0 -262
  145. assets/js/base/components/cart-checkout/form-step/test/index.js +0 -100
  146. assets/js/base/components/cart-checkout/index.js +0 -20
  147. assets/js/base/components/cart-checkout/order-summary/index.js +0 -54
  148. assets/js/base/components/cart-checkout/order-summary/order-summary-item.js +0 -184
  149. assets/js/base/components/cart-checkout/order-summary/style.scss +0 -104
  150. assets/js/base/components/cart-checkout/order-summary/test/index.js +0 -43
  151. assets/js/base/components/cart-checkout/payment-method-icons/common-icons.js +0 -118
  152. assets/js/base/components/cart-checkout/payment-method-icons/index.js +0 -57
  153. assets/js/base/components/cart-checkout/payment-method-icons/payment-method-icon.js +0 -25
  154. assets/js/base/components/cart-checkout/payment-method-icons/style.scss +0 -45
  155. assets/js/base/components/cart-checkout/payment-method-icons/utils.js +0 -34
  156. assets/js/base/components/cart-checkout/payment-method-label/index.js +0 -44
  157. assets/js/base/components/cart-checkout/payment-method-label/style.scss +0 -19
  158. assets/js/base/components/cart-checkout/place-order-button/index.js +0 -43
  159. assets/js/base/components/cart-checkout/policies/index.tsx +0 -57
  160. assets/js/base/components/cart-checkout/policies/style.scss +0 -24
  161. assets/js/base/components/cart-checkout/product-backorder-badge/index.tsx +0 -22
  162. assets/js/base/components/cart-checkout/product-badge/index.tsx +0 -32
  163. assets/js/base/components/cart-checkout/product-badge/style.scss +0 -10
  164. assets/js/base/components/cart-checkout/product-details/index.tsx +0 -60
  165. assets/js/base/components/cart-checkout/product-details/style.scss +0 -25
  166. assets/js/base/components/cart-checkout/product-details/test/__snapshots__/index.js.snap +0 -76
  167. assets/js/base/components/cart-checkout/product-details/test/index.js +0 -57
  168. assets/js/base/components/cart-checkout/product-image/index.tsx +0 -25
  169. assets/js/base/components/cart-checkout/product-low-stock-badge/index.tsx +0 -38
  170. assets/js/base/components/cart-checkout/product-metadata/index.tsx +0 -45
  171. assets/js/base/components/cart-checkout/product-metadata/style.scss +0 -8
  172. assets/js/base/components/cart-checkout/product-sale-badge/index.tsx +0 -62
  173. assets/js/base/components/cart-checkout/product-summary/index.tsx +0 -41
  174. assets/js/base/components/cart-checkout/return-to-cart-button/index.js +0 -25
  175. assets/js/base/components/cart-checkout/return-to-cart-button/style.scss +0 -14
  176. assets/js/base/components/cart-checkout/shipping-calculator/address.tsx +0 -63
  177. assets/js/base/components/cart-checkout/shipping-calculator/index.tsx +0 -39
  178. assets/js/base/components/cart-checkout/shipping-calculator/style.scss +0 -12
  179. assets/js/base/components/cart-checkout/shipping-location/index.tsx +0 -70
  180. assets/js/base/components/cart-checkout/shipping-rates-control-package/index.tsx +0 -152
  181. assets/js/base/components/cart-checkout/shipping-rates-control-package/package-rates.tsx +0 -69
  182. assets/js/base/components/cart-checkout/shipping-rates-control-package/render-package-rate-option.tsx +0 -46
  183. assets/js/base/components/cart-checkout/shipping-rates-control-package/style.scss +0 -43
  184. assets/js/base/components/cart-checkout/shipping-rates-control/index.tsx +0 -187
  185. assets/js/base/components/cart-checkout/totals/coupon/index.js +0 -121
  186. assets/js/base/components/cart-checkout/totals/coupon/stories/index.js +0 -47
  187. assets/js/base/components/cart-checkout/totals/coupon/style.scss +0 -41
  188. assets/js/base/components/cart-checkout/totals/discount/index.js +0 -126
  189. assets/js/base/components/cart-checkout/totals/discount/stories/index.js +0 -37
  190. assets/js/base/components/cart-checkout/totals/discount/style.scss +0 -9
  191. assets/js/base/components/cart-checkout/totals/footer-item/index.js +0 -80
  192. assets/js/base/components/cart-checkout/totals/footer-item/stories/index.js +0 -32
  193. assets/js/base/components/cart-checkout/totals/footer-item/style.scss +0 -14
  194. assets/js/base/components/cart-checkout/totals/footer-item/test/__snapshots__/index.js.snap +0 -79
  195. assets/js/base/components/cart-checkout/totals/footer-item/test/index.js +0 -81
  196. assets/js/base/components/cart-checkout/totals/index.js +0 -4
  197. assets/js/base/components/cart-checkout/totals/shipping/has-shipping-rate.js +0 -14
  198. assets/js/base/components/cart-checkout/totals/shipping/index.tsx +0 -215
  199. assets/js/base/components/cart-checkout/totals/shipping/shipping-rate-selector.js +0 -48
  200. assets/js/base/components/cart-checkout/totals/shipping/shipping-via.tsx +0 -17
  201. assets/js/base/components/cart-checkout/totals/shipping/stories/index.js +0 -35
  202. assets/js/base/components/cart-checkout/totals/shipping/style.scss +0 -42
  203. assets/js/base/components/checkbox-control/index.js +0 -72
  204. assets/js/base/components/checkbox-control/stories/index.js +0 -27
  205. assets/js/base/components/checkbox-control/style.scss +0 -93
  206. assets/js/base/components/checkbox-list/index.js +10 -24
  207. assets/js/base/components/checkbox-list/style.scss +2 -2
  208. assets/js/base/components/checkout/form-step/index.js +80 -0
  209. assets/js/base/components/chip/chip.js +0 -74
  210. assets/js/base/components/chip/index.js +0 -2
  211. assets/js/base/components/chip/removable-chip.js +0 -105
  212. assets/js/base/components/chip/stories/index.js +0 -42
  213. assets/js/base/components/chip/style.scss +0 -65
  214. assets/js/base/components/chip/test/__snapshots__/index.js.snap +0 -312
  215. assets/js/base/components/chip/test/index.js +0 -109
  216. assets/js/base/components/country-input/CountryInputProps.ts +0 -15
  217. assets/js/base/components/country-input/billing-country-input.tsx +0 -16
  218. assets/js/base/components/country-input/country-input.tsx +0 -84
  219. assets/js/base/components/country-input/index.ts +0 -3
  220. assets/js/base/components/country-input/shipping-country-input.tsx +0 -16
  221. assets/js/base/components/country-input/stories/countries-filler.js +0 -251
  222. assets/js/base/components/country-input/stories/index.js +0 -53
  223. assets/js/base/components/country-input/style.scss +0 -3
  224. assets/js/base/components/dropdown-selector/index.js +0 -212
  225. assets/js/base/components/dropdown-selector/input-wrapper.js +0 -13
  226. assets/js/base/components/dropdown-selector/input.js +0 -36
  227. assets/js/base/components/dropdown-selector/menu.js +0 -59
  228. assets/js/base/components/dropdown-selector/selected-chip.js +0 -26
  229. assets/js/base/components/dropdown-selector/selected-value.js +0 -57
  230. assets/js/base/components/dropdown-selector/style.scss +0 -175
  231. assets/js/base/components/filter-submit-button/index.js +0 -56
  232. assets/js/base/components/filter-submit-button/style.scss +0 -5
  233. assets/js/base/components/form/index.js +0 -33
  234. assets/js/base/components/formatted-monetary-amount/index.tsx +0 -104
  235. assets/js/base/components/formatted-monetary-amount/style.scss +0 -3
  236. assets/js/base/components/label/index.js +61 -0
  237. assets/js/base/components/label/index.tsx +0 -62
  238. assets/js/base/components/load-more-button/index.js +1 -1
  239. assets/js/base/components/load-more-button/style.scss +1 -1
  240. assets/js/base/components/loading-mask/index.js +0 -54
  241. assets/js/base/components/loading-mask/style.scss +0 -17
  242. assets/js/base/components/pagination/index.js +20 -60
  243. assets/js/base/components/pagination/style.scss +7 -7
  244. assets/js/base/components/pagination/utils.js +3 -3
  245. assets/js/base/components/price-slider/constrain-range-slider-values.js +5 -5
  246. assets/js/base/components/price-slider/index.js +103 -148
  247. assets/js/base/components/price-slider/price-input.js +70 -0
  248. assets/js/base/components/price-slider/price-label.js +34 -0
  249. assets/js/base/components/price-slider/stories/index.js +0 -42
  250. assets/js/base/components/price-slider/style.scss +192 -258
  251. assets/js/base/components/price-slider/submit-button.js +36 -0
  252. assets/js/base/components/price-slider/test/constrain-range-slider-values.js +17 -17
  253. assets/js/base/components/product-list-item/index.js +43 -0
  254. assets/js/base/components/product-list-item/utils.js +56 -0
  255. assets/js/base/components/product-list/container.js +2 -7
  256. assets/js/base/components/product-list/index.js +207 -2
  257. assets/js/base/components/product-list/no-matching-products.js +14 -11
  258. assets/js/base/components/product-list/no-products.js +14 -11
  259. assets/js/base/components/product-list/product-list-item/index.js +0 -45
  260. assets/js/base/components/product-list/product-list-item/utils.js +0 -61
  261. assets/js/base/components/product-list/product-list.js +0 -262
  262. assets/js/base/components/product-list/product-sort-select/index.js +0 -89
  263. assets/js/base/components/product-list/product-sort-select/style.scss +0 -4
  264. assets/js/base/components/product-list/style.scss +256 -24
  265. assets/js/base/components/product-name/index.tsx +0 -48
  266. assets/js/base/components/product-name/stories/index.js +0 -26
  267. assets/js/base/components/product-name/style.scss +0 -4
  268. assets/js/base/components/product-name/test/__snapshots__/index.js.snap +0 -49
  269. assets/js/base/components/product-name/test/index.js +0 -48
  270. assets/js/base/components/product-price/index.js +0 -214
  271. assets/js/base/components/product-price/stories/index.js +0 -57
  272. assets/js/base/components/product-price/style.scss +0 -29
  273. assets/js/base/components/product-price/test/__snapshots__/index.js.snap +0 -57
  274. assets/js/base/components/product-price/test/index.js +0 -63
  275. assets/js/base/components/product-sort-select/index.js +89 -0
  276. assets/js/base/components/product-sort-select/style.scss +4 -0
  277. assets/js/base/components/quantity-selector/index.tsx +0 -159
  278. assets/js/base/components/quantity-selector/stories/index.js +0 -30
  279. assets/js/base/components/quantity-selector/style.scss +0 -121
  280. assets/js/base/components/radio-control-accordion/index.js +0 -73
  281. assets/js/base/components/radio-control/index.js +0 -52
  282. assets/js/base/components/radio-control/option-layout.tsx +0 -56
  283. assets/js/base/components/radio-control/option.js +0 -57
  284. assets/js/base/components/radio-control/style.scss +0 -115
  285. assets/js/base/components/read-more/index.js +1 -1
  286. assets/js/base/components/read-more/stories/index.js +0 -53
  287. assets/js/base/components/read-more/test/index.js +3 -3
  288. assets/js/base/components/read-more/utils.js +5 -5
  289. assets/js/base/components/review-list-item/index.js +213 -0
  290. assets/js/base/components/review-list-item/style.scss +149 -0
.prettierrc.js DELETED
@@ -1,3 +0,0 @@
1
- // Import the default config file and expose it in the project root.
2
- // Useful for editor integrations.
3
- module.exports = require( '@wordpress/prettier-config' );
 
 
 
LICENSE DELETED
@@ -1,674 +0,0 @@
1
- GNU GENERAL PUBLIC LICENSE
2
- Version 3, 29 June 2007
3
-
4
- Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
5
- Everyone is permitted to copy and distribute verbatim copies
6
- of this license document, but changing it is not allowed.
7
-
8
- Preamble
9
-
10
- The GNU General Public License is a free, copyleft license for
11
- software and other kinds of works.
12
-
13
- The licenses for most software and other practical works are designed
14
- to take away your freedom to share and change the works. By contrast,
15
- the GNU General Public License is intended to guarantee your freedom to
16
- share and change all versions of a program--to make sure it remains free
17
- software for all its users. We, the Free Software Foundation, use the
18
- GNU General Public License for most of our software; it applies also to
19
- any other work released this way by its authors. You can apply it to
20
- your programs, too.
21
-
22
- When we speak of free software, we are referring to freedom, not
23
- price. Our General Public Licenses are designed to make sure that you
24
- have the freedom to distribute copies of free software (and charge for
25
- them if you wish), that you receive source code or can get it if you
26
- want it, that you can change the software or use pieces of it in new
27
- free programs, and that you know you can do these things.
28
-
29
- To protect your rights, we need to prevent others from denying you
30
- these rights or asking you to surrender the rights. Therefore, you have
31
- certain responsibilities if you distribute copies of the software, or if
32
- you modify it: responsibilities to respect the freedom of others.
33
-
34
- For example, if you distribute copies of such a program, whether
35
- gratis or for a fee, you must pass on to the recipients the same
36
- freedoms that you received. You must make sure that they, too, receive
37
- or can get the source code. And you must show them these terms so they
38
- know their rights.
39
-
40
- Developers that use the GNU GPL protect your rights with two steps:
41
- (1) assert copyright on the software, and (2) offer you this License
42
- giving you legal permission to copy, distribute and/or modify it.
43
-
44
- For the developers' and authors' protection, the GPL clearly explains
45
- that there is no warranty for this free software. For both users' and
46
- authors' sake, the GPL requires that modified versions be marked as
47
- changed, so that their problems will not be attributed erroneously to
48
- authors of previous versions.
49
-
50
- Some devices are designed to deny users access to install or run
51
- modified versions of the software inside them, although the manufacturer
52
- can do so. This is fundamentally incompatible with the aim of
53
- protecting users' freedom to change the software. The systematic
54
- pattern of such abuse occurs in the area of products for individuals to
55
- use, which is precisely where it is most unacceptable. Therefore, we
56
- have designed this version of the GPL to prohibit the practice for those
57
- products. If such problems arise substantially in other domains, we
58
- stand ready to extend this provision to those domains in future versions
59
- of the GPL, as needed to protect the freedom of users.
60
-
61
- Finally, every program is threatened constantly by software patents.
62
- States should not allow patents to restrict development and use of
63
- software on general-purpose computers, but in those that do, we wish to
64
- avoid the special danger that patents applied to a free program could
65
- make it effectively proprietary. To prevent this, the GPL assures that
66
- patents cannot be used to render the program non-free.
67
-
68
- The precise terms and conditions for copying, distribution and
69
- modification follow.
70
-
71
- TERMS AND CONDITIONS
72
-
73
- 0. Definitions.
74
-
75
- "This License" refers to version 3 of the GNU General Public License.
76
-
77
- "Copyright" also means copyright-like laws that apply to other kinds of
78
- works, such as semiconductor masks.
79
-
80
- "The Program" refers to any copyrightable work licensed under this
81
- License. Each licensee is addressed as "you". "Licensees" and
82
- "recipients" may be individuals or organizations.
83
-
84
- To "modify" a work means to copy from or adapt all or part of the work
85
- in a fashion requiring copyright permission, other than the making of an
86
- exact copy. The resulting work is called a "modified version" of the
87
- earlier work or a work "based on" the earlier work.
88
-
89
- A "covered work" means either the unmodified Program or a work based
90
- on the Program.
91
-
92
- To "propagate" a work means to do anything with it that, without
93
- permission, would make you directly or secondarily liable for
94
- infringement under applicable copyright law, except executing it on a
95
- computer or modifying a private copy. Propagation includes copying,
96
- distribution (with or without modification), making available to the
97
- public, and in some countries other activities as well.
98
-
99
- To "convey" a work means any kind of propagation that enables other
100
- parties to make or receive copies. Mere interaction with a user through
101
- a computer network, with no transfer of a copy, is not conveying.
102
-
103
- An interactive user interface displays "Appropriate Legal Notices"
104
- to the extent that it includes a convenient and prominently visible
105
- feature that (1) displays an appropriate copyright notice, and (2)
106
- tells the user that there is no warranty for the work (except to the
107
- extent that warranties are provided), that licensees may convey the
108
- work under this License, and how to view a copy of this License. If
109
- the interface presents a list of user commands or options, such as a
110
- menu, a prominent item in the list meets this criterion.
111
-
112
- 1. Source Code.
113
-
114
- The "source code" for a work means the preferred form of the work
115
- for making modifications to it. "Object code" means any non-source
116
- form of a work.
117
-
118
- A "Standard Interface" means an interface that either is an official
119
- standard defined by a recognized standards body, or, in the case of
120
- interfaces specified for a particular programming language, one that
121
- is widely used among developers working in that language.
122
-
123
- The "System Libraries" of an executable work include anything, other
124
- than the work as a whole, that (a) is included in the normal form of
125
- packaging a Major Component, but which is not part of that Major
126
- Component, and (b) serves only to enable use of the work with that
127
- Major Component, or to implement a Standard Interface for which an
128
- implementation is available to the public in source code form. A
129
- "Major Component", in this context, means a major essential component
130
- (kernel, window system, and so on) of the specific operating system
131
- (if any) on which the executable work runs, or a compiler used to
132
- produce the work, or an object code interpreter used to run it.
133
-
134
- The "Corresponding Source" for a work in object code form means all
135
- the source code needed to generate, install, and (for an executable
136
- work) run the object code and to modify the work, including scripts to
137
- control those activities. However, it does not include the work's
138
- System Libraries, or general-purpose tools or generally available free
139
- programs which are used unmodified in performing those activities but
140
- which are not part of the work. For example, Corresponding Source
141
- includes interface definition files associated with source files for
142
- the work, and the source code for shared libraries and dynamically
143
- linked subprograms that the work is specifically designed to require,
144
- such as by intimate data communication or control flow between those
145
- subprograms and other parts of the work.
146
-
147
- The Corresponding Source need not include anything that users
148
- can regenerate automatically from other parts of the Corresponding
149
- Source.
150
-
151
- The Corresponding Source for a work in source code form is that
152
- same work.
153
-
154
- 2. Basic Permissions.
155
-
156
- All rights granted under this License are granted for the term of
157
- copyright on the Program, and are irrevocable provided the stated
158
- conditions are met. This License explicitly affirms your unlimited
159
- permission to run the unmodified Program. The output from running a
160
- covered work is covered by this License only if the output, given its
161
- content, constitutes a covered work. This License acknowledges your
162
- rights of fair use or other equivalent, as provided by copyright law.
163
-
164
- You may make, run and propagate covered works that you do not
165
- convey, without conditions so long as your license otherwise remains
166
- in force. You may convey covered works to others for the sole purpose
167
- of having them make modifications exclusively for you, or provide you
168
- with facilities for running those works, provided that you comply with
169
- the terms of this License in conveying all material for which you do
170
- not control copyright. Those thus making or running the covered works
171
- for you must do so exclusively on your behalf, under your direction
172
- and control, on terms that prohibit them from making any copies of
173
- your copyrighted material outside their relationship with you.
174
-
175
- Conveying under any other circumstances is permitted solely under
176
- the conditions stated below. Sublicensing is not allowed; section 10
177
- makes it unnecessary.
178
-
179
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180
-
181
- No covered work shall be deemed part of an effective technological
182
- measure under any applicable law fulfilling obligations under article
183
- 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184
- similar laws prohibiting or restricting circumvention of such
185
- measures.
186
-
187
- When you convey a covered work, you waive any legal power to forbid
188
- circumvention of technological measures to the extent such circumvention
189
- is effected by exercising rights under this License with respect to
190
- the covered work, and you disclaim any intention to limit operation or
191
- modification of the work as a means of enforcing, against the work's
192
- users, your or third parties' legal rights to forbid circumvention of
193
- technological measures.
194
-
195
- 4. Conveying Verbatim Copies.
196
-
197
- You may convey verbatim copies of the Program's source code as you
198
- receive it, in any medium, provided that you conspicuously and
199
- appropriately publish on each copy an appropriate copyright notice;
200
- keep intact all notices stating that this License and any
201
- non-permissive terms added in accord with section 7 apply to the code;
202
- keep intact all notices of the absence of any warranty; and give all
203
- recipients a copy of this License along with the Program.
204
-
205
- You may charge any price or no price for each copy that you convey,
206
- and you may offer support or warranty protection for a fee.
207
-
208
- 5. Conveying Modified Source Versions.
209
-
210
- You may convey a work based on the Program, or the modifications to
211
- produce it from the Program, in the form of source code under the
212
- terms of section 4, provided that you also meet all of these conditions:
213
-
214
- a) The work must carry prominent notices stating that you modified
215
- it, and giving a relevant date.
216
-
217
- b) The work must carry prominent notices stating that it is
218
- released under this License and any conditions added under section
219
- 7. This requirement modifies the requirement in section 4 to
220
- "keep intact all notices".
221
-
222
- c) You must license the entire work, as a whole, under this
223
- License to anyone who comes into possession of a copy. This
224
- License will therefore apply, along with any applicable section 7
225
- additional terms, to the whole of the work, and all its parts,
226
- regardless of how they are packaged. This License gives no
227
- permission to license the work in any other way, but it does not
228
- invalidate such permission if you have separately received it.
229
-
230
- d) If the work has interactive user interfaces, each must display
231
- Appropriate Legal Notices; however, if the Program has interactive
232
- interfaces that do not display Appropriate Legal Notices, your
233
- work need not make them do so.
234
-
235
- A compilation of a covered work with other separate and independent
236
- works, which are not by their nature extensions of the covered work,
237
- and which are not combined with it such as to form a larger program,
238
- in or on a volume of a storage or distribution medium, is called an
239
- "aggregate" if the compilation and its resulting copyright are not
240
- used to limit the access or legal rights of the compilation's users
241
- beyond what the individual works permit. Inclusion of a covered work
242
- in an aggregate does not cause this License to apply to the other
243
- parts of the aggregate.
244
-
245
- 6. Conveying Non-Source Forms.
246
-
247
- You may convey a covered work in object code form under the terms
248
- of sections 4 and 5, provided that you also convey the
249
- machine-readable Corresponding Source under the terms of this License,
250
- in one of these ways:
251
-
252
- a) Convey the object code in, or embodied in, a physical product
253
- (including a physical distribution medium), accompanied by the
254
- Corresponding Source fixed on a durable physical medium
255
- customarily used for software interchange.
256
-
257
- b) Convey the object code in, or embodied in, a physical product
258
- (including a physical distribution medium), accompanied by a
259
- written offer, valid for at least three years and valid for as
260
- long as you offer spare parts or customer support for that product
261
- model, to give anyone who possesses the object code either (1) a
262
- copy of the Corresponding Source for all the software in the
263
- product that is covered by this License, on a durable physical
264
- medium customarily used for software interchange, for a price no
265
- more than your reasonable cost of physically performing this
266
- conveying of source, or (2) access to copy the
267
- Corresponding Source from a network server at no charge.
268
-
269
- c) Convey individual copies of the object code with a copy of the
270
- written offer to provide the Corresponding Source. This
271
- alternative is allowed only occasionally and noncommercially, and
272
- only if you received the object code with such an offer, in accord
273
- with subsection 6b.
274
-
275
- d) Convey the object code by offering access from a designated
276
- place (gratis or for a charge), and offer equivalent access to the
277
- Corresponding Source in the same way through the same place at no
278
- further charge. You need not require recipients to copy the
279
- Corresponding Source along with the object code. If the place to
280
- copy the object code is a network server, the Corresponding Source
281
- may be on a different server (operated by you or a third party)
282
- that supports equivalent copying facilities, provided you maintain
283
- clear directions next to the object code saying where to find the
284
- Corresponding Source. Regardless of what server hosts the
285
- Corresponding Source, you remain obligated to ensure that it is
286
- available for as long as needed to satisfy these requirements.
287
-
288
- e) Convey the object code using peer-to-peer transmission, provided
289
- you inform other peers where the object code and Corresponding
290
- Source of the work are being offered to the general public at no
291
- charge under subsection 6d.
292
-
293
- A separable portion of the object code, whose source code is excluded
294
- from the Corresponding Source as a System Library, need not be
295
- included in conveying the object code work.
296
-
297
- A "User Product" is either (1) a "consumer product", which means any
298
- tangible personal property which is normally used for personal, family,
299
- or household purposes, or (2) anything designed or sold for incorporation
300
- into a dwelling. In determining whether a product is a consumer product,
301
- doubtful cases shall be resolved in favor of coverage. For a particular
302
- product received by a particular user, "normally used" refers to a
303
- typical or common use of that class of product, regardless of the status
304
- of the particular user or of the way in which the particular user
305
- actually uses, or expects or is expected to use, the product. A product
306
- is a consumer product regardless of whether the product has substantial
307
- commercial, industrial or non-consumer uses, unless such uses represent
308
- the only significant mode of use of the product.
309
-
310
- "Installation Information" for a User Product means any methods,
311
- procedures, authorization keys, or other information required to install
312
- and execute modified versions of a covered work in that User Product from
313
- a modified version of its Corresponding Source. The information must
314
- suffice to ensure that the continued functioning of the modified object
315
- code is in no case prevented or interfered with solely because
316
- modification has been made.
317
-
318
- If you convey an object code work under this section in, or with, or
319
- specifically for use in, a User Product, and the conveying occurs as
320
- part of a transaction in which the right of possession and use of the
321
- User Product is transferred to the recipient in perpetuity or for a
322
- fixed term (regardless of how the transaction is characterized), the
323
- Corresponding Source conveyed under this section must be accompanied
324
- by the Installation Information. But this requirement does not apply
325
- if neither you nor any third party retains the ability to install
326
- modified object code on the User Product (for example, the work has
327
- been installed in ROM).
328
-
329
- The requirement to provide Installation Information does not include a
330
- requirement to continue to provide support service, warranty, or updates
331
- for a work that has been modified or installed by the recipient, or for
332
- the User Product in which it has been modified or installed. Access to a
333
- network may be denied when the modification itself materially and
334
- adversely affects the operation of the network or violates the rules and
335
- protocols for communication across the network.
336
-
337
- Corresponding Source conveyed, and Installation Information provided,
338
- in accord with this section must be in a format that is publicly
339
- documented (and with an implementation available to the public in
340
- source code form), and must require no special password or key for
341
- unpacking, reading or copying.
342
-
343
- 7. Additional Terms.
344
-
345
- "Additional permissions" are terms that supplement the terms of this
346
- License by making exceptions from one or more of its conditions.
347
- Additional permissions that are applicable to the entire Program shall
348
- be treated as though they were included in this License, to the extent
349
- that they are valid under applicable law. If additional permissions
350
- apply only to part of the Program, that part may be used separately
351
- under those permissions, but the entire Program remains governed by
352
- this License without regard to the additional permissions.
353
-
354
- When you convey a copy of a covered work, you may at your option
355
- remove any additional permissions from that copy, or from any part of
356
- it. (Additional permissions may be written to require their own
357
- removal in certain cases when you modify the work.) You may place
358
- additional permissions on material, added by you to a covered work,
359
- for which you have or can give appropriate copyright permission.
360
-
361
- Notwithstanding any other provision of this License, for material you
362
- add to a covered work, you may (if authorized by the copyright holders of
363
- that material) supplement the terms of this License with terms:
364
-
365
- a) Disclaiming warranty or limiting liability differently from the
366
- terms of sections 15 and 16 of this License; or
367
-
368
- b) Requiring preservation of specified reasonable legal notices or
369
- author attributions in that material or in the Appropriate Legal
370
- Notices displayed by works containing it; or
371
-
372
- c) Prohibiting misrepresentation of the origin of that material, or
373
- requiring that modified versions of such material be marked in
374
- reasonable ways as different from the original version; or
375
-
376
- d) Limiting the use for publicity purposes of names of licensors or
377
- authors of the material; or
378
-
379
- e) Declining to grant rights under trademark law for use of some
380
- trade names, trademarks, or service marks; or
381
-
382
- f) Requiring indemnification of licensors and authors of that
383
- material by anyone who conveys the material (or modified versions of
384
- it) with contractual assumptions of liability to the recipient, for
385
- any liability that these contractual assumptions directly impose on
386
- those licensors and authors.
387
-
388
- All other non-permissive additional terms are considered "further
389
- restrictions" within the meaning of section 10. If the Program as you
390
- received it, or any part of it, contains a notice stating that it is
391
- governed by this License along with a term that is a further
392
- restriction, you may remove that term. If a license document contains
393
- a further restriction but permits relicensing or conveying under this
394
- License, you may add to a covered work material governed by the terms
395
- of that license document, provided that the further restriction does
396
- not survive such relicensing or conveying.
397
-
398
- If you add terms to a covered work in accord with this section, you
399
- must place, in the relevant source files, a statement of the
400
- additional terms that apply to those files, or a notice indicating
401
- where to find the applicable terms.
402
-
403
- Additional terms, permissive or non-permissive, may be stated in the
404
- form of a separately written license, or stated as exceptions;
405
- the above requirements apply either way.
406
-
407
- 8. Termination.
408
-
409
- You may not propagate or modify a covered work except as expressly
410
- provided under this License. Any attempt otherwise to propagate or
411
- modify it is void, and will automatically terminate your rights under
412
- this License (including any patent licenses granted under the third
413
- paragraph of section 11).
414
-
415
- However, if you cease all violation of this License, then your
416
- license from a particular copyright holder is reinstated (a)
417
- provisionally, unless and until the copyright holder explicitly and
418
- finally terminates your license, and (b) permanently, if the copyright
419
- holder fails to notify you of the violation by some reasonable means
420
- prior to 60 days after the cessation.
421
-
422
- Moreover, your license from a particular copyright holder is
423
- reinstated permanently if the copyright holder notifies you of the
424
- violation by some reasonable means, this is the first time you have
425
- received notice of violation of this License (for any work) from that
426
- copyright holder, and you cure the violation prior to 30 days after
427
- your receipt of the notice.
428
-
429
- Termination of your rights under this section does not terminate the
430
- licenses of parties who have received copies or rights from you under
431
- this License. If your rights have been terminated and not permanently
432
- reinstated, you do not qualify to receive new licenses for the same
433
- material under section 10.
434
-
435
- 9. Acceptance Not Required for Having Copies.
436
-
437
- You are not required to accept this License in order to receive or
438
- run a copy of the Program. Ancillary propagation of a covered work
439
- occurring solely as a consequence of using peer-to-peer transmission
440
- to receive a copy likewise does not require acceptance. However,
441
- nothing other than this License grants you permission to propagate or
442
- modify any covered work. These actions infringe copyright if you do
443
- not accept this License. Therefore, by modifying or propagating a
444
- covered work, you indicate your acceptance of this License to do so.
445
-
446
- 10. Automatic Licensing of Downstream Recipients.
447
-
448
- Each time you convey a covered work, the recipient automatically
449
- receives a license from the original licensors, to run, modify and
450
- propagate that work, subject to this License. You are not responsible
451
- for enforcing compliance by third parties with this License.
452
-
453
- An "entity transaction" is a transaction transferring control of an
454
- organization, or substantially all assets of one, or subdividing an
455
- organization, or merging organizations. If propagation of a covered
456
- work results from an entity transaction, each party to that
457
- transaction who receives a copy of the work also receives whatever
458
- licenses to the work the party's predecessor in interest had or could
459
- give under the previous paragraph, plus a right to possession of the
460
- Corresponding Source of the work from the predecessor in interest, if
461
- the predecessor has it or can get it with reasonable efforts.
462
-
463
- You may not impose any further restrictions on the exercise of the
464
- rights granted or affirmed under this License. For example, you may
465
- not impose a license fee, royalty, or other charge for exercise of
466
- rights granted under this License, and you may not initiate litigation
467
- (including a cross-claim or counterclaim in a lawsuit) alleging that
468
- any patent claim is infringed by making, using, selling, offering for
469
- sale, or importing the Program or any portion of it.
470
-
471
- 11. Patents.
472
-
473
- A "contributor" is a copyright holder who authorizes use under this
474
- License of the Program or a work on which the Program is based. The
475
- work thus licensed is called the contributor's "contributor version".
476
-
477
- A contributor's "essential patent claims" are all patent claims
478
- owned or controlled by the contributor, whether already acquired or
479
- hereafter acquired, that would be infringed by some manner, permitted
480
- by this License, of making, using, or selling its contributor version,
481
- but do not include claims that would be infringed only as a
482
- consequence of further modification of the contributor version. For
483
- purposes of this definition, "control" includes the right to grant
484
- patent sublicenses in a manner consistent with the requirements of
485
- this License.
486
-
487
- Each contributor grants you a non-exclusive, worldwide, royalty-free
488
- patent license under the contributor's essential patent claims, to
489
- make, use, sell, offer for sale, import and otherwise run, modify and
490
- propagate the contents of its contributor version.
491
-
492
- In the following three paragraphs, a "patent license" is any express
493
- agreement or commitment, however denominated, not to enforce a patent
494
- (such as an express permission to practice a patent or covenant not to
495
- sue for patent infringement). To "grant" such a patent license to a
496
- party means to make such an agreement or commitment not to enforce a
497
- patent against the party.
498
-
499
- If you convey a covered work, knowingly relying on a patent license,
500
- and the Corresponding Source of the work is not available for anyone
501
- to copy, free of charge and under the terms of this License, through a
502
- publicly available network server or other readily accessible means,
503
- then you must either (1) cause the Corresponding Source to be so
504
- available, or (2) arrange to deprive yourself of the benefit of the
505
- patent license for this particular work, or (3) arrange, in a manner
506
- consistent with the requirements of this License, to extend the patent
507
- license to downstream recipients. "Knowingly relying" means you have
508
- actual knowledge that, but for the patent license, your conveying the
509
- covered work in a country, or your recipient's use of the covered work
510
- in a country, would infringe one or more identifiable patents in that
511
- country that you have reason to believe are valid.
512
-
513
- If, pursuant to or in connection with a single transaction or
514
- arrangement, you convey, or propagate by procuring conveyance of, a
515
- covered work, and grant a patent license to some of the parties
516
- receiving the covered work authorizing them to use, propagate, modify
517
- or convey a specific copy of the covered work, then the patent license
518
- you grant is automatically extended to all recipients of the covered
519
- work and works based on it.
520
-
521
- A patent license is "discriminatory" if it does not include within
522
- the scope of its coverage, prohibits the exercise of, or is
523
- conditioned on the non-exercise of one or more of the rights that are
524
- specifically granted under this License. You may not convey a covered
525
- work if you are a party to an arrangement with a third party that is
526
- in the business of distributing software, under which you make payment
527
- to the third party based on the extent of your activity of conveying
528
- the work, and under which the third party grants, to any of the
529
- parties who would receive the covered work from you, a discriminatory
530
- patent license (a) in connection with copies of the covered work
531
- conveyed by you (or copies made from those copies), or (b) primarily
532
- for and in connection with specific products or compilations that
533
- contain the covered work, unless you entered into that arrangement,
534
- or that patent license was granted, prior to 28 March 2007.
535
-
536
- Nothing in this License shall be construed as excluding or limiting
537
- any implied license or other defenses to infringement that may
538
- otherwise be available to you under applicable patent law.
539
-
540
- 12. No Surrender of Others' Freedom.
541
-
542
- If conditions are imposed on you (whether by court order, agreement or
543
- otherwise) that contradict the conditions of this License, they do not
544
- excuse you from the conditions of this License. If you cannot convey a
545
- covered work so as to satisfy simultaneously your obligations under this
546
- License and any other pertinent obligations, then as a consequence you may
547
- not convey it at all. For example, if you agree to terms that obligate you
548
- to collect a royalty for further conveying from those to whom you convey
549
- the Program, the only way you could satisfy both those terms and this
550
- License would be to refrain entirely from conveying the Program.
551
-
552
- 13. Use with the GNU Affero General Public License.
553
-
554
- Notwithstanding any other provision of this License, you have
555
- permission to link or combine any covered work with a work licensed
556
- under version 3 of the GNU Affero General Public License into a single
557
- combined work, and to convey the resulting work. The terms of this
558
- License will continue to apply to the part which is the covered work,
559
- but the special requirements of the GNU Affero General Public License,
560
- section 13, concerning interaction through a network will apply to the
561
- combination as such.
562
-
563
- 14. Revised Versions of this License.
564
-
565
- The Free Software Foundation may publish revised and/or new versions of
566
- the GNU General Public License from time to time. Such new versions will
567
- be similar in spirit to the present version, but may differ in detail to
568
- address new problems or concerns.
569
-
570
- Each version is given a distinguishing version number. If the
571
- Program specifies that a certain numbered version of the GNU General
572
- Public License "or any later version" applies to it, you have the
573
- option of following the terms and conditions either of that numbered
574
- version or of any later version published by the Free Software
575
- Foundation. If the Program does not specify a version number of the
576
- GNU General Public License, you may choose any version ever published
577
- by the Free Software Foundation.
578
-
579
- If the Program specifies that a proxy can decide which future
580
- versions of the GNU General Public License can be used, that proxy's
581
- public statement of acceptance of a version permanently authorizes you
582
- to choose that version for the Program.
583
-
584
- Later license versions may give you additional or different
585
- permissions. However, no additional obligations are imposed on any
586
- author or copyright holder as a result of your choosing to follow a
587
- later version.
588
-
589
- 15. Disclaimer of Warranty.
590
-
591
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592
- APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593
- HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594
- OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596
- PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597
- IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598
- ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599
-
600
- 16. Limitation of Liability.
601
-
602
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603
- WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604
- THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605
- GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606
- USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607
- DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608
- PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609
- EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610
- SUCH DAMAGES.
611
-
612
- 17. Interpretation of Sections 15 and 16.
613
-
614
- If the disclaimer of warranty and limitation of liability provided
615
- above cannot be given local legal effect according to their terms,
616
- reviewing courts shall apply local law that most closely approximates
617
- an absolute waiver of all civil liability in connection with the
618
- Program, unless a warranty or assumption of liability accompanies a
619
- copy of the Program in return for a fee.
620
-
621
- END OF TERMS AND CONDITIONS
622
-
623
- How to Apply These Terms to Your New Programs
624
-
625
- If you develop a new program, and you want it to be of the greatest
626
- possible use to the public, the best way to achieve this is to make it
627
- free software which everyone can redistribute and change under these terms.
628
-
629
- To do so, attach the following notices to the program. It is safest
630
- to attach them to the start of each source file to most effectively
631
- state the exclusion of warranty; and each file should have at least
632
- the "copyright" line and a pointer to where the full notice is found.
633
-
634
- <one line to give the program's name and a brief idea of what it does.>
635
- Copyright (C) <year> <name of author>
636
-
637
- This program is free software: you can redistribute it and/or modify
638
- it under the terms of the GNU General Public License as published by
639
- the Free Software Foundation, either version 3 of the License, or
640
- (at your option) any later version.
641
-
642
- This program is distributed in the hope that it will be useful,
643
- but WITHOUT ANY WARRANTY; without even the implied warranty of
644
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645
- GNU General Public License for more details.
646
-
647
- You should have received a copy of the GNU General Public License
648
- along with this program. If not, see <https://www.gnu.org/licenses/>.
649
-
650
- Also add information on how to contact you by electronic and paper mail.
651
-
652
- If the program does terminal interaction, make it output a short
653
- notice like this when it starts in an interactive mode:
654
-
655
- <program> Copyright (C) <year> <name of author>
656
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657
- This is free software, and you are welcome to redistribute it
658
- under certain conditions; type `show c' for details.
659
-
660
- The hypothetical commands `show w' and `show c' should show the appropriate
661
- parts of the General Public License. Of course, your program's commands
662
- might be different; for a GUI interface, you would use an "about box".
663
-
664
- You should also get your employer (if you work as a programmer) or school,
665
- if any, to sign a "copyright disclaimer" for the program, if necessary.
666
- For more information on this, and how to apply and follow the GNU GPL, see
667
- <https://www.gnu.org/licenses/>.
668
-
669
- The GNU General Public License does not permit incorporating your program
670
- into proprietary programs. If your program is a subroutine library, you
671
- may consider it more useful to permit linking proprietary applications with
672
- the library. If this is what you want to do, use the GNU Lesser General
673
- Public License instead of this License. But first, please read
674
- <https://www.gnu.org/licenses/why-not-lgpl.html>.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/abstracts/_breakpoints.scss CHANGED
@@ -5,11 +5,9 @@
5
 
6
  // Think very carefully before adding a new breakpoint.
7
  // The list below is based on wp-admin's main breakpoints
8
- // See https://github.com/WordPress/gutenberg/tree/master/packages/viewport#usage
9
  $breakpoints: 480px, 600px, 782px, 960px, 1280px, 1440px;
10
 
11
- // @todo refactor breakpoints so they use the mixins from Gutenberg
12
- // https://github.com/WordPress/gutenberg/blob/master/packages/base-styles/_mixins.scss
13
  @mixin breakpoint( $sizes... ) {
14
  @each $size in $sizes {
15
  @if type-of( $size ) == string {
5
 
6
  // Think very carefully before adding a new breakpoint.
7
  // The list below is based on wp-admin's main breakpoints
8
+ // See https://github.com/WordPress/gutenberg/tree/master/packages/viewport#breakpoints
9
  $breakpoints: 480px, 600px, 782px, 960px, 1280px, 1440px;
10
 
 
 
11
  @mixin breakpoint( $sizes... ) {
12
  @each $size in $sizes {
13
  @if type-of( $size ) == string {
assets/css/abstracts/_colors.scss CHANGED
@@ -1,21 +1,45 @@
1
- @import "node_modules/@wordpress/base-styles/colors";
2
- @import "node_modules/@automattic/color-studio/dist/color-variables";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
4
- // Bright colors
5
- $no-stock-color: $alert-red;
6
- $low-stock-color: $alert-yellow;
7
- $in-stock-color: $alert-green;
8
- $discount-color: $alert-green;
 
 
 
 
 
 
 
 
 
 
 
9
 
10
- $placeholder-color: var(--global--color-primary, $gray-200);
11
- $input-border-gray: #50575e;
12
- $input-border-dark: rgba(255, 255, 255, 0.4);
13
- $input-disabled-dark: rgba(255, 255, 255, 0.3);
14
- $controls-border-dark: rgba(255, 255, 255, 0.6);
15
- $input-text-active: #2b2d2f;
16
- $input-placeholder-dark: rgba(255, 255, 255, 0.6);
17
- $input-text-dark: #fff;
18
- $input-background-dark: rgba(0, 0, 0, 0.1);
19
- $select-dropdown-dark: #1e1e1e;
20
- $select-dropdown-light: #fff;
21
- $select-item-dark: rgba(0, 0, 0, 0.4);
1
+ // Greys
2
+ $core-grey-light-100: #f8f9f9;
3
+ $core-grey-light-200: #f3f4f5;
4
+ $core-grey-light-300: #edeff0;
5
+ $core-grey-light-400: #e8eaeb;
6
+ $core-grey-light-500: #e2e4e7;
7
+ $core-grey-light-600: #d7dade;
8
+ $core-grey-light-700: #ccd0d4;
9
+ $core-grey-light-800: #b5bcc2;
10
+ $core-grey-light-900: #a2aab2;
11
+ $core-grey-dark-100: #86909b;
12
+ $core-grey-dark-200: #78848f;
13
+ $core-grey-dark-300: #6c7781; // This & below have 4.5+ contrast against white
14
+ $core-grey-dark-400: #606a73;
15
+ $core-grey-dark-500: #555d66;
16
+ $core-grey-dark-600: #40464d;
17
+ $core-grey-dark-700: #32373c;
18
+ $core-grey-dark-800: #23282d;
19
+ $core-grey-dark-900: #191e23;
20
 
21
+ $gray-text: $core-grey-dark-500;
22
+
23
+ // WooCommerce Purples
24
+ $woocommerce-100: #ffd7ff;
25
+ $woocommerce-200: #e2a5d7;
26
+ $woocommerce-300: #c88bbd;
27
+ $woocommerce-400: #af72a4;
28
+ $woocommerce-500: #95588a;
29
+ $woocommerce-600: #7c3f71;
30
+ $woocommerce-700: #622557;
31
+ $woocommerce-800: #490c3e;
32
+ $woocommerce-900: #2f0024;
33
+ $woocommerce: $woocommerce-500;
34
+
35
+ $wp-admin-background: #f1f1f1;
36
+ $black: #24292d; // same as wp-admin sidebar
37
 
38
+ $white: #fff;
39
+
40
+ // Bright colors
41
+ $valid-green: #4ab866;
42
+ $notice-yellow: #ffb900;
43
+ $error-red: #d94f4f;
44
+ $box-shadow-blue: #5b9dd9;
45
+ $core-orange: #ca4a1f;
 
 
 
 
assets/css/abstracts/_mixins.scss CHANGED
@@ -1,14 +1,18 @@
1
- $fontSizes: (
2
- "smaller": 0.75,
3
- "small": 0.875,
4
- "regular": 1,
5
- "large": 1.25,
6
- "larger": 2,
7
- );
 
8
 
9
- // Maps a named font-size to its em equivalent.
10
- @mixin font-size($sizeName) {
11
- font-size: map-get($fontSizes, $sizeName) * 1em;
 
 
 
12
  }
13
 
14
  @keyframes loading-fade {
@@ -26,17 +30,13 @@ $fontSizes: (
26
  // Adds animation to placeholder section
27
  @mixin placeholder() {
28
  animation: loading-fade 1.2s ease-in-out infinite;
29
- background-color: $placeholder-color !important;
30
- color: $placeholder-color !important;
31
- outline: 0 !important;
32
- border: 0 !important;
33
  box-shadow: none;
34
- pointer-events: none;
35
- max-width: 100%;
36
 
37
- // Forces direct descendants to keep layout but lose visibility.
38
- > * {
39
- visibility: hidden;
40
  }
41
 
42
  @media screen and (prefers-reduced-motion: reduce) {
@@ -44,15 +44,17 @@ $fontSizes: (
44
  }
45
  }
46
 
47
- @mixin force-content() {
48
- &::after {
49
- content: "\00a0";
 
 
 
50
  }
51
  }
52
 
53
- // Hide an element from sighted users, but available to screen reader users.
54
  @mixin visually-hidden() {
55
- border: 0;
56
  clip: rect(1px, 1px, 1px, 1px);
57
  clip-path: inset(50%);
58
  height: 1px;
@@ -62,132 +64,14 @@ $fontSizes: (
62
  /* Many screen reader and browser combinations announce broken words as they would appear visually. */
63
  overflow-wrap: normal !important;
64
  word-wrap: normal !important;
65
- padding: 0;
66
- position: absolute !important;
67
- width: 1px;
68
  }
69
 
70
- @mixin visually-hidden-focus-reveal() {
71
- background-color: #fff;
72
- border-radius: 3px;
73
- box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
74
- clip: auto !important;
75
  clip-path: none;
76
- color: $input-text-active;
77
- display: block;
78
- font-size: 0.875rem;
79
- font-weight: 700;
80
  height: auto;
81
- left: 5px;
82
- line-height: normal;
83
- padding: 15px 23px 14px;
84
- text-decoration: none;
85
- top: 5px;
86
  width: auto;
87
- z-index: 100000;
88
- }
89
-
90
- @mixin reset-box() {
91
- border: 0;
92
- border-radius: 0;
93
- margin: 0;
94
- padding: 0;
95
- vertical-align: baseline;
96
- }
97
-
98
- @mixin reset-typography() {
99
- color: inherit;
100
- font-family: inherit;
101
- font-size: inherit;
102
- font-style: inherit;
103
- font-weight: inherit;
104
- letter-spacing: inherit;
105
- line-height: inherit;
106
- text-decoration: inherit;
107
- text-transform: inherit;
108
- }
109
-
110
- // Reset <h1>, <h2>, etc. styles as if they were text. Useful for elements that must be headings for a11y but don't need those styles.
111
- @mixin text-heading() {
112
- @include reset-box();
113
- @include reset-typography();
114
- box-shadow: none;
115
- display: inline;
116
-
117
- background: transparent;
118
- }
119
-
120
- // Reset <button> style as if it was text. Useful for elements that must be `<button>` for a11y but don't need those styles.
121
- @mixin text-button() {
122
- @include reset-box();
123
- @include reset-typography();
124
- background: transparent;
125
- box-shadow: none;
126
- display: inline;
127
- text-shadow: none;
128
-
129
- &:hover,
130
- &:focus,
131
- &:active {
132
- background: transparent;
133
- }
134
- }
135
-
136
- // Reset <button> style so we can use link style for action buttons.
137
- @mixin link-button() {
138
- @include text-button();
139
- text-decoration: underline;
140
- }
141
-
142
- // Makes sure long words are broken if they overflow the container.
143
- @mixin wrap-break-word() {
144
- // This is the current standard, works in most browsers.
145
- overflow-wrap: anywhere;
146
- // Safari supports word-break.
147
- word-break: break-word;
148
- // IE11 doesn't support overflow-wrap neither word-break: break-word, so we fallback to -ms-work-break: break-all.
149
- -ms-word-break: break-all;
150
- }
151
-
152
- // Shows a border with the current color and a custom opacity. That can't be achieved
153
- // with normal border because `currentColor` doesn't allow tweaking the opacity, and
154
- // setting the opacity of the entire element would change the children's opacity too.
155
- @mixin with-translucent-border($border-width: 1px, $opacity: 0.3) {
156
- position: relative;
157
-
158
- &::after {
159
- border-style: solid;
160
- border-width: $border-width;
161
- bottom: 0;
162
- content: "";
163
- display: block;
164
- left: 0;
165
- opacity: $opacity;
166
- pointer-events: none;
167
- position: absolute;
168
- right: 0;
169
- top: 0;
170
- }
171
- }
172
-
173
- // Wraps the content with a media query specially targeting IE11.
174
- @mixin ie11() {
175
- @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
176
- @content;
177
- }
178
- }
179
-
180
- // Converts a px unit to em.
181
- @function em($size, $base: 16px) {
182
- @return $size / $base * 1em;
183
- }
184
-
185
- // Encodes hex colors so they can be used in URL content.
186
- @function encode-color($color) {
187
- @if type-of($color) != "color" or str-index(#{$color}, "#") != 1 {
188
- @return $color;
189
- }
190
-
191
- $hex: str-slice(ie-hex-str($color), 4);
192
- @return "%23" + unquote("#{$hex}");
193
  }
1
+ // Rem output with px fallback
2
+ @mixin font-size($sizeValue: 16, $lineHeight: false ) {
3
+ font-size: $sizeValue + px;
4
+ font-size: ($sizeValue / 16) + rem;
5
+ @if ($lineHeight) {
6
+ line-height: $lineHeight;
7
+ }
8
+ }
9
 
10
+ @mixin hover-state {
11
+ &:hover,
12
+ &:active,
13
+ &:focus {
14
+ @content;
15
+ }
16
  }
17
 
18
  @keyframes loading-fade {
30
  // Adds animation to placeholder section
31
  @mixin placeholder() {
32
  animation: loading-fade 1.2s ease-in-out infinite;
33
+ background-color: $core-grey-light-500 !important;
34
+ color: transparent;
35
+ border: 0;
 
36
  box-shadow: none;
 
 
37
 
38
+ &::after {
39
+ content: "\00a0";
 
40
  }
41
 
42
  @media screen and (prefers-reduced-motion: reduce) {
44
  }
45
  }
46
 
47
+ // Adds animation to transforms
48
+ @mixin animate-transform( $duration: 0.2s ) {
49
+ transition: transform ease $duration;
50
+
51
+ @media screen and (prefers-reduced-motion: reduce) {
52
+ transition: none;
53
  }
54
  }
55
 
56
+ // Hide an element from sighted users, but availble to screen reader users.
57
  @mixin visually-hidden() {
 
58
  clip: rect(1px, 1px, 1px, 1px);
59
  clip-path: inset(50%);
60
  height: 1px;
64
  /* Many screen reader and browser combinations announce broken words as they would appear visually. */
65
  overflow-wrap: normal !important;
66
  word-wrap: normal !important;
 
 
 
67
  }
68
 
69
+ // Unhide a visually hidden element
70
+ @mixin visually-shown() {
71
+ clip: auto;
 
 
72
  clip-path: none;
 
 
 
 
73
  height: auto;
 
 
 
 
 
74
  width: auto;
75
+ margin: unset;
76
+ overflow: hidden;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  }
assets/css/abstracts/_variables.scss CHANGED
@@ -1,12 +1,19 @@
1
- @import "node_modules/@wordpress/base-styles/variables";
 
 
 
 
 
 
2
 
3
- $gap-largest: $grid-unit-50;
4
- $gap-larger: 4.5 * $grid-unit;
5
- $gap-large: $grid-unit-30;
6
- $gap: $grid-unit-20;
7
- $gap-small: $grid-unit-15;
8
- $gap-smaller: $grid-unit-10;
9
- $gap-smallest: $grid-unit-05;
10
 
11
- // Cart block
12
- $cart-image-width: 5rem;
 
 
 
 
1
+ $gap-largest: 40px;
2
+ $gap-larger: 36px;
3
+ $gap-large: 24px;
4
+ $gap: 16px;
5
+ $gap-small: 12px;
6
+ $gap-smaller: 8px;
7
+ $gap-smallest: 4px;
8
 
9
+ // Variables pulled from Gutenberg.
10
+ // Editor Widths
11
+ $sidebar-width: 280px;
12
+ $content-width: 610px; // For the visual width, subtract 30px (2 * $block-padding + 2px borders). This comes to 580px, which is optimized for 70 characters.
 
 
 
13
 
14
+ // Blocks
15
+ $block-padding: 14px; // Space between block footprint and focus boundaries. These are drawn outside the block footprint, and do not affect the size.
16
+ $block-spacing: 4px; // Vertical space between blocks.
17
+ $block-side-ui-width: 28px; // Width of the movers/drag handle UI.
18
+ $block-side-ui-clearance: 2px; // Space between movers/drag handle UI, and block.
19
+ $block-container-side-padding: $block-side-ui-width + $block-padding + 2 * $block-side-ui-clearance; // Total space left and right of the block footprint.
assets/css/editor.scss CHANGED
@@ -19,7 +19,10 @@
19
  .wc-block-grid__products {
20
  list-style: none;
21
  margin: 0 (-$gap/2) $gap;
22
- padding: 0;
 
 
 
23
 
24
  .wc-block-grid__product {
25
  margin: 0 0 $gap-large 0;
@@ -37,26 +40,3 @@
37
  }
38
  }
39
 
40
- // Style inline notices in the inspector.
41
- .components-base-control {
42
- + .wc-block-base-control-notice {
43
- margin: -$gap 0 $gap;
44
- }
45
-
46
- & + .wc-block-base-control-notice:last-child {
47
- margin: -$gap 0 $gap-small;
48
- }
49
- }
50
-
51
- // Selectors with extra specificity to override some editor styles.
52
- .woocommerce-search-list__list.woocommerce-search-list__list {
53
- box-sizing: border-box;
54
- margin: 0;
55
- padding: 0;
56
- }
57
-
58
- .woocommerce-search-list__selected.woocommerce-search-list__selected > ul {
59
- list-style: none;
60
- margin: 0;
61
- padding: 0;
62
- }
19
  .wc-block-grid__products {
20
  list-style: none;
21
  margin: 0 (-$gap/2) $gap;
22
+
23
+ .wp-block-button__link {
24
+ color: inherit;
25
+ }
26
 
27
  .wc-block-grid__product {
28
  margin: 0 0 $gap-large 0;
40
  }
41
  }
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/style.scss CHANGED
@@ -1,317 +1 @@
1
- .wc-block-link-button {
2
- @include link-button();
3
- }
4
-
5
- .wc-block-suspense-placeholder {
6
- @include placeholder();
7
- @include force-content();
8
- }
9
-
10
- // These styles are for the server side rendered product grid blocks.
11
- .wc-block-grid__products .wc-block-grid__product-image {
12
- text-decoration: none;
13
- display: block;
14
- position: relative;
15
-
16
- a {
17
- text-decoration: none;
18
- border: 0;
19
- outline: 0;
20
- box-shadow: none;
21
- }
22
-
23
- img {
24
- height: auto;
25
- width: 100%;
26
-
27
- &[hidden] {
28
- display: none;
29
- }
30
- }
31
- }
32
- .edit-post-visual-editor .editor-block-list__block .wc-block-grid__product-title,
33
- .editor-styles-wrapper .wc-block-grid__product-title,
34
- .wc-block-grid__product-title {
35
- font-family: inherit;
36
- line-height: 1.2em;
37
- font-weight: 700;
38
- padding: 0;
39
- color: inherit;
40
- font-size: inherit;
41
- display: block;
42
- }
43
- .wc-block-grid__product-price {
44
- display: block;
45
-
46
- .wc-block-grid__product-price__regular {
47
- margin-right: 0.5em;
48
- }
49
- }
50
- .wc-block-grid__product-add-to-cart.wp-block-button {
51
- word-break: break-word;
52
- white-space: normal;
53
- .wp-block-button__link {
54
- word-break: break-word;
55
- white-space: normal;
56
- margin: 0 auto !important;
57
- display: inline-flex;
58
- justify-content: center;
59
- text-align: center;
60
- // Set button font size and padding so it inherits from parent.
61
- padding: 0.5em 1em;
62
- font-size: 1em;
63
-
64
- &.loading {
65
- opacity: 0.25;
66
- }
67
-
68
- &.added::after {
69
- font-family: WooCommerce; /* stylelint-disable-line */
70
- content: "\e017";
71
- margin-left: 0.5em;
72
- display: inline-block;
73
- width: auto;
74
- height: auto;
75
- }
76
-
77
- &.loading::after {
78
- font-family: WooCommerce; /* stylelint-disable-line */
79
- content: "\e031";
80
- animation: spin 2s linear infinite;
81
- margin-left: 0.5em;
82
- display: inline-block;
83
- width: auto;
84
- height: auto;
85
- }
86
- }
87
- }
88
- // Remove button sugar if unlikely to fit.
89
- .has-5-columns:not(.alignfull),
90
- .has-6-columns,
91
- .has-7-columns,
92
- .has-8-columns,
93
- .has-9-columns {
94
- .wc-block-grid__product-add-to-cart.wp-block-button .wp-block-button__link::after {
95
- content: "";
96
- margin: 0;
97
- }
98
- }
99
-
100
- .wc-block-grid__product-rating {
101
- display: block;
102
-
103
- .wc-block-grid__product-rating__stars,
104
- .star-rating {
105
- overflow: hidden;
106
- position: relative;
107
- width: 5.3em;
108
- height: 1.618em;
109
- line-height: 1.618;
110
- font-size: 1em;
111
- /* stylelint-disable-next-line font-family-no-missing-generic-family-keyword */
112
- font-family: star;
113
- font-weight: 400;
114
- margin: 0 auto;
115
- text-align: left;
116
-
117
- &::before {
118
- content: "\53\53\53\53\53";
119
- top: 0;
120
- left: 0;
121
- right: 0;
122
- position: absolute;
123
- opacity: 0.5;
124
- color: #aaa;
125
- white-space: nowrap;
126
- }
127
- span {
128
- overflow: hidden;
129
- top: 0;
130
- left: 0;
131
- right: 0;
132
- position: absolute;
133
- padding-top: 1.5em;
134
- }
135
- span::before {
136
- content: "\53\53\53\53\53";
137
- top: 0;
138
- left: 0;
139
- right: 0;
140
- position: absolute;
141
- color: #000;
142
- white-space: nowrap;
143
- }
144
- }
145
- }
146
- .wc-block-grid__product-onsale {
147
- @include font-size(small);
148
- padding: em($gap-smallest) em($gap-small);
149
- display: inline-block;
150
- width: auto;
151
- border: 1px solid #43454b;
152
- border-radius: 3px;
153
- color: #43454b;
154
- background: #fff;
155
- text-align: center;
156
- text-transform: uppercase;
157
- font-weight: 600;
158
- z-index: 9;
159
- position: relative;
160
- }
161
-
162
- // Element spacing.
163
- .wc-block-grid__product {
164
- .wc-block-grid__product-image,
165
- .wc-block-grid__product-title {
166
- margin: 0 0 $gap-small;
167
- }
168
- // If centered when toggling alignment on, use auto margins to prevent flexbox stretching it.
169
- .wc-block-grid__product-price,
170
- .wc-block-grid__product-rating,
171
- .wc-block-grid__product-add-to-cart,
172
- .wc-block-grid__product-onsale {
173
- margin: 0 auto $gap-small;
174
- }
175
- }
176
-
177
- .theme-twentysixteen {
178
- .wc-block-grid {
179
- // Prevent white theme styles.
180
- .price ins {
181
- color: #77a464;
182
- }
183
- }
184
- }
185
-
186
- .theme-twentynineteen {
187
- .wc-block-grid__product {
188
- font-size: 0.88889em;
189
- }
190
- // Change the title font to match headings.
191
- .wc-block-grid__product-title,
192
- .wc-block-grid__product-onsale,
193
- .wc-block-components-product-title,
194
- .wc-block-components-product-sale-badge {
195
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
196
- }
197
- .wc-block-grid__product-title::before {
198
- display: none;
199
- }
200
- .wc-block-grid__product-onsale,
201
- .wc-block-components-product-sale-badge {
202
- line-height: 1;
203
- }
204
- .editor-styles-wrapper .wp-block-button .wp-block-button__link:not(.has-text-color) {
205
- color: #fff;
206
- }
207
- }
208
-
209
- .theme-twentytwenty {
210
- $twentytwenty-headings: -apple-system, blinkmacsystemfont, "Helvetica Neue", helvetica, sans-serif;
211
- $twentytwenty-highlights-color: #cd2653;
212
-
213
- .wc-block-grid__product-link {
214
- color: #000;
215
- }
216
-
217
- .wc-block-grid__product-title,
218
- .wc-block-components-product-title {
219
- font-family: $twentytwenty-headings;
220
- color: #000;
221
- font-size: 1.2em;
222
- }
223
-
224
- .wp-block-columns .wc-block-components-product-title {
225
- margin-top: 0;
226
- }
227
-
228
- .wc-block-grid__product-price,
229
- .wc-block-components-product-price {
230
- &__value,
231
- .woocommerce-Price-amount {
232
- font-family: $twentytwenty-headings;
233
- font-size: 0.9em;
234
- }
235
-
236
- del {
237
- opacity: 0.5;
238
- }
239
-
240
- ins {
241
- text-decoration: none;
242
- }
243
- }
244
-
245
- .wc-block-grid__product-rating,
246
- .star-rating {
247
- font-size: 0.7em;
248
-
249
- .wc-block-grid__product-rating__stars,
250
- .wc-block-components-product-rating__stars {
251
- line-height: 1;
252
- }
253
- }
254
-
255
- .wc-block-grid__product-add-to-cart > .wp-block-button__link,
256
- .wc-block-components-product-button > .wp-block-button__link {
257
- font-family: $twentytwenty-headings;
258
- }
259
-
260
- .wc-block-grid__products .wc-block-grid__product-onsale,
261
- .wc-block-components-product-sale-badge {
262
- background: $twentytwenty-highlights-color;
263
- color: #fff;
264
- font-family: $twentytwenty-headings;
265
- font-weight: 700;
266
- letter-spacing: -0.02em;
267
- line-height: 1.2;
268
- text-transform: uppercase;
269
- }
270
-
271
- // These styles are not applied to the All Products atomic block, so it can be positioned normally.
272
- .wc-block-grid__products .wc-block-grid__product-onsale {
273
- position: absolute;
274
- right: 4px;
275
- top: 4px;
276
- z-index: 1;
277
- }
278
-
279
- // Override style from WC Core that set its position to absolute.
280
- // These rulesets can be removed once https://github.com/woocommerce/woocommerce/pull/26516 is released.
281
- .wc-block-grid__products .wc-block-components-product-sale-badge {
282
- position: static;
283
- }
284
- .wc-block-grid__products .wc-block-grid__product-image .wc-block-components-product-sale-badge {
285
- position: absolute;
286
- }
287
-
288
- // These styles are not applied to the All Products atomic block, so it can be positioned normally.
289
- .wc-block-grid__products .wc-block-grid__product-onsale:not(.wc-block-components-product-sale-badge) {
290
- position: absolute;
291
- right: 4px;
292
- top: 4px;
293
- z-index: 1;
294
- }
295
-
296
- @media only screen and (min-width: 768px) {
297
- .wc-block-grid__products .wc-block-grid__product-onsale {
298
- @include font-size(small);
299
- padding: em($gap-smaller);
300
- }
301
- }
302
-
303
- @media only screen and (min-width: 1168px) {
304
- .wc-block-grid__products .wc-block-grid__product-onsale {
305
- @include font-size(small);
306
- padding: em($gap-smaller);
307
- }
308
- }
309
- }
310
-
311
- // Default screen-reader styles. Included as a fallback for themes that don't have support.
312
- .screen-reader-text {
313
- @include visually-hidden();
314
- }
315
- .screen-reader-text:focus {
316
- @include visually-hidden-focus-reveal();
317
- }
1
+ /* Moved */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/img/block-error.svg ADDED
@@ -0,0 +1,2727 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg
2
+ width="208.5"
3
+ height="92"
4
+ viewBox="0 0 834 368"
5
+ xmlns="http://www.w3.org/2000/svg"
6
+ >
7
+ <g>
8
+ <g>
9
+ <path
10
+ fill="#DCDDDE"
11
+ d="M77.3,290.2h0.3l0.3,0.1l0.2,0.1l0.4,0.1h0.1l0.4,0.2h0.1l0.2,0.2l0.3,0.2l0,0l0.3,0.3l0.2,0.3l0,0h0.4l2,0.1
12
+ l2,0.1l2.1,0.2l1.1,0.1l1.1,0.1l1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1,0.1l1.1,0.2l1,0.2l1,0.2l1,0.2l0.9,0.2
13
+ l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.8,0.2l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.2l0.4,0.2
14
+ l0.4,0.2l0.4,0.2l0.3,0.2l0.4,0.2l0.3,0.2l0.4,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.3l0.2,0.2h0.2h1.4h0.6l0,0
15
+ l-0.2-0.3v-0.1l-0.2-0.3v-0.1l-0.1-0.3v-0.1l-0.1-0.3v-0.1l-0.1-0.4v-0.1l0.1-0.3v-0.1l0.1-0.3v-0.1l0.1-0.3l0.1-0.1l0.1-0.2
16
+ l0.1-0.2l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1
17
+ l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.1l0.5-0.1h0.4h0.5h0.4h0.4h0.4h0.4h0.4h0.4h0.4l0.7,0.1l0.7,0.1l0.7,0.1
18
+ h0.3h0.3h0.3h0.2h0.2h0.2h0.3h0.4h0.8h0.8l0.9-0.1l0.9-0.1l1-0.1l2.2-0.2l2.3-0.2l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.3-0.1
19
+ l1.2-0.1l1.3-0.1h1.2h0.7h0.7h0.7h0.6h0.7h0.6h0.7h0.6h0.7h0.6h0.6l0.6,0.1l0.6,0.1l0.5,0.1l0.6,0.1l0.5,0.1l0.6,0.1l0.5,0.1
20
+ l0.5,0.1l0.5,0.1l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.2,0.1l0.2,0.2l0.2,0.2
21
+ l0.1,0.1l0.2,0.2v0.1l0.2,0.3l0,0l0.2,0.5l0,0l0.1,0.5l0,0l0.1,0.6l0,0l-0.1,0.6l0,0l-0.2,0.5h-0.1l-0.2,0.4h-0.1l-0.1,0.1
22
+ l1.9,0.3l2.3,0.4l2.2,0.4h1.1l2.5,0.1l2.2,0.1l0.7-0.1l0.6-0.1l0.5-0.1h0.5h0.5h0.6h0.6h0.6h0.6h0.6h0.6h1.1h1.1h1.1h1.1h1.1h5.2
23
+ h0.4l4-0.2l2-0.1l2-0.1l1.2-0.1l0.1-0.2l0.4-0.4l0.5-0.3l0,0l0.3-0.1l0.4-0.1l0,0l0.4-0.1h0.2h0.4h0.4h2.4h2.4h2.4h2.4h4.8
24
+ l4.8,0.1l9.5,0.1l4.8,0.1l4.7,0.1h4.8h2.4h2.4h2.4h2.4h2.4h2.4h2.4h2.4h2.4h2.4l2.4-0.1l2.4-0.1l2.4-0.1l2.4-0.1h1.2h1.2h1.2h1.2
25
+ h1.2h1.2h1.2h1.2h2.5h2.4h2.4h1.2h1.2h0.2h0.2h0.5h0.5l0.5-0.1l0.7-0.1l0.7-0.1l1.4-0.2l1.4-0.2l0.8-0.1l0.7-0.1l0.8-0.1l0.7-0.1
26
+ l0.8-0.1h0.7h0.7h0.4h0.4h0.4h0.4h0.4h0.4h0.3h0.4h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.2l0.4,0.2l0.2,0.2l0.2,0.1
27
+ l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.3l0.1,0.2v0.2
28
+ v0.2v0.2l-0.1,0.3l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.2,0.4l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2
29
+ l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.2,0.1l-0.2,0.1l-0.3,0.1l-0.2,0.1l-0.1,0.1h0.1l0.5,0.1l0.2,0.1l0.3,0.1l0.2,0.1h0.1h0.2l0.7-0.1
30
+ l0.7-0.1l0.7-0.1l1.5-0.2l1.6-0.2l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1h0.1h0.1l0,0l0.2-0.4l0.4-0.4l0,0l0.3-0.2l0.3-0.2l0,0l0.4-0.2
31
+ h0.1l0.4-0.1h0.1l0.3-0.1h0.2h0.4h0.4h0.4h0.4h0.4h0.4h0.7l0.8,0.1l0.8,0.1l1.6,0.1l0.8,0.1h0.7h0.6h0.2h0.2h1.4h1.5h2.9h1.4h1.4
32
+ h0.7h0.7h0.7h0.7l1.9-0.1l1.9-0.1l1.8-0.1l1.9-0.1l1.9-0.1l1.9-0.1l3.8-0.3l3.7-0.3l2-0.1l1.9-0.1l1.9-0.1l1.9-0.1l2-0.1l1.9-0.1
33
+ h0.7h0.7h1.4h1.4h1.4h2.7h1.3h1.3h0.5h0.5h0.6h0.7l1.5-0.1l1.4-0.1h0.7h0.7h0.5h0.2h0.3h0.2h0.3h0.1l0.5,0.1h0.1l0.3,0.1l0.3,0.2
34
+ l0,0l0.5,0.4l0.4,0.5l0,0l0.2,0.5l0.2,0.5v0.5v0.5l0,0l-0.2,0.5L404,306l-0.2,0.4h-0.1l-0.2,0.3l-0.3,0.2l0,0l-0.5,0.3h-0.1
35
+ l-0.3,0.1l-0.2,0.1l-0.3,0.1l-1.3,0.4l-1.2,0.3l-1.3,0.3l-1.4,0.3l-1.3,0.3l-1.4,0.3l-1.3,0.3l-1.4,0.3l-1.3,0.3l-1.4,0.3
36
+ l-2.6,0.5l-5,1l-3.5,0.7h-0.2l2-0.1l2.1-0.1l2.1-0.1l2-0.1h1.8h1.6h0.8h0.6h0.2h0.6l0.9-0.1l1.1-0.1h0.7h0.7h0.7h0.7h0.8h0.8h0.8
37
+ h0.8h0.8l0.8,0.1l0.8,0.1h0.4h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1
38
+ l0.4,0.2l0.4,0.2l0.3,0.2l0.4,0.2l0.4,0.3l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.3l0.1,0.3l0.1,0.3
39
+ l0.1,0.3v0.3l0.1,0.3v0.3l-0.1,0.3v0.3l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.3
40
+ l-0.2,0.3l-0.3,0.2l-0.3,0.2l-0.3,0.2L407,323l-0.4,0.2l-0.3,0.2l-0.3,0.2l-0.4,0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
41
+ l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.5,0.1l-0.8,0.1l-0.9,0.1
42
+ l-0.9,0.1l-0.9,0.1l-1,0.1h-0.9h-0.9h-1h-1h-1h-1h-1.1h-1h-1.1h-1h-1.1h-1l-1.1-0.1l-1-0.1l-1-0.1l-1.1-0.1l-1.2-0.1v0.1v0.3v0.1
43
+ l-0.1,0.3v0.1l-0.1,0.3l-0.1,0.2l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.2l-0.2,0.2l-0.3,0.2
44
+ l-0.2,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.4,0.1l-0.7,0.2
45
+ l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.6,0.1l-0.7,0.1l-0.5,0.1l-1.1,0.1
46
+ l-0.9,0.1l-0.8,0.1l-0.7,0.1h-0.5h-0.6h-0.7h-0.7h-0.8h-0.7h-0.8h-0.8h-0.8h-0.8h-0.9h-0.9H349h-0.9h-0.9h-0.9h-1l-0.9-0.1l-1-0.1
47
+ l-1.1-0.1l-1-0.1l-1-0.1l-1.1-0.1l-1.1-0.1l-1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2
48
+ l-1.1-0.2l-1.1-0.2l-1-0.2l-1.1-0.3l-1-0.3l-1.1-0.3l-1-0.3l-1-0.3l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2
49
+ l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.4-0.2l-0.5-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2
50
+ l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.4-0.3l-0.4-0.3
51
+ l-0.3-0.3l-0.3-0.3l-0.1-0.1l-0.6,0.1l-0.9,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1.1,0.1l-1,0.1
52
+ h-0.9h-1h-1.2l-0.1,0.3l0,0l-0.3,0.4l-0.3,0.4l-0.4,0.3l0,0l-0.4,0.2l-0.3,0.2h-0.1l-0.5,0.1h-0.1h-0.4h-0.2h-0.3h-1.5h-1.5h-2.9
53
+ h-3l-2.9-0.1l-2.9-0.1l-2.9-0.1l-5.8-0.2l-5.7-0.2l-2.9-0.1l-2.9-0.1l-2.9-0.1h-2.8h-2.9h-1.4h-1.4h-2.1h-2.1h-2.1h-2.1h-2.1h-1.1
54
+ h-1.1h-1.1H225h-1.1h-1.1h-0.3h-0.3h-0.8h-1.8h-1h-1h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.2-0.1l-0.2-0.1
55
+ l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.2l-0.1-0.1l-0.2-0.2l-0.1-0.1l-0.2-0.3l-0.1-0.1l-0.2-0.4
56
+ l-0.1-0.1l-0.2-0.4v-0.1l-0.2-0.5v-0.1l-0.1-0.5v-0.1l0.1-0.5v-0.1l0.1-0.4l0.1-0.1l0.1-0.4l0.1-0.1l0.1-0.3l0.1-0.1l0.2-0.2
57
+ l0.1-0.2l0.2-0.3l0.2-0.2l0.4-0.4l0.4-0.3l0.3-0.3h-0.2h-0.1l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.8,0.3l-0.8,0.3l-0.7,0.3l-0.8,0.3
58
+ l-0.8,0.3l-0.8,0.3l-0.8,0.3l-0.8,0.3l-0.8,0.3l-1.6,0.5l-1.7,0.5l-1.6,0.5l-1.7,0.5l-1.7,0.5l-1.7,0.5l-1.7,0.5l-1.7,0.4
59
+ l-1.6,0.4l-1.6,0.4l-1.6,0.4l-2.2,0.6l0.2,0.6l0.1,0.1l0.1,0.4l0.1,0.4v0.1v0.4v0.1l0.1,0.1l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3
60
+ l0.1,0.3v0.3l0.1,0.3l-0.1,0.3v0.2v0.2l-0.1,0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2
61
+ l-0.1,0.2l-0.1,0.2l-0.2,0.2l-0.1,0.2l-0.1,0.2l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.4,0.3l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
62
+ l-0.4,0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1H175h-0.4h-0.4h-0.4h-0.4H173h-0.8h-0.8h-0.8
63
+ h-0.8H169h-0.8l-1.5-0.1l-1.5-0.1h-0.7h-0.7h-0.6h-0.6H162h-0.2h-0.2l-6.1,0.5l-3.1,0.2l-3.1,0.2l-3.1,0.2l-3.1,0.2l-3.1,0.2
64
+ l-3.1,0.2l-3.1,0.2l-1.5,0.1l-1.5,0.1l-1.5,0.1l-1.5,0.1l-1.5,0.1l-1.5,0.1l-1.5,0.1h-1.6h-1.5h-1.5h-1.5h-1.5h-1.5h-1.5h-0.4
65
+ h-0.4h-0.2l-0.4-0.1h-0.1l-0.5-0.2l0,0l-0.5-0.3l-0.4-0.4l-0.3-0.4l0,0l-0.3-0.6l-0.2-0.6v-0.6l0.1-0.6l0.2-0.6l0,0l0.2-0.4
66
+ l0.3-0.3l0.4-0.3l0,0l0.5-0.3l0,0l0.3-0.1l0.2-0.1l0.4-0.1l0.3-0.1l0.4-0.1l0.7-0.1l0.9-0.1l1-0.1l2.1-0.3l2.2-0.3l2-0.3l0.9-0.1
67
+ l0.7-0.1l1-0.1l0.9-0.1l0.9-0.1l1-0.1l1.9-0.2l1.9-0.2l1.9-0.2l1.9-0.2l1.9-0.2l0.9-0.1l0.9-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.4-0.1
68
+ l0.6-0.2l1.2-0.3l1.2-0.3l1.2-0.3l1.2-0.3l1.1-0.3l-1.2-0.1l-2.2-0.2l-1.1-0.1l-1.1-0.1l-1.1-0.1l-0.9-0.1l-1-0.1l-0.9-0.1
69
+ l-0.9-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.7-0.1l-0.7-0.1l-0.5-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.3-0.1
70
+ l-0.3-0.2l-0.2-0.1l-0.2-0.2l-0.1-0.1l-0.4-0.4l-0.1-0.1l-0.3-0.4l0,0l-0.2-0.3l0,0l-0.2-0.5l0,0l-0.1-0.5l0,0v-0.5l0,0l0.1-0.5
71
+ l0,0l0.2-0.4l0,0l0.2-0.4l0,0l0.3-0.4l0.1-0.1l0.3-0.3h-0.4h-0.7h-0.7h-0.7h-0.3h-0.3h-0.2h-0.3l-0.5-0.1l-0.5-0.1l-0.5-0.1
72
+ l-0.6-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.3-0.2l-0.2-0.1l-0.2-0.2l-0.1-0.1l-0.4-0.4
73
+ l-0.1-0.1l-0.3-0.5h-0.1l-0.2-0.5l0,0l-0.1-0.4v-0.4l0,0V314l0.1-0.4l0,0l0,0h-0.4l-0.8,0.1l-0.7,0.1h-0.7h-0.7h-0.7h-0.7h-0.8
74
+ h-0.7h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4l-2.7-0.1l-2.5-0.1h-1.2h-1.2h-1.1h-1.1H76.9h-0.2h-0.4h-0.8h-0.9h-0.9h-0.4h-0.4h-0.4h-0.4
75
+ h-0.3h-0.2l-0.4-0.1l-0.4-0.1l0,0l-0.5-0.3l-0.4-0.4l-0.4-0.5l0,0l-0.2-0.5l-0.2-0.6v-0.6l0.1-0.6l0,0l0.2-0.6l0.4-0.5l0.4-0.4
76
+ l0,0l0.4-0.2L71,308h0.1l0.3-0.1h0.1l0.2-0.1l0.7-0.2l0.7-0.2l0.7-0.1l0.2-0.1l-0.1-0.1l-0.3-0.5l0,0l-0.2-0.5l-0.1-0.5l-0.1-0.6
77
+ l0.1-0.6l0.2-0.5h0.1l0.3-0.5l0.5-0.5l0,0l0.5-0.3H75l0.4-0.2l0.2-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l-0.3-0.1
78
+ l-0.5-0.4l-0.5-0.4h-0.1h-0.9h-0.9h-0.9H73h-0.9l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.7-0.1l-0.5,0.1l-0.6,0.1h-0.5h-0.6h-0.5
79
+ h-0.6H64h-0.5h-0.6h-0.5h-0.6h-0.5h-1.1h-1.1h-1l-1.1-0.1l-1.9-0.1l-1.8-0.1h-0.8h-0.7h-0.7h-0.5h-0.4h-0.9l-2.8,0.1l-3.9,0.2
80
+ l-4.3,0.2l-2.2,0.1l-2.1,0.1l-2,0.1l-1.8,0.1h-0.8h-0.7H28h-0.6h-0.5h-0.5h-0.3h-0.2l-0.4-0.1l0,0l-0.4-0.1l-0.4-0.2l0,0l-0.4-0.3
81
+ L24,300l-0.3-0.4l0,0l-0.2-0.5l-0.1-0.5v-0.1v-0.3l-0.1-0.1v-0.3l0.1-0.1v-0.3l0.1-0.1l0.1-0.3v-0.1l0.1-0.3l0.1-0.1l0.1-0.3
82
+ l0.1-0.1l0.1-0.2l0.1-0.2l0.2-0.3l0.3-0.3l0.2-0.3l0.3-0.2l0.2-0.2l0.3-0.2L26,294l0.3-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0,0h-0.5h-0.6
83
+ h-0.3h-0.3h-0.3h-0.3l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.4-0.1l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2
84
+ l-0.3-0.3l-0.2-0.3l-0.3-0.3l-0.2-0.3l-0.2-0.4l-0.2-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4v-0.4l-0.1-0.4l0.1-0.4v-0.4l0.1-0.4l0.1-0.3
85
+ l0.1-0.3l0.1-0.2l0.1-0.3l0.1-0.2l0.1-0.3l0.1-0.1l0.2-0.3l0.1-0.1l0.2-0.2l0.1-0.1l0.2-0.2l0.1-0.1l0.3-0.2l0.1-0.1l0.2-0.2
86
+ l0.2-0.1l0.4-0.2l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1h0.4h0.4h0.4h0.3h0.4h0.3h0.4h0.3h0.4l0.3,0.1l0.4,0.1l0.7,0.1l0.7,0.2l0.7,0.2
87
+ l0.7,0.2l0.7,0.2l0.7,0.2l1.2,0.4l1.2,0.4l0.6,0.2l0.6,0.2l0.5,0.2l0.5,0.1l0.5,0.1l0.4,0.1h0.2h0.2h0.2h0.2l1.7,0.2l1.7,0.2
88
+ l1.8,0.2l1.8,0.2l3.8,0.5l4,0.5l3.9,0.5l2,0.2l1.8,0.2l1.8,0.2l1.8,0.2l1.7,0.2l1.5,0.1h0.4h0.7h0.5l0.5-0.1l1-0.2l1-0.2l1-0.2
89
+ l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.4-0.1h0.5h0.4h0.4h0.4L77.3,290.2z M330.2,321.8l-0.7,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1
90
+ l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1h-0.8h-0.8h-0.8h-0.8h-0.8H316h-0.7h-0.7h-0.7h-0.1
91
+ l0.2,0.1l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2
92
+ l0.5,0.1l0.4,0.1l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.2l0.9,0.2l0.9,0.2l1,0.2l0.9,0.2l1,0.2l1,0.2l1,0.2l1,0.2l1,0.2l1,0.1l1,0.1
93
+ l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l0.9,0.1l0.9,0.1l1,0.1l0.9,0.1h0.9h0.9h0.9h0.9h0.9h0.8h0.8h0.8h0.8h0.8h0.8h0.7h0.7h0.6h0.7h0.5
94
+ h0.4l0.5-0.1l0.8-0.1l0.9-0.1l1-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.5-0.2
95
+ l0.5-0.2l0.5-0.2l0.2-0.1h-0.1l-0.3-0.1l-0.7-0.2l-0.7-0.2l-0.6-0.2l-0.7-0.2l-0.5-0.1h-0.1H363l-0.4-0.1l-0.5-0.1l-0.7-0.1
96
+ l-0.8-0.1l-0.9-0.1l-1-0.1h-0.2l-0.7-0.1h-0.2h-0.1h-0.8h-0.8h-0.8h0.2h-1.6H352h-1.7h-0.8h-0.9h-0.8h-0.9H346h-0.8h-0.3h-0.3
97
+ h-0.4h-0.4h-0.4H343l-0.9,0.1l-0.9,0.1l-1,0.1h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.3h-0.2h-0.3h-0.2l-0.3-0.1l-0.3-0.1
98
+ l-0.2-0.1l-0.3-0.1l-0.3-0.1L334,326l-0.2-0.1l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.2-0.3l-0.2-0.3l-0.2-0.2l-0.1-0.2l-0.2-0.2
99
+ l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.2-0.4l-0.1-0.4l-0.1-0.4V322L330.2,321.8z M172.4,323.5l-0.9,0.1l-1,0.1l-1,0.1h-0.9h-1h-0.9h-0.9
100
+ h-0.9H164h-1.7h-1.6h-1.4h-0.7h-0.5h-0.5h-0.4l-3.4,0.2h-0.1l2.2,0.2l4.7,0.4l3.6,0.3h0.2l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1
101
+ l0.7-0.1l0.7-0.1l0.7-0.1l0.6-0.1l0.8-0.2l1.2-0.3L172.4,323.5L172.4,323.5z M394.4,320.2h-0.7H393h-0.7h-0.6l-1.1,0.1h-0.8h-0.6
102
+ h-0.4h-0.5h-0.7h-1.5h-1.8l-2,0.1l-2,0.1l-2.2,0.1l-4.5,0.2l-3,0.1l0.6,0.1l1.9,0.2l1.9,0.2l2,0.1l1,0.1l1,0.1l1,0.1l1,0.1h1h1
103
+ h0.9h1h1h1h0.9h0.9h0.9h0.9h0.9h0.9l0.9-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.3-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.3-0.1l0.4-0.1
104
+ l0.3-0.1l0.3-0.1l0.3-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1h0.1h-0.2h-0.3h-0.4h-0.3l-0.7-0.1h-0.7h-0.7h-0.7h-0.7H395h-0.6V320.2z
105
+ M185.1,311.1v0.5l-0.1,0.5l0,0l-0.2,0.5l-0.3,0.5l0,0l-0.2,0.3l-0.3,0.2l0,0l-0.2,0.2l0,0l0.4,0.4l0.1,0.1l0.2,0.3h0.1l0.2,0.3
106
+ l0,0l0.1,0.3h0.1l0.1,0.4l0,0l0.1,0.3l0,0l0.1,0.3l0,0l-0.1,0.4v0.1l-0.1,0.5v0.1l-0.2,0.4l-0.1,0.1l-0.2,0.3l-0.1,0.2l-0.2,0.3
107
+ l-0.2,0.3l-0.2,0.3l-0.3,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.2l-0.4,0.2l1.4-0.4l1.5-0.4l1.6-0.4l1.6-0.4l1.7-0.4l1.6-0.4
108
+ l1.6-0.5l1.7-0.5l1.6-0.5l1.6-0.5l1.6-0.5l0,0h-0.2l-1.1-0.2l-1.1-0.3l-1-0.3l-1.1-0.3l-1-0.3l-1.1-0.3l-1-0.3l-0.5-0.2l-0.5-0.2
109
+ l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.2-0.1l-0.2-0.2h-0.1l-0.3-0.2l0,0l-0.4-0.3l0,0l-0.2-0.3l-0.2-0.3h-0.1
110
+ l-0.1-0.3l-0.5-0.1l-0.8-0.2L185.1,311.1z M222.2,319.9h0.4h1.1h1h1.1h1h1.1l-0.4-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2
111
+ l-0.4-0.2l0,0h-0.6h-0.2H224h-0.1l-0.4-0.1l-0.2-0.1h-0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
112
+ l-0.3,0.1l-0.4,0.1l-0.4,0.1l-0.3,0.2h-0.1h1.6h0.8L222.2,319.9z M297.2,316.3l-2.4,0.3l-2.4,0.3l-2.4,0.3l-4.8,0.6l-4.8,0.6
113
+ l-2.4,0.3l-2.4,0.3h1h2.9h1.6h1.7h1.7h1.8l1.8-0.1l2-0.1h0.9h0.9l1-0.1l0.9-0.1l1-0.1l0.9-0.1l0.9-0.1l1-0.1l0.9-0.1l0.9-0.1
114
+ l1-0.1l0.9-0.1l0,0v-0.1l-0.1-0.3v-0.1l-0.1-0.3v-0.1v-0.3v-0.1v-0.3l0,0h-0.8h-1.2L297.2,316.3z M345.5,317.8L343,318l-0.9,0.1
115
+ l1.2,0.1l1.4,0.1l1.4,0.1h0.1l-0.1-0.2l0,0v-0.4L345.5,317.8z M159.4,308.6l-1.8,0.1l-1.8,0.1l-1.8,0.1h-0.5h-0.9h-1.3h-0.8h-0.8
116
+ h-0.9h-1h-1h-1.1h-1.1l-1.1,0.1l-1.1,0.1h-0.2l-0.1,0.2l-0.4,0.5l-0.4,0.3h0.1h0.7h0.6h0.6h0.6h0.6h1.1h1.1l1.2-0.1l1.1-0.1
117
+ l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l2.4-0.2l2.4-0.2l2-0.2l-0.8-0.2L159.4,308.6z M219.2,306.9l-2,0.1l-1.6,0.1l0.2,0.1
118
+ l0.3,0.2l0.3,0.2l0.4,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2h0.1h0.8l3,0.1l3,0.1l6,0.2l6,0.2l3.5,0.1l3.5,0.1l3.5,0.1h0.1h-0.2
119
+ l-0.3-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.1-0.1h-0.6l-2-0.1l-2-0.1l-2-0.1l-2-0.1l-2-0.1l-2-0.2l-2-0.2l-0.9-0.1l-0.9-0.1
120
+ l-0.9-0.1l-0.9-0.1l-1.8-0.2l-1.8-0.2l-1.8-0.2l-1.4-0.2H219.2z M288.8,304.3h-1.2h-0.8l1.2,0.1h0.2l2.5-0.1l2.4-0.1l0,0h-0.8
121
+ h-1.2h-1.2L288.8,304.3z"
122
+ />
123
+ <path
124
+ fill="#DCDDDE"
125
+ d="M582.2,247.8h2.8h1.4h1.4h1.4h1.4h1.4h0.7h0.7h0.7h0.7h0.7h0.7l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1
126
+ l0.7-0.1l0.7-0.1l0.7-0.1l0.5-0.1l0.6-0.1l1.1-0.2l1.2-0.1l1.1-0.1l2-0.2l0.8-0.1h0.6l0.5,0.1l0.5,0.2l0.5,0.3l0.4,0.4l0.3,0.5
127
+ l0.2,0.5l0.1,0.6v0.6l-0.1,0.6l-0.2,0.5l-0.3,0.5l-0.4,0.4l-0.5,0.3l-0.5,0.2l-0.4,0.1h1.2h1.9l0.7-0.1l1.7-0.2l0.9-0.1l0.9-0.1
128
+ l0.8-0.1l0.9-0.1h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.4l0.4,0.1l0.9,0.1l0.9,0.2l0.9,0.2l0.5,0.1l0.4,0.1l0.4,0.1
129
+ l0.4,0.1l0.2,0.1l0.2,0.1h0.1l0.3,0.2l0.3,0.2h0.1l0,0h0.2h0.5h0.5h0.5l0.5,0.1l0.5,0.1l0.5,0.1l1.1,0.1l1.1,0.2l1,0.2l1,0.1
130
+ l0.9,0.1h0.4h0.4h0.3h0.4l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l1.8,0.3h0.1l1-0.1
131
+ l1.4-0.1l1.4-0.1l0.9-0.1l-0.4-0.2l-0.8-0.4l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.1-0.1l-0.2-0.2h-0.1l-0.2-0.3h-0.1l-0.3-0.5l0,0
132
+ l-0.1-0.3l-0.1-0.3l0,0l-0.1-0.4l-0.1-0.4l0,0l0.1-0.4l0.1-0.4l0,0l0.2-0.3l0.2-0.3l0,0l0.4-0.5l0,0l0.4-0.3h0.1l0.2-0.2l0.2-0.1
133
+ l0.2-0.1l0.3-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1h0.4h0.4h0.4h0.4h0.4h0.4h0.8h0.8h0.8h0.8h0.7h0.7l0.6,0.1l0.7,0.1l0.7,0.1
134
+ l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.8,0.2h1.1h0.8h0.7h0.7h0.6l1.6,0.1l1.6,0.1l1.6,0.1l1.5,0.1l1.6,0.1l1.5,0.1l1.6,0.1l1.5,0.1
135
+ l3,0.3l2.6,0.2h0.3h1.8h2.2h1.1h1.1h1.1h1.1h1.1h1.1h1.1h1.1l1.1,0.1l1.1,0.1l1.1,0.1l1.2,0.1l0.4,0.1l0.5,0.1l0.5,0.1h0.1
136
+ l0.1-0.1l0.2-0.2h0.1l0.4-0.2h0.1l0.2-0.1l0.2-0.1l0.3-0.1l0.3-0.1h0.2h0.2h0.3h0.2h0.3h0.6h0.6l0.6,0.1l0.5,0.2l0.5,0.3l0.5,0.4
137
+ l0.4,0.4l0.2,0.5l0.2,0.6l0,0h0.2l0.6,0.2l0.6,0.1l1.2,0.1l1.8,0.1l3.6,0.2l1.8,0.1l1.7,0.1l1.8,0.1h0.9h0.8h0.1h0.1h0.1h0.1h0.3
138
+ h0.3l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.9-0.2l0.9-0.2l1-0.2l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1h0.3h0.2h0.3h0.3
139
+ h0.2h0.3h0.3l0.4,0.1l0.3,0.1l0.3,0.1l0.4,0.1l0.4,0.2l0.2,0.1l0.2,0.1l0.1,0.1l0.2,0.2l0.1,0.1l0.2,0.2l0.1,0.1l0.2,0.2l0.1,0.1
140
+ l0.2,0.3l0.1,0.1l0.1,0.3l0.1,0.1l0.1,0.2l0.1,0.1l0.1,0.3l0.1,0.3l0.1,0.4l0.1,0.4v0.3v0.3v0.1l-0.1,0.4v0.1l-0.1,0.4v0.1
141
+ l-0.1,0.1h0.2h0.9h0.8h0.9h0.9h0.9h0.5h0.6h0.6l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.4,0.1l0.3,0.1l0.4,0.1
142
+ l0.4,0.1l0.4,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.3,0.2l0.2,0.2l0.1,0.1l0.2,0.2l0,0l0.2,0.3h0.1l0.2,0.3l0.5-0.2l0.9-0.3l0.9-0.3
143
+ l0.9-0.3l1.6-0.5l2-0.6l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l0.9-0.3l0.9-0.2l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1h0.4h0.3h0.1h0.4h0.1
144
+ l0.3,0.1l0.3,0.1h0.1l0.4,0.2l0.4,0.2l0.3,0.3h0.1l0.4,0.4l0.2,0.5l0.2,0.5l0.1,0.5l0,0l-0.1,0.6l-0.1,0.5l-0.2,0.5h-0.1l-0.2,0.3
145
+ l-0.2,0.2h-0.1l-0.3,0.3l-0.1,0.1l-0.2,0.2l-0.4,0.2l-0.4,0.2l-0.6,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.2l-0.6,0.2l-0.5,0.2l-0.6,0.2
146
+ l-0.5,0.2l-0.6,0.2l-0.6,0.2l-0.5,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-1.2,0.4l-1.2,0.4l-1.2,0.4l-1.2,0.3l-1.2,0.3l0.8,0.1h0.4h7.9
147
+ h4h3.9h1.9h1.2h1.5h1.5h0.8h0.8h0.8h0.9l0.9,0.1l0.9,0.1l0.8,0.1l0.9,0.1l0.9,0.1l0.8,0.1l0.9,0.1l0.8,0.1l0.8,0.1l0.4,0.1
148
+ l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.4,0.1l0.4,0.1l0.3,0.2l0.4,0.2l0.3,0.2l0.4,0.2
149
+ l0.3,0.2l0.3,0.3l0.2,0.2l0.2,0.2l0.2,0.3l0.1,0.2l0.2,0.3v0.1l0.1,0.3l0.1,0.1l0.1,0.5v0.1v0.6v0.1v0.3l-0.1,0.3v0.1l-0.1,0.3
150
+ l-0.2,0.3l0,0l-0.2,0.3l-0.2,0.3l0,0l-0.4,0.3l0,0l-0.4,0.3h-0.1l-0.3,0.1H804l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.2h-0.3h-0.4h-0.4
151
+ h-0.4h-0.4h-0.4h-0.4H800l-0.8-0.1l-0.9-0.1l-1.7-0.3l-0.8-0.1h-0.4H795h-0.3h-0.3h-0.2H794h-2.6h-2.5h-1.2h-1.2h-1.2h-1.2h-1.2
152
+ l-1.2-0.1H781h-0.6h-0.7h-0.6l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1
153
+ l-1.4-0.2l-1.4-0.3l-1.5-0.3l-3.3-0.6h-0.2h-3h-4h-3.9h-4h-4h-2h-2h-0.8l-0.4,0.1l-0.7,0.2l-1.4,0.5l-1.4,0.5l-0.8,0.2l-0.7,0.3
154
+ l-0.8,0.2l-0.7,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.4,0.1l-0.4,0.1l-0.3,0.1l-0.3,0.1l-0.7,0.1l-0.7,0.1
155
+ l-0.7,0.1h-0.8H725h-0.4h-0.4h-0.4h-0.1l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.1l-0.7,0.1l-0.7,0.1
156
+ l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-1.3,0.2l-1.4,0.1l-1.4,0.1
157
+ l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1h-1.4h-1.4h-1.3h-1.4h-1.4h-1.4H691h-1.3h-1.4H687h-1.4h-1.3l-1.2-0.1l-1.1-0.1l-1.2-0.1
158
+ h-0.6l-0.5-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-1.4-0.2l-0.7-0.1
159
+ l-0.8-0.1l-0.8-0.2l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.2-0.2l-0.2-0.1
160
+ l-0.2-0.2l-0.2-0.1l-0.2-0.2l-0.1-0.1l-0.2-0.2l-0.1-0.1l-0.2-0.3l-0.1-0.1l-0.1-0.4l-0.1-0.1l-0.1-0.5v-0.1l-0.1-0.5v-0.1
161
+ l0.1-0.5v-0.1l0.1-0.5v-0.1l0.2-0.4l0.1-0.1l0.2-0.3l0.1-0.1l0.2-0.3l0.1-0.1l0.2-0.2l0.2-0.1l0.2-0.2l0.2-0.2l0.3-0.2l0.3-0.2
162
+ l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1l0.3-0.1l0.4-0.1l0.7-0.3l0.7-0.3l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2
163
+ l0.7-0.2l0.7-0.2l0.8-0.2l0.7-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1h0.1v-0.1v-0.1l0.1-0.4V266l0.1-0.3v-0.1
164
+ l0.2-0.3v-0.1l0.1-0.1l-0.5-0.1l-0.8-0.1l-0.9-0.1l-0.8-0.2l-0.9-0.2l-0.8-0.2l-0.8-0.2l-0.8-0.2l-0.8-0.2l-0.6-0.2h-0.2h-0.5
165
+ h-0.5h-0.5l-0.9-0.1l-0.9-0.1l-0.8-0.1L670,263h-0.7l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1h-0.1l-1.2,0.2
166
+ l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.3,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-0.6,0.1l-0.7,0.1l-0.6,0.1l-0.7,0.1l-0.6,0.1l-0.6,0.1h-0.7
167
+ H649h-0.6h-0.7h-0.6h-0.6h-0.6h-0.6h-0.6h-0.6h-0.6h-0.6h-0.6l-0.6-0.1l-0.5-0.1l-0.6-0.1l-0.6-0.1l-0.5-0.1l-0.6-0.1l-0.5-0.1
168
+ l-0.6-0.1l-0.5-0.1l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.6-0.2l-0.4-0.2l-3.7,0.5l-2.8,0.3l-2.7,0.3l-0.9,0.1l-0.9,0.1l-0.9,0.1
169
+ l-0.9,0.1l-0.8,0.1l-0.9,0.1l-0.9,0.1l-0.8,0.1h-0.8h-0.9h-0.8h-0.8l-1.6,0.1H612h-1.6h-1.6h-1.7h-1l-0.5,0.2l-0.7,0.3l-0.7,0.3
170
+ l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.8,0.2l-0.7,0.2l-0.7,0.2l-0.8,0.2l-0.7,0.2l-0.8,0.2l-0.7,0.2
171
+ l-0.8,0.2l-0.8,0.2l-0.7,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-1.5,0.3l-1.5,0.3l-1.5,0.3l-0.7,0.1l-1.1,0.4
172
+ l-1.3,0.5l-1.3,0.5l-1.3,0.5l-1.3,0.5l-1.3,0.5l-1.3,0.5l-1.4,0.5l-1.4,0.5l-1.3,0.5l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2
173
+ l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2L564,278l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.1l-0.4,0.1l-0.4,0.1l-0.9,0.2l-2.3,0.6
174
+ l-1.4,0.3l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1h-0.4h-0.4h-0.4
175
+ H545h-0.4h-0.4h-0.4h-0.4H543h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2
176
+ l-0.4-0.2l-0.4-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.1l-0.2-0.3l-0.1-0.1l-0.2-0.3l-0.1-0.1l-0.2-0.4v-0.1l-0.1-0.5
177
+ l-0.1-0.1V277v-0.1v-0.5l0.1-0.1l0.1-0.5v-0.1l0.2-0.4l0.1-0.1l0.2-0.3l0.1-0.1l0.2-0.2l0.1-0.1l0.2-0.2l0.1-0.1l0.2-0.2l0.2-0.2
178
+ l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.2l0.4-0.2l0.4-0.1l0.5-0.1l0.4-0.1l0.5-0.1l0.4-0.1l0.5-0.1l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2
179
+ l0.8-0.2l0.7-0.2l0.2-0.1l0.3-0.1l1.3-0.4l0.7-0.2l0.6-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.4-0.1l0.4-0.1l0.8-0.1l0.8-0.1
180
+ l0.7-0.1l1.4-0.2l0.7-0.1l0.7-0.1l0.8-0.1l0.9-0.2l1.1-0.2l1.2-0.2l1.3-0.2l1.3-0.2l1.4-0.2l1.4-0.2l1.4-0.2l1.4-0.2l2.9-0.4
181
+ l3-0.5l1.5-0.2l1.5-0.2l1.5-0.2h0.2l0.8-0.4l2.5-1.1l2.5-1.1l-0.1-0.1h-9.7h-0.2h-0.2h-0.4h-0.5h-0.6l-1.2,0.1l-0.7,0.1l-0.6,0.1
182
+ h-0.7h-0.5h-0.3h-0.3h-0.3h-0.3h-0.2l-0.5-0.1h-0.1l-0.3-0.1l-0.3-0.2l0,0l-0.3-0.2l-0.2-0.2h-0.1l-0.1-0.1l-0.5,0.1l-0.7,0.1
183
+ l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1h-0.7h-0.7h-0.7H561h-0.7h-0.7h-0.7h-0.7h-0.7h-0.7l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1
184
+ l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-1-0.2l-2.4,0.6l-1.7,0.4l-1.8,0.4
185
+ l-2,0.4l-2,0.4L534,264l-1.1,0.2l-1.1,0.2l-1.1,0.2l-1.1,0.2l-1.1,0.2l-1.1,0.2l-1.1,0.2l-1.1,0.2l-1.1,0.2L523,266l-1.1,0.2
186
+ l-1.1,0.2l-1.1,0.1l-1.1,0.1l-1.1,0.1l-1.1,0.1l-1.1,0.1l-1.1,0.1l-1.1,0.1H512h-1.1h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5
187
+ h-0.5h-0.5l-0.5-0.1l-0.5-0.1l-0.4-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.4-0.1l-0.5-0.1l-0.4-0.1l-0.4-0.1l-0.5-0.1
188
+ l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3
189
+ l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.2-0.4l-0.3-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.1-0.3l-0.1-0.3l-0.1-0.2v-0.3v-0.2
190
+ l-0.1-0.3l0.1-0.2v-0.3v-0.2l0.1-0.3v-0.2l0.1-0.3l0.1-0.1l0.1-0.3l0.1-0.1l0.2-0.3l0.1-0.1l0.2-0.2l0.2-0.2l0.3-0.3l0.3-0.3
191
+ l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.6-0.1
192
+ l0.6-0.1l0.7-0.1l0.6-0.1h0.6h0.6h0.5h0.3v-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.3l-0.1-0.3v-0.3v-0.3v-0.3l0.1-0.3l0.1-0.3l0.1-0.3
193
+ l0.1-0.3l0.1-0.2l0.2-0.2l0.1-0.2l0.2-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.4-0.3l0.4-0.3l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.1
194
+ l0.4-0.1l0.4-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.6-0.1l0.6-0.1l0.7-0.1l0.7-0.1l0.7-0.1h0.7h0.6h0.6h0.6h0.6
195
+ h0.6h0.6h1.1h2.2h1.1h1.1h8.9h0.3h0.2h0.2h0.2h0.2h0.2h0.3h0.3l0.5-0.1l0.6-0.1l0.7-0.1l0.6-0.1l0.7-0.1l0.7-0.2l1.4-0.3l0.7-0.2
196
+ l0.7-0.2l0.7-0.1l0.7-0.1l0.7-0.1l0.4-0.1h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1
197
+ l0.4,0.1l0.4,0.1l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.3,0.2l0.4,0.3l0.3,0.3l0.4,0.3l0.3,0.3l0.2,0.3l0.3,0.3l0.1,0.2l0.1,0.2
198
+ l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2l0.5,0.1l1.5,0.2l1.4,0.2l0.7,0.1l0.6,0.1l0.6,0.1l0.5,0.1
199
+ l1,0.1l0.9,0.1l1,0.1l1,0.1l0.9,0.1h0.5l0,0l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1l0.3-0.1l0.2-0.1l0.2-0.1l0.5-0.2l0.5-0.2l0.5-0.2
200
+ l0.5-0.2l0.6-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.5-0.1h0.5h0.5h0.5
201
+ h0.4h1.5L582.2,247.8z M689.3,272.3h-0.8h-0.8h-0.8h-0.8h-0.8l-0.8,0.1l-0.7,0.1l-0.8,0.1l-0.8,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1
202
+ l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.5,0.1l0.4,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1
203
+ l0.5,0.1h0.5l1.1,0.1l1.1,0.1l1.1,0.1h1.3h1.3h1.3h1.3h1.3h1.3h1.3h1.3h1.3h1.3h1.3h1.3l1.3-0.1l1.3-0.1l1.3-0.1l1.2-0.1l1.3-0.1
204
+ l1.3-0.1l1.3-0.1l0.6-0.1l0.7-0.1l0.7-0.1l0.6-0.1h0.2h-1.4h-1.5H706h-1.5H703h-1.5H700l-1.2-0.1l-1.2-0.1l-1.3-0.1h-0.7H695
205
+ l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.6-0.1l-0.5-0.1L689.3,272.3z M504.5,259h-0.4h-0.5h-0.5h-0.5
206
+ h-0.5h-0.5l-0.4,0.1l-0.5,0.1l-0.4,0.1h-0.2H500l0.2,0.1l0.1,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
207
+ l0.2,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1h0.4h0.4h0.4h0.4h0.4
208
+ h0.4h0.5h0.4h0.5h0.4h0.5h0.5h0.9h1l1-0.1l1-0.1l1-0.1l1.1-0.1l1.1-0.1l1.1-0.1l1.1-0.1l1.1-0.1l1-0.1l-1-0.1l-1.1-0.1l-1.1-0.1
209
+ l-2.1-0.2l-2.1-0.3l-2.1-0.2l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-0.9-0.1h-0.2h-0.5h-0.7h-0.8L504.5,259L504.5,259z M624.9,258.1
210
+ l-0.1,0.2l1.5-0.2h0.1l0,0H624.9L624.9,258.1L624.9,258.1z M707.9,257.6l0.5,0.1l0.5,0.1l0.6,0.1l0.7,0.1l1.2,0.2l1.4,0.2h0.2
211
+ l0.3-0.1l0,0l-0.4-0.2l-0.4-0.2l0,0l-0.9-0.1l-2.3-0.1l-2-0.1h-0.2H707.9z"
212
+ />
213
+ </g>
214
+ <g transform="matrix(0.998358,0.0572833,-0.0572833,0.998358,15.545,-79.3702)">
215
+ <g>
216
+ <g>
217
+ <g transform="matrix(1,0,0,1,398.965,43.2222)">
218
+ <path
219
+ fill="#0096FF"
220
+ d="M73.8,141.4c0.7,0.2-1.1-1-1.5-1.6c-0.9-1.5,2.2-4.9,2.2-4.9c3.4-5.2,7.1-9.9,11-14.8
221
+ c1.8-2.2,2.9-7.9,5.5-6.6c2.4,1.2-12.2,20.2-13.7,21.9c-1.4,1.6-4.4,6.5-4.4,4.4c0-8.8,14.7-31.8,23-34.6
222
+ c1.9-0.6-1.5,3.8-2.7,5.5c-0.4,0.5-9.3,12.1-11.5,9.9c-1.4-1.4,1.7-7,2.2-7.7c4.6-7.2,10.6-13.6,17-19.2
223
+ c2.6-2.3,5.1-4.9,7.7-7.1c1.3-1.1,3.8-5,3.8-3.3c0,5-10.9,14.5-14.3,18.1c-1.6,1.7-3.8,6-5.5,4.4c-2.2-2.2,3.5-5.2,5.5-7.7
224
+ c5.4-6.7,11-13,17.6-18.7c2-1.7,5.3-4.6,7.7-6c2-1.2,6.5-6.5,5.5-4.4c-4.5,9-22.9,15.6-11,5.5c17.2-14.6,33.4-19.6,53.8-26.3
225
+ c11.7-3.9,17.5-13.2,31.3-10.4c6.4,1.3,14.9,1.8,20.9,3.8c7.3,2.4,14.8,8.8,22.5,8.8c1.3,0-2.6,0.2-3.8,0
226
+ c-2.5-0.4-4.9-1.3-7.1-2.2c-8.1-3.2-16.5-5-24.7-7.7c-0.7-0.2-1.5-7.1-1.1-7.1c1.3,0,3.6,3.6,5.5,3.8
227
+ c12.3,1.8,20.7,8.4,32.4,13.7c22.6,10.3,41.6,23.5,58.7,40.6c13.3,13.3,10.8,40,15.9,55.4c2.8,8.5,3.1,19,5.5,28.5
228
+ c1.2,4.7,4.1,11.7,2.2,17.6c-0.7,2-0.2,4.6-1.6,6c-1,1-11-1.2-12.6-1.6c-12.4-3.1-27.3-1.1-40.1-1.1
229
+ c-13.3,0-31.3,5.8-42.8,11.5c-5.8,2.9-15.5,0.6-21.9,2.7c-6.1,2-17.2-0.7-23-2.2s-12.2-0.5-18.1-1.6c-9.3-1.9-18.1-5.5-28-7.1
230
+ c-17.9-3-41,1-58.2,4.4c-4.6,0.9-10.8,3.8-15.4,3.8c-5.9,0-11.9-0.5-17.6-0.5c-0.9,0-8.8,1.5-8.8,0.5c0-6.2,10.5-16.6,12.6-23
231
+ c6.8-20.3,4-39.2,24.7-51.6c5.3-3.2,16.3-10.1,23-7.1c10.2,4.5-3.5,26.8-5.5,30.7c-1.7,3.4-3.8,6.5-5.5,9.9
232
+ c-0.3,0.7-5.8,12.5-6.6,14.3c-0.7,1.6-2.4,6-1.1,4.9c24.9-21.4,45.1-47,72.4-65.8c7-4.9,19.9-13.4,28-18.1
233
+ c2.2-1.3,8.3-5,7.1-2.7c-2.1,4.3-14.3,15-15.4,15.9c-16.6,15-33.5,29.5-51,43.3c-2.1,1.7-10.6,10.4-14.3,8.8
234
+ c-2.9-1.3,1.7-6.1,3.3-8.8c4-6.8,4-6.4,7.7-13.2c8.7-16.1,18.3-32.5,30.7-46.1c5.2-5.8,9.5-10.4,15.4-15.4
235
+ c1.4-1.2,5.4-4.6,4.9-2.7c-1.1,4.3-7.7,8.4-11,11.5c-13.9,13.2-21.5,20.4-36.2,32.9c-3.8,3.2-7.6,6.3-11.5,9.3
236
+ c-0.2,0.2-5.1,4.2-5.1,2c0-2.4,15-17.5,17.4-20c19.7-20.9,43.7-41.6,70.3-53.3c3.7-1.6,36.7-14.9,30.5,1.6
237
+ c-0.9,2.5-2.2,4.8-3.6,7.1c-1.4,2.5-3,4.9-4.7,7.2c-4.6,6.6-11.3,15.3-16.5,21.4c-0.3,0.3-14.5,16.8-19.2,21.9
238
+ c-12.9,14.2-25.4,29.2-39,42.8c-2.3,2.3,4.9-4.3,7.1-6.6c4.2-4.4,8.3-8.9,12.6-13.2c17-16.7,34.9-32.5,53.2-47.7
239
+ c2.5-2.1,10.2-9.4,15.4-10.4c2.3-0.5-1.7,4.5-3.1,6.3c-1.5,2-3,3.9-4.5,5.7c-4.9,5.7-14,15.5-19.2,20.9
240
+ c-15,15.4-30,30.7-45,46.1c-6.9,7.1-6.8,6.8-13.2,14.3c-0.4,0.5-1.7,1.8-1.1,1.6c8.5-1.7,13-11.5,19.2-17.6
241
+ c20.5-20.2,41.2-40.1,63.6-58.2c4.9-3.9,14.5-11.4,21.2-15.7c1.4-0.9,14.5-8.4,9.5,0.8c-1.4,2.6-3.1,4.9-4.8,7.3
242
+ c-2,2.7-4.1,5.4-6.1,8c-5.8,7.5-11.3,14.2-17.6,21.4c-10.5,11.9-24.6,23.5-31.8,37.9c-1,2,3.9-2.3,5.5-3.8
243
+ c3.3-3.1,6.2-6.6,9.3-9.9c14-14.7,28.3-28.8,44.4-41.2c3.5-2.7,7.2-5.3,11-7.7c2.6-1.7,9.6-6.3,8.8-3.3
244
+ c-2.5,9.5-15.1,18.9-21.4,25.2c-21.4,21.7-43.1,45.9-67.5,64.2c-2.2,1.6,3.5-4.2,5.5-6c4-3.7,7.9-7.5,12.1-11
245
+ c16-13.6,32.5-27.1,49.9-39c4.5-3,10.5-7.2,16-9.6c2-0.9,6.8-3,6.5-0.8c-1.6,12-23.9,29.7-30.7,36.8c-5.2,5.4-15.4,9-15.4,16.5
246
+ c0,1.3,2.5-0.6,3.7-1.1c4.1-1.7,4.3-2,8.3-5.2c9.8-7.6,19-16.1,29.2-23.3c2.8-2,5.8-3.7,8.8-5.5c1-0.6,3-2.8,3.3-1.6
247
+ c1.5,5.8-14,19.7-16.5,22.5c-2.3,2.7-4.5,5.4-6.6,8.2c-0.8,1.1-2.8,4.6-1.6,3.8c5.1-3.1,8.5-6.5,13.2-10.4c2.4-2,4.7-4.1,7.1-6
248
+ c1.8-1.5,3.5-3.1,5.5-4.4c14.7-9.8-6,15.4-6,18.7c0,2.5,4.7-1.8,6.6-3.3c2.9-2.3,7.3-7.4,11.9-5.9c3.6,1.2-2.4,11.3-0.9,13.6
249
+ c2.1,3.1,8.1-3.9,9.3-2.7c0.6,0.6,0.8,5.3,0,6c-2.1,2.1-5.8-4.9-7.1-4.9"
250
+ />
251
+ <path
252
+ fill="#0096FF"
253
+ d="M210.4,9.7h1l1,0.1l1.2,0.2l1.2,0.2h0.1l1.3,0.3l1.3,0.4h0.1l1,0.4l1,0.4l0.9,0.4l1.5,0.8l1.2,0.8l1,0.7
254
+ l0.5,0.4l0.3,0.1l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.3l0.8,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3
255
+ l0.7,0.3l1.3,0.5l1.3,0.6l1.3,0.6l1.2,0.6l1.2,0.6L243,22l1.1,0.6l1.1,0.6l1,0.6l2,1.1l1.9,1l0.9,0.5l0.9,0.5l0.9,0.5l0.9,0.4
256
+ l0.7,0.3l1.3,0.5l1.4,0.7l1.4,0.7l0.1,0.1l0.9,0.4l1.2,0.5l1.2,0.5l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6
257
+ l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7
258
+ l1.1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8
259
+ l1,0.8l1,0.8l1,0.8l0.9,0.8L311,64l0.9,0.8l0.9,0.8l0.9,0.8l0.9,0.8l0.9,0.8l0.9,0.9l0.9,0.9l0.9,0.9l0.9,0.9l0.9,0.9l0.9,0.9
260
+ l0.9,0.9l0.9,0.9l0.5,0.6l0.6,0.6l0.6,0.6l0.5,0.6l0.5,0.6l0.5,0.6l0.5,0.6l0.5,0.6l0.5,0.7l0.5,0.6l0.5,0.6l0.4,0.7l0.4,0.7
261
+ l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.6l0.4,0.7l0.4,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.6l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.6
262
+ l0.3,0.7l0.3,0.6l0.2,0.6l0.3,0.7l0.4,1.2l0.4,1.3l0.4,1.3l0.4,1.3l0.4,1.2l0.3,1.2l0.3,1.2l0.3,1.2l0.3,1.2l0.3,1.2l0.2,1.2
263
+ l0.2,1.2l0.2,1.1l0.2,1.1l0.2,1.1l0.2,1.1l0.2,1.1l0.2,1.1l0.2,1.1l0.2,1.1l0.3,2.1l0.3,2l0.5,3.8l0.2,1.8l0.2,1.7l0.1,0.8
264
+ l0.1,0.8l0.1,0.8l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.4l0.1,0.4l0.1,0.3l0.2,0.5
265
+ l0.3,1l0.4,1.2l0.3,1.2l0.3,1.2l0.3,1.2l0.3,1.2l0.2,1.2l0.2,1.1l0.2,1.1l0.2,1.1l0.2,1.1l0.2,1l0.2,1l0.2,1l0.3,1.9l0.5,3.7
266
+ l0.3,1.7l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.6l0.1,0.6l0.1,0.6v0.1v0.2l0.2,0.7l0.6,2l0.4,1.2
267
+ l0.2,0.7l0.2,0.8l0.2,0.8l0.2,0.8l0.2,0.9l0.2,0.9l0.2,1l0.2,1l0.2,1.1l0.2,1.1l0.1,1.2l0.1,1.2l0.1,1.2v0.7v0.7v0.7v0.7v0.7
268
+ v0.7v0.7l-0.1,0.7l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.2,0.8l-0.2,0.8l-0.2,0.8l-0.1,0.6l0,0l-0.1,0.9l-0.1,1l-0.1,0.8
269
+ l-0.2,0.8l-0.2,0.8l-0.2,0.9l-0.3,1l-0.4,1.1l-0.4,1.1l-0.5,1.2l-0.6,1.3l-0.7,1.3l-0.8,1.3l-0.9,1.3l-1.1,1.3l-0.7,0.7l-1,1
270
+ l-1,0.9h-0.1l-0.9,0.7l-0.9,0.7l-1,0.6h-0.1l-1.3,0.7l-1.3,0.7l-1,0.5l-1.9,0.7l-1.6,0.4l-1.4,0.3l-1.2,0.2l-1.2,0.1l-1.5,0.1
271
+ H326h-1.2l-1-0.1l-0.9-0.1l-0.9-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-1.4-0.2l-1.4-0.2l-1.3-0.2l-1.2-0.2l-1.1-0.2l-1-0.2
272
+ l-0.9-0.2l-0.8-0.2l-0.5-0.1l-0.4-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.4-0.1l-0.4-0.1h-0.4h-0.4H305
273
+ h-0.4h-0.4h-0.4h-0.4H303h-0.4h-0.5h-0.4h-1h-1h-1h-1.1h-1.1h-1.1h-1.1h-1.2h-1.2h-1.2l-2.5,0.1l-2.5,0.1l-2.6,0.1h-1.3h-1.4
274
+ H279h-1.4h-1.4h-1.3h0.1h-0.3h-0.3H274h-0.4h-0.4h-0.4h-0.4H272h-0.4l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1
275
+ l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.2
276
+ l-0.6,0.2l-0.6,0.2l-0.5,0.2l-1.2,0.3l-1.2,0.4l-1.2,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1,0.4l-1,0.4
277
+ l-1,0.4l-0.9,0.4l-0.9,0.4l-0.8,0.4l-1,0.5l-0.7,0.3l-0.9,0.4l-0.9,0.4l-0.9,0.3l-0.8,0.3l-0.9,0.3l-0.8,0.2l-0.8,0.2l-0.8,0.2
278
+ l-0.8,0.2l-0.7,0.2l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-1.2,0.1l-1.2,0.1l-1.1,0.1l-1.1,0.1h-1h-1H223h-0.8h-1.5
279
+ h-1.3h-0.5h-0.5H218h-0.3h-0.3l0,0h-0.1l-0.9,0.3l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.8,0.2l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1
280
+ l-0.7,0.1l-0.7,0.1h-0.7h-0.7h-0.7h-0.7h-0.7h-0.7h-1.2l-1.3-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.1-0.1l-1.1-0.2l-1.1-0.2
281
+ l-1.1-0.2l-1-0.2l-1-0.2l-1-0.2l-1-0.2l-0.9-0.2l-0.9-0.2l-1.7-0.4l-1.6-0.4l-1.4-0.3l-1.1-0.3h-0.1l0,0h-0.1h-0.1h-0.1h-0.2
282
+ h-0.2H181h-0.3h-0.3h-0.3h-0.3h-0.9h-1h-1.2h-1.3l-1.4-0.1h-0.8h-0.8l-0.8-0.1l-0.9-0.1l-0.9-0.1l-1-0.1l-1-0.1l-1-0.1
283
+ l-1.1-0.2l-1-0.2l-1.2-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.3l-1.1-0.3l-1-0.3l-1-0.3l-1-0.3l-1.9-0.5l-1.9-0.5l-3.5-1l-1.6-0.5
284
+ l-1.6-0.5l-0.7-0.2l-0.8-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.1l-0.7-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1
285
+ l-0.5-0.1l-0.5-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1h-0.6h-0.7h-0.7h-0.7H130h-0.7h-0.7h-0.7h-0.7h-0.7h-0.8h-0.8
286
+ h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-1.7,0.2
287
+ l-1.7,0.2l-1.7,0.2l-1.7,0.2l-1.7,0.3l-1.7,0.3l-1.7,0.3l-1.7,0.3l-1.7,0.3l-1.7,0.3l-1.6,0.3l-1.6,0.3l-1.6,0.3l-1.6,0.3
288
+ l-1.5,0.3h-0.1l0,0h-0.1h-0.2l-0.2,0.1l-0.2,0.1l-0.7,0.2l-0.8,0.2l-0.9,0.3l-1,0.3l-1.2,0.4l-1.2,0.4l-0.7,0.2l-0.7,0.2
289
+ l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.9,0.2l-0.9,0.2l-1,0.2l-1,0.2l-1.1,0.2l-1.1,0.1l-1.2,0.1l-1.2,0.1H68h-1.5h-1.3h-1.3h-1.3
290
+ h-1.2l-1.2-0.1l-2.3-0.1l-2.2-0.1h-1h-1h-0.9h-0.9h-0.3l-1.3,0.2l-0.9,0.1l-1,0.1l-1.1,0.1l-1.2,0.1l-0.7,0.1h-0.7h-0.8H43
291
+ h-1.1l-1.3-0.1l-1.7-0.2l-2-0.4l-1.8-0.5l-0.8-0.3l-1-0.4l-1-0.4h-0.1l-1.3-0.6l-1.2-0.7h-0.1l-1.1-0.7l-1.1-0.8l-1-0.8l0,0
292
+ l-1.2-1.1l-1.1-1.2l-1-1.2l0,0l-0.9-1.2l-0.8-1.3l-0.7-1.3l-0.6-1.4l0,0l-0.6-1.5l-0.5-1.6l-0.4-1.6l-0.3-1.6l0,0l-0.1-1.2
293
+ l-0.1-1.2v-1.2l0-0.9l0.1-1.4l0.2-1.3l0.2-1.3l0.2-1.2l0.3-1.1l0.3-1.1l0.3-1l0.3-0.9l0.3-0.9l0.3-0.9l0.3-0.8l0.3-0.8l0.3-0.7
294
+ l0.4-0.7l0.3-0.7l0.3-0.7l0.3-0.6l0.3-0.6l0.4-0.6l0.7-1.1l0.7-1.1l0.7-1l0.7-1l0.6-0.9l0.6-0.9l1.1-1.6l1.1-1.5l0.5-0.7
295
+ l0.4-0.6l0.4-0.6l0.3-0.5l0.3-0.4l0.2-0.4l0,0l0.2-0.5l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.8l0.2-0.8l0.2-0.8
296
+ l0.2-0.8l0.2-0.8l0.4-1.7l0.4-1.7l0.8-3.6l0.4-1.9l0.2-1l0.2-1l0.2-1l0.2-1l0.3-1l0.3-1.1l0.3-1.1L38,152l0.3-1.1l0.3-1.1
297
+ l0.4-1.1l0.4-1.1l0.4-1.2l0.4-1.2l0.5-1.2l0.5-1.2l0.5-1.2l0.5-1.2l0.3-0.7l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6
298
+ l0.3-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.5-0.6l0.5-0.6l0.5-0.6l0.5-0.6
299
+ l0.5-0.6l0.5-0.6l0.5-0.6v-0.1v-0.1l0.4-1l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.5-0.9l0.5-0.9l0.5-0.9l0.5-0.9
300
+ l0.5-0.9l0.5-0.9l0.5-0.9l0,0l0.2-0.7l0.3-0.9l0.3-0.8l0.3-0.8l0.3-0.7l0.3-0.7l0.3-0.7l0.5-1.1l0.5-1l0.5-0.9l0.4-0.8l0.4-0.8
301
+ l0.4-0.8l0.5-0.8l0.7-1.1l0.6-0.9l0.6-0.9l0.6-0.9l0.6-0.9l0.6-0.9l0.6-0.8l0.6-0.8l0.6-0.8l0.6-0.8l0.7-0.8l0.7-0.8l0.7-0.8
302
+ l0.7-0.8l0.7-0.8l0.7-0.8l0.7-0.8l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7
303
+ l0.7-0.6l0.7-0.6l0.7-0.6l0.6-0.6l0.4-0.3l0.3-0.3l0.3-0.3l0.4-0.3l0.9-0.8l0.9-0.9l1-1l0.2-0.1l0.2-0.3l0.6-0.7l0.6-0.7
304
+ l0.7-0.7l0.7-0.7l0.1-0.1l0.3-0.6l0.5-1l0.6-1l0.8-1.3l0.9-1.3l0.8-1.1L97,62l0.8-0.9l0.8-0.8l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7
305
+ l0.8-0.7l1-0.8l1-0.8l1-0.8l1-0.8l1-0.8l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.6l1-0.6l1-0.6l1-0.6l1-0.6l1-0.6
306
+ l1-0.6l1-0.6l1-0.5l1-0.5l1-0.5l1-0.5l1-0.5l1-0.5l1-0.5l1-0.5l1-0.5l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4
307
+ l1-0.4l1.9-0.7l1.9-0.7l1.9-0.7l1.9-0.7l1.9-0.7l1.9-0.7l1.9-0.6l1.9-0.6l3.7-1.2l3.7-1.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1
308
+ l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.3-0.1l0.3-0.2l0.3-0.1l0.7-0.4l0.7-0.4l0.8-0.4l1.7-1l1-0.6
309
+ l1.1-0.6l1.1-0.6l0.7-0.4l0.6-0.3l0.7-0.3l0.7-0.3l0.7-0.4l0.7-0.3l0.8-0.4l0.8-0.3l0.8-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3
310
+ l0.9-0.3l1-0.3l1-0.3l1-0.2l1-0.2l1.1-0.2l1.1-0.2l1.1-0.2l1.1-0.1l1.1-0.1l1.2-0.1h0.6h0.1l1.4-0.8l1.4-0.7l1.5-0.6l1.5-0.5
311
+ l1.5-0.4l0,0l1.6-0.3l1.6-0.2l1.6-0.1L210.4,9.7z M55.5,120.7l-0.1,0.1L55.5,120.7L55.5,120.7z"
312
+ />
313
+ </g>
314
+ <g transform="matrix(1,0,0,1,400.214,44.558)">
315
+ <path
316
+ fill="#E2F0FD"
317
+ d="M184.1,73.1l1.4,0.1l1.3,0.2l1,0.2l0.9,0.2l0.9,0.3l0.9,0.3l0.9,0.4l1,0.5l1,0.5l1,0.6l1,0.7l0.9,0.8
318
+ l0.9,0.9l0.9,0.9l0.8,1l0.7,1.1l0.7,1.1l0.6,1.1l0.5,1.1l0.4,1l0.3,0.9l0.2,0.7l0.2,0.7l0.2,0.7l0.1,0.7l0.1,0.7l0.1,0.7
319
+ l0.1,0.7l0.1,0.7l0.1,0.7V94v0.7v0.7v0.7v0.7v0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.6l-0.1,0.6l-0.2,0.6
320
+ l-0.2,0.6L202,104l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.5l-0.2,0.6l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.3,0.6l-0.5,0.9
321
+ l-0.5,1l-0.5,0.9l-0.5,0.9l-0.6,0.9l-0.6,0.9l-0.6,0.8l-0.6,0.8l-0.6,0.8l-0.6,0.8l-0.6,0.7l-0.6,0.7l-0.6,0.7l-0.6,0.7
322
+ l-0.6,0.7l-0.6,0.7l-0.6,0.6l-0.6,0.6l-0.6,0.6l-0.6,0.6l-0.6,0.6l-0.6,0.6l-0.6,0.6l-0.6,0.6l-1.1,1l-1.1,1l-1.1,1l-1.9,1.7
323
+ l-1.7,1.5l-0.7,0.6l-0.6,0.6l-0.5,0.5l-0.2,0.2l-0.2,0.2l-0.4,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.3l-0.5,0.3
324
+ l-0.5,0.3l-0.5,0.3l-0.6,0.3l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1h-0.6
325
+ h-0.6l0,0l-0.5,0.3l-0.9,0.4l-0.8,0.4l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-1,0.2l-1,0.2l-1,0.2l-1,0.1l-1,0.1h-1h-1.1h-1.1
326
+ l-1.1-0.1l-1-0.1l-1-0.2l-1-0.2l-1-0.3l-1-0.3l-1-0.4l-0.9-0.4l-0.9-0.4l-0.9-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.7-0.5
327
+ l-0.7-0.6l-0.7-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.3-0.4l-1-0.2l-1.1-0.3l-1.1-0.4l-1.1-0.4l-1-0.5l-0.9-0.5l-0.9-0.5l-0.9-0.6
328
+ l-0.8-0.6l-0.7-0.6l-0.7-0.6l-0.6-0.6l-0.6-0.6l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.5-0.9
329
+ l-0.5-1l-0.4-1l-0.4-0.9l-0.3-0.9l-0.3-0.9l-0.3-0.9l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.1-0.8l-0.1-0.7l-0.1-0.7
330
+ l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7v-0.7v-0.7v-0.7l-0.1-1.2v-1.2l0-1.2V101v-1.1l0.1-1.1v-0.6l0.1-0.6
331
+ l0.1-0.6l0.1-0.6l0.1-0.7l0.1-0.8l0.2-1l0.4-1.4l0.3-0.8l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.3-0.5v-0.1l0.3-0.5l0.3-0.5
332
+ l0.3-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.4l0.4-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3
333
+ l0.5-0.3l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.1l0.6-0.1l0.6-0.1h0.4l0.3-0.2l0.5-0.4l0.5-0.4l0.5-0.3
334
+ l0.5-0.3l0.5-0.3l0,0l0.5-0.3l0.5-0.3l0.5-0.3l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1
335
+ l0.6-0.1h0.6h0.6h0.6h0.6h0.6l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.3,0.2
336
+ l0.3-0.3l0.5-0.5l0.5-0.5l0.6-0.5l0.6-0.5l0.7-0.5l0.7-0.5l0.8-0.6l0.9-0.6l1-0.6l1.1-0.6l1.2-0.6l1.3-0.5l1.2-0.4l1.1-0.3
337
+ l1.2-0.2l1.2-0.2l1.3-0.1h1.3h1.4l1.4,0.1l1.4,0.2l1.4,0.3l1.5,0.5l1.4,0.6l1.3,0.7l1.3,0.8l0.1,0.1l0.6-0.1l1-0.1l1.1-0.1h1.2
338
+ L184.1,73.1z"
339
+ />
340
+ </g>
341
+ <g transform="matrix(1,0,0,1,400.214,44.558)">
342
+ <path
343
+ fill="#E2F0FD"
344
+ d="M104.3,122.6h0.2h0.2h0.2h0.2h0.1h0.2h0.2h0.2h0.2h0.2h0.1h0.2h0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0,0
345
+ l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
346
+ l0.1,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0,0l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2
347
+ l0.1,0.2v0.2l0,0v0.2v0.2v0.2v0.2v0.2v0.2l0,0.3v0.5v0.4l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.2,0.6
348
+ l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.5l-0.3,0.5l-0.3,0.5
349
+ l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.4,0.5l-0.4,0.4l-0.2,0.3l-0.2,0.2l-0.3,0.3
350
+ l-0.3,0.3l-0.3,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.5,0.2l-0.5,0.2l-0.3,0.1l-0.2,0.1H100h-0.2h-0.1h-0.2h-0.2h-0.2H99h-0.2
351
+ h-0.1h-0.1h-0.2h-0.1h-0.2H98l-0.2,0.1l-0.4,0.2l-0.5,0.2l-0.5,0.2l-0.6,0.2l-0.6,0.2l-0.4,0.1h-0.2h-0.2h-0.2H94h-0.2h-0.2
352
+ h-0.2h-0.2H93h-0.2h-0.2h-0.2l-0.4-0.1l-0.5-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2
353
+ l-0.3-0.3l-0.5-0.4l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.3-0.5l-0.3-0.6l-0.3-0.6l-0.2-0.6l-0.2-0.6l-0.1-0.6l-0.1-0.6v-0.6v-0.6
354
+ v-0.6l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.2-0.5l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3
355
+ l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.8-0.6l0.6-0.5
356
+ l0.5-0.4l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.3-0.2l0.8-0.6l0.5-0.4l0.6-0.4l0.6-0.4l0.7-0.4l0.7-0.4l0.4-0.2
357
+ l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.5-0.2l0.6-0.2l0.4-0.1l0.4-0.1l0.5-0.1L104.3,122.6z"
358
+ />
359
+ </g>
360
+ <g transform="matrix(1,0,0,1,400.214,44.558)">
361
+ <path
362
+ fill="#E2F0FD"
363
+ d="M77.7,183.2h0.2h0.2h0.2h0.1h0.2h0.2H79l0.3,0.1l0.5,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.6,0.2l0.6,0.3l0.7,0.3
364
+ l0.7,0.3l0.7,0.4l0.7,0.4l0.8,0.4l0.8,0.4l0.8,0.4l0.8,0.4l0.8,0.5l1.7,0.9l1.6,0.9l1.6,0.9l1.4,0.9l1.3,0.8l1.1,0.7l0.5,0.3
365
+ l0.4,0.3l0.4,0.3l0.4,0.3l0.3,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0,0l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.2
366
+ l0.1,0.2l0.1,0.2l0.1,0.2l0,0l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3l-0.1,0.2l-0.1,0.3
367
+ l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.3l-0.2,0.3l-0.1,0.2l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
368
+ l0,0l-0.1,0.1l-0.1,0.1l-0.1,0.1H100l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.3,0.2l-0.5,0.3l-0.3,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1
369
+ l-0.3,0.1l-0.5,0.1l-0.5,0.1h-0.3h-0.2h-0.2h-0.2h-0.1h-0.2H95h-0.2h-0.4l-0.6-0.1l-0.5-0.1l-0.5-0.1l-0.4-0.1l-0.4-0.1
370
+ l-0.4-0.1l-0.6-0.2l-0.5-0.2l-0.4-0.2H90l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.9,0.1l-0.9,0.1h-0.9h-1h-1h-1h-1h-0.5h-0.5h-0.5h-0.5
371
+ h-0.5h-0.5l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1
372
+ l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.4
373
+ l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.4-0.4l-0.2-0.3l-0.2-0.2l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3
374
+ l-0.2-0.3l-0.2-0.4l-0.2-0.4l-0.1-0.5l-0.1-0.5l-0.1-0.5v-0.5v-0.5v-0.5l0.1-0.5l0.1-0.5l0.2-0.5l0.1-0.3l0.1-0.2l0.1-0.2
375
+ l0.1-0.2l0.1-0.1l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.3-0.3l0.5-0.4
376
+ l0.4-0.3l0.4-0.3l0.4-0.2l0.4-0.2l0.4-0.2L66,185l0.4-0.1l0.4-0.1l0.4-0.1l0.3-0.1l0.4-0.1l0.7-0.2l0.7-0.1l0.7-0.1l0.7-0.1
377
+ l0.7-0.1l0.7-0.1l0.6-0.1h0.6h0.6h0.6h0.4l0.1-0.1l0.2-0.1l0.2-0.1l0.2-0.1h0.1l0.2-0.1l0.2-0.1l0.2-0.1h0.1l0.2-0.1h0.2H77
378
+ l0.3-0.1l0.6-0.1L77.7,183.2z M82.6,187.1L82.6,187.1h-0.1H82.6z M72.7,185.7L72.7,185.7L72.7,185.7L72.7,185.7z"
379
+ />
380
+ </g>
381
+ <g transform="matrix(1,0,0,1,400.214,44.558)">
382
+ <path
383
+ fill="#0065FF"
384
+ d="M154.3,188.6l1.6-0.1l1.5-0.1l1.5-0.1h0.7h0.7h0.6l0.6-0.1h0.6l0.6-0.1l0.5-0.1l0.6-0.1l3.9-0.6l2-0.3
385
+ l2-0.3l2.1-0.3l2.1-0.3l2.1-0.3l2.1-0.3l2.1-0.4l2.1-0.4l2.1-0.4l2.1-0.4l2.1-0.4l1-0.2l1.1-0.2l1.1-0.2l1-0.2l1-0.2l1-0.2
386
+ l1-0.2l1-0.2l1-0.2l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3
387
+ l0.9-0.3l0.9-0.3l0.8-0.3l0.8-0.3l0.8-0.3l0.8-0.3l0.8-0.3l0.8-0.3l0.7-0.3l0.7-0.3l0.7-0.4l0.7-0.3l0.7-0.4l0.7-0.4l0.8-0.5
388
+ l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.7l0.8-0.7
389
+ l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.8l0.8-0.8l0.8-0.8l0.8-0.8l0.8-0.8l0.8-0.8l0.8-0.8l0.8-0.8
390
+ l0.8-0.8l0.8-0.8l0.8-0.8l1.7-1.7l1.6-1.7l1.6-1.7l1.6-1.7l1.6-1.8l3.3-3.5l3.3-3.5l1.7-1.8l1.7-1.8l1.7-1.8l1.7-1.8l1.7-1.7
391
+ l0.9-0.9l0,0v-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.7l0.1-0.8l0.1-0.8l0.1-0.9l0.1-0.9
392
+ l0.3-1.9l0.3-2l0.1-1.1l0.2-1.1l0.2-1.1l0.2-1.2l0.2-1.2l0.1-0.7l0.1-0.6l0.1-0.6l0.1-0.7l0.2-0.6l0.2-0.7l0.2-0.7l0.2-0.7
393
+ l0.2-0.7l0.2-0.7l0.2-0.6l0.2-0.6l0.2-0.6l0.2-0.6l0.2-0.5l0.2-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5
394
+ l0.3-0.5l0.3-0.5l0.4-0.5l0.4-0.5l0.4-0.4l0.4-0.5l0.4-0.4l0.4-0.4l0.5-0.5l0.8-0.7l0.9-0.8l0.9-0.7l0.9-0.7l0.9-0.6l0.9-0.6
395
+ l0.9-0.5l0.9-0.5l0.9-0.5l0.9-0.4l0.9-0.4l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.1l0.8-0.1l0.8-0.1
396
+ l0.8-0.1l0.8-0.1l0.8-0.1h0.8h0.8h0.8h0.7h0.8h0.7h0.7l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.6,0.1
397
+ l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.4L328,85l0.8,0.3l0.7,0.3l0.7,0.3l0.7,0.4
398
+ l0.6,0.4l0.6,0.4l0.6,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.8,0.7l0.8,0.8l0.8,0.8l0.7,0.8l0.6,0.8l0.6,0.8l0.6,0.8l0.5,0.7
399
+ l0.5,0.7l0.5,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7
400
+ l0.3,0.7l0.5,1.3l0.5,1.3l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.3,1.1l0.6,2l0.6,1.8l0.2,0.8l0.2,0.7l0.2,0.6l0.2,0.5l0.1,0.3
401
+ l0.1,0.2l0.4,1.1l0.5,1.2l0.5,1.2l0.5,1.2l0.5,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2
402
+ l0.4,1.2l0.4,1.3l0.4,1.2l0.4,1.3l0.4,1.2l0.3,1.3l0.3,1.3l0.3,1.3l0.3,1.3l0.3,1.3l0.3,1.3l0.3,1.3l0.3,1.3l0.3,1.3l0.3,1.3
403
+ l0.3,1.3l0.3,1.3l0.2,1.1l0.1,0.2l0.1,0.3l0.1,0.5l0.2,0.7l0.2,0.8l0.2,0.9l0.2,1l0.2,1.1l0.1,0.6l0.1,0.6l0.1,0.7l0.1,0.7
404
+ l0.1,0.7l0.1,0.8l0.1,0.8l0.1,0.8v0.9v0.9v1l-0.1,1.1l-0.1,1.1l-0.1,0.8l-0.1,0.7l-0.1,0.7l-0.2,0.7l-0.2,0.8l-0.2,0.5
405
+ l-0.1,0.3v0.1v0.1v0.1l-0.1,0.5l-0.1,0.6l-0.2,0.7l-0.2,0.8l-0.2,0.9l-0.2,1l-0.3,1.1l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.7
406
+ l-0.2,0.7L361,192l-0.3,0.7l-0.3,0.7l-0.3,0.8l-0.3,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.7l-0.5,0.7
407
+ l-0.4,0.6l-0.4,0.6l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.7,0.8l-0.7,0.8l-0.6,0.7l-0.5,0.6l-0.4,0.5l-0.2,0.2l-0.1,0.1l-0.2,0.4
408
+ l-0.3,0.6l-0.3,0.5l-0.3,0.6l-0.5,0.9l-0.5,0.9l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.6,0.8l-0.6,0.7l-0.6,0.7l-0.6,0.7l-0.6,0.7
409
+ l-0.6,0.7l-0.6,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.8,0.7l-0.8,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.6l-0.5,0.4
410
+ l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.7,0.3l-0.7,0.3l-0.8,0.3l-0.8,0.3l-0.8,0.2
411
+ l-1.1,0.3l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1
412
+ h-0.9H310h-0.9h-0.9h-0.9h-0.9h-1.7H303h-1.7h-1.7H298h-3.2h-1.5h-1.5h-1.5h-1.4h-1.4h-0.7h-0.7h-0.7h-0.7h-0.6h-0.6h-0.6h-0.6
413
+ l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.5,0.1l-0.5,0.1l-0.6,0.1L273,233l-3.6,0.7l-3.6,0.7
414
+ l-3.6,0.7l-7.2,1.5l-7.2,1.5l-7.3,1.5l-7.3,1.5l-3.7,0.8l-3.7,0.8l-3.7,0.8l-3.8,0.8l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1
415
+ l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8h-0.7l-0.7-0.1l-0.7-0.1l-0.7-0.1
416
+ l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-1.4-0.2l-1.4-0.2l-1.4-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.3l-1.3-0.3l-1.3-0.3l-1.2-0.3
417
+ l-1.2-0.3l-1.2-0.3l-1.2-0.3l-1.1-0.3l-2.2-0.5l-2-0.5l-2.1-0.5l-0.7-0.2l-0.8-0.2l-0.8-0.3l-0.7-0.3l-0.7-0.3l-0.7-0.3
418
+ l-0.6-0.3l-0.6-0.3l-0.5-0.3l-0.6-0.3l-0.9-0.5h-0.1h-0.3h-0.6l-0.6-0.1l-0.6-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.2
419
+ l-0.7-0.2l-0.7-0.2l-0.8-0.3l-0.7-0.3l-0.3,0.3l-0.9,0.8l-1,0.7l-1,0.6l-1.1,0.6l-1.1,0.5l-1.1,0.4l-1.2,0.3l-1.2,0.2l-0.6,0.1
420
+ l-0.8,0.1l-0.9,0.1l-0.9,0.1l-1,0.1h-1.1h-1.1l-1.2-0.1l-1.2-0.2l-1.3-0.2l-1.2-0.3l-0.8-0.2l-0.7-0.2l-0.7-0.3l-0.7-0.3
421
+ l-0.7-0.3l-0.7-0.3l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.5-0.5l-0.6-0.5l-0.5-0.6l-0.5-0.5l-0.5-0.6
422
+ l-0.4-0.6l-0.4-0.6l-0.5-0.7l-0.6-1l-0.6-1.1l-0.5-1.1l-0.4-1l-0.4-1l-0.3-0.9l-0.3-0.9l-0.2-0.9l-0.2-0.9l-0.2-0.8l-0.2-0.6
423
+ l-0.2-0.7l-0.2-0.8l-0.2-0.9l-0.2-0.9l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.7l-0.1-0.8l-0.1-0.8l-0.1-1v-1.1V208
424
+ l0.1-1.4l0.2-1.2l0.3-1.2l0.4-1.3l0.3-0.7l0.3-0.8l0.4-0.8v-0.1l0.4-0.8l0.4-0.7v-0.1l0.7-1l0.7-0.9l0,0l0.5-0.6l0.6-0.6
425
+ l0.6-0.6l0,0l0.7-0.6l0.8-0.6l0.8-0.5h0.1l0.9-0.5l0.9-0.5l0.9-0.4l0.8-0.3l1.2-0.4l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2
426
+ l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l1.1-0.2l1.1-0.2l1.1-0.2l1.1-0.1l1-0.1l1-0.1l1-0.1l1-0.1l1-0.1l0.9-0.1h0.9L154.3,188.6z
427
+ M353.1,204.9L353.1,204.9L353.1,204.9L353.1,204.9z"
428
+ />
429
+ </g>
430
+ <g transform="matrix(1,0,0,1,381.866,45.2348)">
431
+ <path
432
+ fill="#0096FF"
433
+ d="M100,290.7h0.6h0.6h0.6h0.6h0.6h0.5h0.5h0.5h0.5l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l1,0.2
434
+ l1,0.2l1,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.8,0.2l1.6,0.4l1.5,0.4l0.7,0.2l0.7,0.2l0.7,0.2l0.7,0.2l0.6,0.1
435
+ l0.6,0.1h0.1h0.1h0.3h0.3h0.3h0.4h0.4h0.4h0.4h0.5h0.5h0.5h0.5h1.1l1.2-0.1l1.2-0.1h0.7h0.7h0.7h0.7h0.7h0.7h0.8l0.8,0.1
436
+ l0.8,0.1l0.8,0.1l0.8,0.1l0.5,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0,0l20.9,0h0.2h0.4h0.4l0.4,0.1l0,0
437
+ l0.5,0.1l0.5,0.1l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.3l0.5,0.3l0.4,0.3l0.4,0.3l0.4,0.4l0.4,0.4l0.4,0.4l0.3,0.4l0.3,0.4l0.3,0.5
438
+ l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.1,0.5l0.1,0.5l0.1,0.5v0.5v0.5l0,0v0.6l-0.1,0.6l-0.1,0.5l-0.1,0.5l-0.2,0.5l-0.2,0.5
439
+ l-0.2,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.2l0,0l-0.5,0.2
440
+ l-0.5,0.2l-0.5,0.1l-0.4,0.1l-0.7,0.1l-0.5,0.1l-0.5,0.1l-0.4,0.1h-0.2l-0.4,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.5,0.1h-0.5
441
+ h-0.5h-0.5h-0.9h-0.9h-0.8h-0.7h-2h-1h-1h-1h-1.1h-1.1l-1.1-0.1h-0.6h-0.6l-0.6,0l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1
442
+ l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.4-0.1H101h-0.6h-0.6l-0.5-0.1l-0.5-0.1l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.3l-0.5-0.3l-0.5-0.3
443
+ l-0.4-0.3l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.2-0.2l-0.1,0.1l-0.6,0.3l-1.3,0.6l-1.3,0.7l-1.4,0.7l-0.7,0.4l-0.8,0.4l-0.8,0.3
444
+ l-0.8,0.3l-0.8,0.3l-0.8,0.3l-0.8,0.3l-0.5,0.2l-0.4,0.1l-0.4,0.1L82,315l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1
445
+ l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1L77,316h-0.5H76h-0.5h-0.6h-0.6h-0.4l-0.5-0.1l-0.5-0.1l-0.5-0.1l0,0l-0.5-0.2l-0.5-0.2
446
+ l-0.5-0.2l-0.5-0.2l-0.4-0.3l-0.4-0.3l0,0l-0.4-0.3l-0.4-0.3l-0.4-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.2-0.5
447
+ l-0.2-0.5l0,0l-0.2-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5v-0.5v-0.5v-0.5l0.1-0.6l0,0l0.1-0.5l0.1-0.5l0.1-0.5l0.2-0.5l0.2-0.5
448
+ l0.2-0.4l0.2-0.4l0.3-0.4l0,0l0.3-0.4l0.3-0.4l0.3-0.4l0.4-0.4l0.4-0.3l0,0l0.4-0.3L70,300h0.1l0.4-0.2l0.4-0.2l0.4-0.2
449
+ l0.2-0.1l0.1-0.4l0.2-0.4L72,298l0.3-0.5l0.4-0.6l0.5-0.7l0.3-0.4l0.3-0.3l0.3-0.3l0.4-0.4l0.6-0.5l0.5-0.4l0.5-0.4l0.6-0.3
450
+ l0.7-0.3l0.7-0.3l0.7-0.2l0.7-0.2l0.8-0.1h0.8h0.8l0.7,0.1l0.6,0.1l0.4,0.1l0.5,0.1l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.3l0.5,0.3
451
+ l0.2,0.2l0.5-0.2l0.7-0.3l0.8-0.3l0.8-0.3l0.8-0.3l0.8-0.3l0.8-0.3l0.5-0.2l0.4-0.1l0.4-0.1l0.5-0.1l0.6-0.2l0.6-0.1l0.6-0.1
452
+ l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1h0.6L100,290.7z M79.4,310.3h0.2l-0.4-0.1L79.4,310.3z"
453
+ />
454
+ </g>
455
+ <g transform="matrix(1,0,0,1,396.607,49.2944)">
456
+ <path
457
+ d="M110.6,285.7h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.4,0.1l0.7,0.2
458
+ l0.7,0.2l0.7,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l1.1,0.5l1.1,0.5l1.1,0.4l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2
459
+ l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1h0.2h0.2h0.2h0.3h0.3h0.3h0.3h0.3h0.3h0.6h0.6h0.6h0.6l0.6,0h0.6h0.7l1.3-0.1l1.4-0.1
460
+ l1.4-0.1h0.7h0.7h0.7h0.7h0.7h0.7h0.7h0.7h0.4h0.4h0.4h0.4h0.4l0.4,0.1l0.4,0.1l0.3,0.1h0.2h0.2h0.2h0.3h0.3h0.3h0.3h0.3h0.7
461
+ h0.8h0.8h0.4h0.4h0.4h0.4h0.4h0.4h0.4l0.5,0.1l0.5,0.1l0.5,0.1l0.4,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
462
+ l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.3,0.3l0.3,0.3l0.2,0.3l0.2,0.4l0.2,0.4l0.1,0.4l0.1,0.4
463
+ l0.1,0.4l0.1,0.4v0.4v0.4v0.3v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3
464
+ l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.3,0.5l-0.3,0.6l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.4,0.5l-0.4,0.5l-0.4,0.4
465
+ l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.3,0.4l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.6,0.3l-0.6,0.3
466
+ l-0.6,0.3l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1
467
+ l-0.6,0.1l-0.6,0.1l-0.6,0.1H142h-0.6h-0.6h-0.6h-0.6H139h-0.6h-0.6h-0.6h-0.6l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1
468
+ l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-1.1-0.2l-1.1-0.2l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-2.1-0.6
469
+ l-2.1-0.6l-1-0.3l-1-0.3h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.4h-0.4h-0.4H113h-0.5l-0.5,0.1l-0.5,0.1
470
+ l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1L108,309l-0.5,0.1l-0.5,0.1l-0.5,0.1l-1,0.3l-1,0.3l-1,0.3l-1.8,0.6
471
+ l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4h-0.9
472
+ h-0.9h-0.9h-0.9h-0.9h-0.9l-0.9-0.1l-0.9-0.1l-1.8-0.1l-1.8-0.1l-0.9-0.1h-0.9h-0.8h-0.8h-0.8h-0.8h-0.8h-0.4h-0.4h-0.4h-0.4
473
+ h-0.3h-0.3h-0.3h-0.3h-0.3l-0.3,0.1l-0.4,0.1l-0.5,0.1l-0.6,0.1l-0.7,0.1l-0.7,0.1l-0.8,0.1l-0.8,0.1l-0.9,0.1l-0.9,0.1h-0.9
474
+ h-1h-1h-1h-1h-1h-1h-1h-1h-1h-1l-1-0.1l-0.9-0.1h-0.5h-0.5l-0.5-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1
475
+ l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2
476
+ l-0.2-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.3v-0.2v-0.2v-0.3v-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.3
477
+ l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.3-0.5l0.3-0.5l0.3-0.5l0.4-0.8l0.1-0.3l0.1-0.2l0.2-0.4l0.2-0.4
478
+ l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3
479
+ l0.3-0.3L55,293l0.3-0.2l0.4-0.2l0.4-0.2l0.3-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.7-0.4l0.7-0.3l0.7-0.3l0.7-0.3l0.7-0.3l1.3-0.6
480
+ l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.3-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1
481
+ l0.2-0.2l0.2-0.1l0.2-0.2l0.2-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1l0.3-0.1h0.4h0.4H71l0.3,0.1l0.3,0.1l0.2,0.1h0.1l0.4-0.1
482
+ l0.4-0.1l0.4-0.1l0.4-0.2l0.9-0.3l0.9-0.4l0.9-0.3l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1h0.3h0.3
483
+ h0.3h0.3h0.3H82h0.3h0.3h0.3h0.3l0.3,0.1l0.3,0.1l0.5,0.1l0.5,0.1l0.9,0.3l0.9,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.7,0.3l0.7,0.3
484
+ l1.2,0.5l1.1,0.4l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.1l0.5,0.1l0.2,0.1l0.2,0.1l0.2,0.1H96h0.2h0.2h0.2h0.2H97h0.3h0.3h0.3h0.3h0.3
485
+ h0.3h0.3h0.3h0.3h0.3h0.3h0.4l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.4-0.1l0.4-0.1
486
+ l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1h0.4h0.4h0.4h0.4L110.6,285.7z M115.3,302.4h0.6h0.3h0.3h0.3h0.3h0.3h0.3l0.3,0.1
487
+ l0.3,0.1l0.3,0.1l0.3,0.1l1.1,0.3l1.1,0.3l2.1,0.6l2.1,0.6l1.1,0.3l1,0.3l1,0.3l1,0.3l1,0.2l1,0.2l1,0.2l0.5,0.1l0.5,0.1
488
+ l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5l0.5-0.1l0.5-0.1
489
+ l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.4-0.2
490
+ l0,0l0.1-0.1l0.2-0.1l0.2-0.2l0.2-0.2l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.2-0.4
491
+ l0.2-0.4l0.2-0.4l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2v-0.1V298v-0.1v-0.1v-0.1v-0.1v-0.1
492
+ l0,0H156h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l-0.2-0.1H155h-0.2h-0.3h-0.3h-0.3h-0.3h-0.3H153h-0.4h-0.4h-0.8h-0.8h-0.8h-0.4H149
493
+ h-0.4h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.3-0.1h-0.2h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3h-0.6h-0.6h-0.6h-0.6h-0.6h-0.6H140h-0.7
494
+ l-1.4,0.1l-1.4,0.1l-1.4,0.1h-0.7h-0.7H133l-0.7,0h-0.7h-0.7h-0.7h-0.4h-0.4H129h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1
495
+ l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-1.1-0.5l-1.1-0.5l-1.1-0.4l-0.5-0.2
496
+ l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.1l-0.5-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1h-0.3h-0.3h-0.3h-0.3
497
+ H112h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3H109h-0.3h-0.3h-0.3h-0.3l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.5,0.1
498
+ l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.4,0.1h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4H99h-0.4
499
+ h-0.4h-0.4h-0.4H97h-0.4h-0.4l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2
500
+ l-0.6-0.2l-1.2-0.5l-1.2-0.5l-0.6-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.8-0.2l-0.8-0.2l-0.4-0.1l-0.4-0.1h-0.1l0,0l0,0
501
+ H83h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.2
502
+ l-0.9,0.3l-0.9,0.3l-0.9,0.4l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1h-0.3h-0.3
503
+ h-0.1l-0.2,0.1l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3
504
+ l-1.3,0.6l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2
505
+ l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2
506
+ l-0.2,0.2l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.4,0.8l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.1,0.2
507
+ l-0.1,0.2l-0.1,0.2l0,0l0,0l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1h0.3H56h0.4h0.4h0.4l0.9,0.1l0.9,0.1h0.9h0.9h1h1h1h1h1h1
508
+ h0.9h0.9h0.9h0.9l0.8-0.1l0.8-0.1l0.7-0.1l0.7-0.1l0.6-0.1l0.5-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1h0.4h0.4h0.4h0.4
509
+ h0.4h0.4h0.4h0.9h0.9H82h0.9h0.9h0.9l0.9,0.1l1.8,0.1l1.8,0.1l0.9,0.1l0.9,0.1h0.9h0.8h0.8h0.8h0.8h0.8h0.4h0.4h0.4h0.4h0.3
510
+ h0.3h0.3h0.3H99l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l1.8-0.6l1-0.3l1-0.3l1.1-0.3l0.6-0.2l0.6-0.2
511
+ l0.6-0.2l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1h0.6h0.6L115.3,302.4z"
512
+ />
513
+ </g>
514
+ <g transform="matrix(1,0,0,1,381.866,45.2348)">
515
+ <path
516
+ fill="#0096FF"
517
+ d="M258.4,272.4h0.5h0.5h0.6h0.4h0.3h0.3h0.2h0.2h0.2l0,0l0.2,0.1l0.2,0.1l0.2,0.1l0,0l0.2,0.1l0.2,0.1
518
+ l0.2,0.1l0.2,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0,0l0.1,0.2l0.1,0.2v0.2v0.2v0.2v0.2v0.2l0,0v0.2v0.2
519
+ l-0.1,0.2l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l0,0l-0.1,0.2l-0.1,0.1l0,0l-0.1,0.1l-0.1,0.1h-0.1
520
+ l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.8,0.3l-0.9,0.2
521
+ l-0.8,0.2v0.1l0.1,0.2v0.2v0.2v0.2v0.2v0.2l0,0v0.2v0.2v0.2v0.2l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2
522
+ l0,0l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.3,0.1l-0.2,0.1l-0.3,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
523
+ l-0.5,0.1l-0.5,0.1l-0.6,0.1l-0.6,0.1l-0.7,0.1l-0.7,0.1l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.1
524
+ L249,286l-0.2,0.2l-0.2,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1H248l-0.1,0.1l-0.2,0.1h-0.1h-0.1h-0.1h-0.1h-0.2
525
+ h-0.2h-0.1h-0.1h-0.2h-0.1h-0.1h-0.1h-0.1H246h-0.1h-0.1h-0.1h-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.2-0.2
526
+ l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2h-0.1l-0.8,0.1l-0.8,0.1h-0.8H240h-0.7h-0.7H238h-0.6h-0.5h-0.5h-0.3h-0.3l-0.3-0.1
527
+ l-0.2-0.1h-0.2l-0.2-0.1h-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.2-0.1l0,0l-0.8,0.3l-0.9,0.3l-0.9,0.2l-0.5,0.1l-0.4,0.1
528
+ l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1h-0.4H227h-0.4h-0.4h-0.4h-0.4H225h-0.4h-0.4l-0.4-0.1
529
+ l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.3-0.1l-0.2-0.1l-0.2-0.1l0,0l-0.2-0.1l-0.2-0.1l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.2
530
+ l-0.1-0.2l0,0l-0.1-0.1l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2l-0.1-0.2v-0.2v-0.1v-0.2v-0.2v-0.1v-0.2v-0.2v-0.2v-0.3v-0.3l0.1-0.3
531
+ l0.1-0.4l0.1-0.4l0.2-0.4l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.5
532
+ l0.4-0.5l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.1-0.1l0.1-0.1h0.1l0.1-0.1l0.1-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.3-0.1
533
+ l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.4-0.1l0.1-0.1l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.2
534
+ l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1
535
+ l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.3h0.6h0.6h0.6h0.6h0.6h0.5l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1
536
+ l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l4.8,1.4l0.9-0.1l1.1-0.1h1L258.4,272.4z"
537
+ />
538
+ </g>
539
+ <g transform="matrix(1,0,0,1,381.866,45.2348)">
540
+ <path
541
+ d="M240.3,267.1h0.9h0.9h0.9h0.9h0.9h0.9h0.9h0.9h0.9h0.9h0.9h0.9l0.9,0h0.8l0.8,0.1l0.8,0.1l0.8,0.1l0.8,0.1
542
+ l0.8,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.5,0.2l0.5,0.2l0.3,0.1l0.3,0.1l0.3,0.1
543
+ l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.2
544
+ l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2v0.3v0.2v0.3v0.3v0.1v0.1v0.3l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.2,0.3l-0.2,0.3l-0.2,0.3
545
+ l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.2l-0.3,0.3
546
+ l-0.6,0.5l-0.6,0.5l-0.6,0.5l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3
547
+ l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.3,0.1l-0.2,0.1l-1.2,0.2l-1.1,0.2l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.3l-2.2,0.6
548
+ l-2.2,0.6l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.2l-1.1,0.2l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1L234,291l-0.6,0.1
549
+ l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1h-0.6h-0.6h-0.6h-0.6H228h-0.6h-0.6h-0.6h-0.6H225l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1
550
+ L222,291l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.6-0.2h-0.1l0,0h-0.1h-0.1H216h-0.2h-0.2h-0.2
551
+ h-0.2h-0.3h-0.3H214h-0.6h-0.7h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1
552
+ l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.3
553
+ l-0.2-0.3l-0.2-0.3l-0.1-0.2v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1V285v-0.1v-0.1v-0.1v-0.1v-0.2l0.1-0.3l0.1-0.3
554
+ l0.1-0.3l0.1-0.3l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.2-0.2l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2
555
+ l0.3-0.2l0.3-0.2l0.3-0.1l0.3-0.1l0.5-0.2l0.4-0.2l0.4-0.1l0.3-0.1l0.2-0.1l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.8-0.2l0.8-0.2
556
+ l1.5-0.4l1.4-0.4l1.3-0.3l0.4-0.1l-0.2-0.1l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2V275v-0.3v-0.3v-0.3v-0.3
557
+ l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1
558
+ l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.6-0.2l0.6-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.8-0.1
559
+ l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1L240.3,267.1z M238.9,273.1
560
+ l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.6,0.1
561
+ l-0.6,0.1l-0.6,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.1,0.1l-0.1,0.1
562
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1h-0.1l0,0l-0.1,0.1l-0.2,0.1l0.1,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0.1,0.2
563
+ l0.1,0.2l0.1,0.2l0.1,0.3v0.3v0.3v0.3v0.3v0.3l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2
564
+ l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.4,0.1l-0.5,0.1l-0.5,0.1l-0.6,0.2l-1.3,0.3l-1.4,0.4l-1.5,0.4l-0.7,0.2l-0.7,0.2
565
+ l-0.3,0.1h0.1h0.4h0.4h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.2,0.1l0.2,0.1l0.6,0.2l0.5,0.2l0.5,0.2l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1
566
+ l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1
567
+ l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l1.1-0.2l1.1-0.2l1.1-0.2l1.1-0.3l1.1-0.3l2.2-0.6l2.2-0.6l1.1-0.3l1.1-0.3
568
+ l1.1-0.3l1.1-0.3l1.2-0.3l1-0.2l0,0l0.2-0.1l0.3-0.1l0.3-0.2l0.4-0.2l0.4-0.2l0.4-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.4
569
+ l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.1-0.2v-0.1l-0.4-0.1
570
+ l-0.4-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1L253,273l-0.8-0.1h-0.8
571
+ l-0.8,0h-0.8H249h-0.8h-0.8h-0.8h-0.9h-0.9h-0.9H243h-0.9h-0.9h-0.9h-0.9h-0.9L238.9,273.1z"
572
+ />
573
+ </g>
574
+ <path
575
+ d="M708.1,249.1h0.2h0.1h0.1h0.1h0.2h0.1h0.1h0.1l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
576
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1v0.1l0.1,0.1
577
+ v0.1v0.1v0.1v0.1v0.1v0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
578
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
579
+ l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
580
+ l-0.4,0.1h-0.4h-0.4H701h-0.4h-0.4h-0.4H699h-0.8h-0.9h-1h-0.2h-0.3h-0.2h-0.2l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.7-0.2
581
+ l-0.2-0.1l-0.2-0.1h-0.1h-0.1h-0.1h-0.1h-0.2H692h-0.1h-0.2h-0.1h-0.1h-0.2h-0.1h-0.1H691l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
582
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
583
+ l-0.1-0.1v-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1v-0.1v-0.1v-0.1v-0.1V253v-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
584
+ l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1
585
+ l0.1-0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.2h0.1h0.1h0.1h0.1h0.2h0.4h0.2h0.3h0.2h0.2l0.4,0.1l0.4,0.1l0.4,0.1l0.7,0.2l0.3,0.1
586
+ l0.3,0.1l0.2,0.1h0.2h0.7h0.9h0.7h0.8h0.3h0.3h0.4h0.3h0.3h0.2h0.3h0.3h0.2l0.2-0.1l0.3-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.2-0.1
587
+ l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.4-0.1l0.3-0.1l0.4-0.2l0.4-0.2l0.4-0.2l0.1-0.1l0.1-0.1h0.1h0.1h0.2h0.1h0.1h0.2h0.1h-0.1
588
+ V249.1z M693.9,255.9L693.9,255.9L693.9,255.9L693.9,255.9L693.9,255.9L693.9,255.9z"
589
+ />
590
+ <path
591
+ d="M698.7,232.2L698.7,232.2h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.1,0.1
592
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1
593
+ l0.1,0.1l0.1,0.1v0.1l0.1,0.1l0.1,0.1v0.1v0.1l0.1,0.1v0.1v0.1l0.1,0.1v0.1v0.1v0.1v0.1v0.1v0.1l-0.1,0.1v0.1v0.1l-0.1,0.1v0.1
594
+ l-0.1,0.1v0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
595
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1h-0.1h-0.1H700h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l-0.1,0.1
596
+ l-0.2,0.1l-0.2,0.1l-0.3,0.2l-0.5,0.4l-0.7,0.4l-0.7,0.5l-0.8,0.5l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
597
+ l-0.5,0.2l-0.4,0.2l-0.2,0.1l-0.2,0.1l-0.3,0.1h-0.2h-0.3H691h-0.3h-0.2h-0.1h-0.1h-0.1h-0.1H690h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1
598
+ h-0.1h-0.1h-0.1H689h-0.1h-0.1l-0.1-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
599
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1V241l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1l-0.1-0.1
600
+ l-0.1-0.1v-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1v-0.1l-0.1-0.1v-0.1v-0.1v-0.1v-0.1V239v-0.1v-0.1l0.1-0.1v-0.1v-0.1v-0.1l0.1-0.1
601
+ v-0.1l0.1-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
602
+ l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1
603
+ h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.2-0.1l0.3-0.1l0.2-0.2l0.3-0.2l0.4-0.2l0.7-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.3-0.2
604
+ l0.4-0.2l0.3-0.2l0.3-0.2l0.4-0.2l0.4-0.2l0.3-0.1l0.3-0.1h0.2h0.1h0.1h0.1h0.1L698.7,232.2L698.7,232.2z M699.1,238.1
605
+ L699.1,238.1L699.1,238.1L699.1,238.1L699.1,238.1z M692.9,237.4L692.9,237.4L692.9,237.4L692.9,237.4L692.9,237.4z"
606
+ />
607
+ <path
608
+ d="M688.9,250.5h0.5h0.5h0.5h0.2h0.2h0.2h0.1l0.2,0.1l0.1,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1
609
+ l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2v0.2l0.1,0.2l-0.1,0.2v0.2v0.2
610
+ l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1
611
+ l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.2h-0.2h-0.2h-0.2h-0.5h-0.4H689h-0.4h-0.4h-0.5h-0.4h-0.4l-0.4,0.1l-0.5,0.1
612
+ l-0.4,0.1l-0.4,0.1l-0.5,0.1l-0.4,0.1l-0.4,0.1l-0.5,0.1l-0.9,0.2l-0.8,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.3l-0.9,0.3
613
+ l-0.9,0.3l-0.9,0.3l-0.9,0.3l-1.8,0.6l-1.8,0.6l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-1,0.2
614
+ l-0.9,0.2l-0.9,0.2h-0.2h-0.2h-0.2H661h-0.2h-0.2h-0.2h-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1
615
+ l-0.1-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2v-0.2l-0.1-0.2v-0.2v-0.2l0.1-0.2
616
+ v-0.2l0.1-0.2v-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.2-0.1l0.2-0.1
617
+ l0.2-0.1l0.2-0.1l0.2-0.1h0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l1.9-0.6
618
+ l1.8-0.6l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.2l1-0.2l0.9-0.2l0.9-0.2l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1
619
+ l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1h0.5h0.5h0.5L688.9,250.5z"
620
+ />
621
+ <path
622
+ fill="#25B3FF"
623
+ d="M616.5,62.9h0.5h0.5h0.5h0.5L619,63l0.5,0.1l0.5,0.1l0.5,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0.2,0.1
624
+ l0.2,0.1l0.4,0.2l0.4,0.2l0.2,0.2l0.2,0.2l0.2,0.1l0.2,0.2l0.1,0.1h0.1h0.2h0.5h0.5h0.5h0.4h0.5l0.5,0.1l0.5,0.1l0.4,0.1
625
+ l0.5,0.1l0.4,0.1l0.4,0.1l0.5,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.1,0.1l0.3,0.2h0.1l0.1,0.1l0.1,0.1h0.1l0.2,0.2l0.2,0.2l0,0
626
+ l0.2,0.2l0.1,0.3l0,0l0.1,0.3l0.1,0.3l0,0v0.4v0.4l0,0l-0.1,0.3l-0.1,0.3l0,0l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.2l-0.1,0.2h-0.1
627
+ l-0.2,0.3h-0.1l-0.2,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.2l-0.2,0.1l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1
628
+ l-0.6,0.2l-0.7,0.2l-0.6,0.2l-0.6,0.1l-1.1,0.2l-0.9,0.2l-0.5,0.1l-0.4,0.1l-0.5,0.1l-0.5,0.1l-1,0.1h-0.1l-0.4,0.3l-0.5,0.4
629
+ l-0.5,0.4l-0.2,0.1l0.3-0.1h0.2l0.3-0.1h0.3h0.3l0,0h0.4l0.4,0.1l0.3,0.1l0.4,0.2l0.3,0.2l0.3,0.2l0.2,0.3l0.2,0.3l0.2,0.3
630
+ l0.1,0.3l0.1,0.1h0.4l1.1-0.1l2.3-0.3l1.1-0.1l1.2-0.1l1.2-0.1l1.2-0.1l0.5-0.1h0.6h0.6h0.6h0.6h0.6h0.6h0.6h0.1h0.4h0.1
631
+ l0.3,0.1l0.3,0.1h0.1l0.3,0.1l0.2,0.2l0.3,0.2l0,0l0.2,0.2l0.2,0.3l0.2,0.3l0.1,0.3l0.1,0.3l0,0l0.1,0.3v0.3v0.4l-0.1,0.4l0,0
632
+ l-0.1,0.3l-0.1,0.3l-0.1,0.3h-0.1l-0.1,0.2l-0.2,0.2l0,0l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.2l-0.1,0.1l-0.2,0.1l-0.2,0.1
633
+ l-0.3,0.2l-0.4,0.2l-0.3,0.1l-0.2,0.1l-1.3,0.6l-0.9,0.5l-0.8,0.4l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.5,0.2l-0.5,0.2
634
+ l-0.5,0.2l-0.6,0.2l-1.4,0.4l-0.4,0.1l-0.4,0.1l-0.9,0.2l-0.9,0.2l-1.1,0.2l-1.1,0.3l-1.1,0.3L622,87l0.1,0.1h0.1l0.1,0.3
635
+ l0.1,0.1l0.1,0.3v0.1l0.1,0.2l0.1,0.3l0.1,0.3l0,0V89l-0.1,0.3l-0.1,0.3l-0.1,0.3h-0.1l-0.1,0.3l-0.1,0.3l-0.2,0.2l-0.2,0.2
636
+ l-0.2,0.2l0,0l-0.2,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l0,0h-0.1l0,0l-0.3,0.4l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.9,1.2
637
+ l-0.9,1.3l-0.9,1.3l-0.5,0.7l-0.5,0.6l-0.5,0.6l-0.5,0.6l-0.5,0.6l-0.5,0.6l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2
638
+ l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.2,0.2l-0.3,0.2l-0.3,0.2l-0.4,0.2l-0.2,0.1l-0.3,0.1h-0.1l-0.2,0.1H609h-0.3h-0.2h-0.2H608h-0.1
639
+ h-0.3h-0.2l-0.3-0.1H607l-0.4-0.1h-0.1l-0.4-0.1l-0.1-0.1l-0.3-0.2l-0.1-0.1l-0.2-0.2l-0.1-0.1l-0.2-0.2l-0.1-0.1l-0.2-0.2
640
+ l-0.2-0.2l-0.2-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.2l-0.7,0.8l-0.7,0.8
641
+ l-0.4,0.4l-0.3,0.3l-0.3,0.3l-0.4,0.3l-0.3,0.3l-0.3,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.1l-0.3,0.2H599l-0.2,0.1l-0.2,0.1h-0.1h-0.2
642
+ h-0.2H598h-0.2h-0.2h0.4h-0.3h-0.2h-0.1l-0.3-0.1l-0.3-0.1h-0.1l-0.3-0.1l-0.2-0.2h-0.1l-0.2-0.2l-0.2-0.2l-0.1-0.1l-0.2-0.2
643
+ l-0.1-0.2l-0.1-0.1l-0.1-0.2l-0.1-0.2v-0.1l-0.1-0.3l-0.1-0.1l-0.1-0.3v-0.2l-0.1-0.3v-0.3V100v-0.1l-0.4,0.4l-0.6,0.9l-0.3,0.4
644
+ L593,102l-0.3,0.4l-0.3,0.4l-0.4,0.4l-0.3,0.4l-0.4,0.4l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.1
645
+ l-0.3,0.2h-0.1l-0.2,0.1l-0.3,0.1h-0.1l-0.4,0.1h-0.4H588h-0.3h-0.4l0,0l-0.3-0.1l-0.3-0.1l-0.3-0.1l0,0l-0.2-0.2l-0.2-0.2
646
+ l-0.2-0.2l0,0l-0.2-0.2l-0.2-0.2l-0.1-0.2l0,0l-0.2-0.3l-0.1-0.3l0,0l-0.1-0.3l-0.1-0.3V103v-0.2l-0.1,0.2l-0.2,0.4l-0.3,0.4
647
+ l-0.2,0.4l-0.2,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.4,0.2l-0.2,0.1l-0.2,0.1
648
+ l-0.1,0.1l-0.3,0.1h-0.1l-0.3,0.1h-0.2h-0.3h-0.3h-0.3h-0.2h-0.2h-0.2l-0.3-0.1h-0.1l-0.3-0.1h-0.1l-0.2-0.1l-0.2-0.1l0,0
649
+ l-0.2-0.1l-0.2-0.2h-0.1l-0.2-0.2l-0.1-0.2h-0.1l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.3h-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.1l-0.1-0.2V104
650
+ l-0.1-0.1v-0.3v-0.3V103v-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.6l0.1-0.6l0.2-0.7l0.2-0.7l0.4-1.4l0.5-1.5l0.2-0.7
651
+ l0.2-0.6l-0.6,0.3l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.2,0.1l-0.6,0.7l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.5,0.5l-0.4,0.5
652
+ l-0.5,0.5l-0.5,0.5l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2
653
+ l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1H564h-0.2h-0.3h-0.2H563h-0.2l-0.3-0.1h-0.2l-0.3-0.1h-0.1
654
+ l-0.2-0.1l-0.2-0.1l-0.1-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1l-0.2-0.2l-0.2-0.2l-0.1-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.1l-0.1-0.2
655
+ l-0.1-0.2l-0.1-0.1l-0.1-0.2l-0.1-0.2v-0.1l-0.1-0.3l-0.1-0.1V101v-0.2v-0.3l0,0h-0.2h-0.4l-0.4-0.1l-0.5-0.1l-0.2-0.1l-0.2-0.1
656
+ l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.1,0.1l-0.4,0.1l-0.3,0.1l-0.4,0.1H555h-0.3h-0.2h-0.2h-0.2H554h-0.3h-0.1
657
+ l-0.3-0.1l0,0l-0.4-0.1l0,0l-0.2-0.1l-0.2-0.1h-0.1l-0.2-0.1l-0.2-0.1h-0.1l-0.2-0.2l-0.2-0.2l0,0l-0.2-0.2l-0.2-0.2l0,0
658
+ l-0.2-0.3l-0.1-0.3l0,0l-0.1-0.2l-0.1-0.1l-0.3,0.2l-0.4,0.2l-0.5,0.2l-0.4,0.2l-0.3,0.1l-0.2,0.1l-0.2,0.1l-0.3,0.1l-0.3,0.1
659
+ l-0.3,0.1H547h-0.4h-0.4h-0.3h-0.2h-0.2l-0.3-0.1h-0.1l-0.4-0.1h-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2
660
+ l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.3h-0.1l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2V96l0,0v-0.2l0,0l-0.4,0.3
661
+ l-0.8,0.6l-0.8,0.6l-1.7,1.2l-1.7,1.2l-0.8,0.6l-0.9,0.6l-0.8,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.4,0.3l-0.5,0.3
662
+ l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.4,0.3l-0.5,0.3l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2
663
+ l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.2,0.1h-0.2h-0.2H521h-0.1h-0.3h-0.4l0,0H520l-0.2-0.1l-0.2-0.1h-0.1l-0.3-0.1l-0.2-0.2l-0.3-0.2
664
+ l-0.2-0.2l0,0l-0.2-0.2l-0.2-0.3l-0.1-0.2l-0.3-0.2l-0.2-0.3l0,0l-0.2-0.3l-0.1-0.3l-0.1-0.1l-0.1-0.3l-0.1-0.3l-0.1-0.1v-0.2
665
+ l-0.1-0.2v-0.2v-0.4l0.1-0.3v-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.2-0.2l0.1-0.2
666
+ l0.2-0.2l0.2-0.2l0.1-0.2l0.2-0.2l0.4-0.3l0.3-0.3l0.4-0.3l0.4-0.2l0.4-0.2l0.4-0.2l0.3-0.2l0.4-0.2l0.4-0.2l0.7-0.3l1.2-0.6
667
+ l0.6-0.3l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l1.1-0.6l1.1-0.6
668
+ l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l2.2-1.1l2.2-1.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1h0.1l0.9-0.5
669
+ l0.9-0.5l0.9-0.5l0.9-0.5l0.9-0.5l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l0.2-0.1l0.2-0.1l0.2-0.1l0,0
670
+ l0.4-0.1h0.4h0.4l0.4,0.1l0.4,0.1l0.3,0.2l0.4,0.2l0.2,0.2l0.2,0.3l0.1,0.1l2.1-0.4l4.8-1l2.3-0.5l2.3-0.5l0.4-0.2l0.4-0.2
671
+ l0.4-0.2l0.4-0.2l0.4-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.1h0.2h0.4h0.1h0.3h0.2h0.1h0.2l0.3,0.1l0,0l0.2,0.1l0.1-0.1
672
+ l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.2l0.2-0.2l0.3-0.2
673
+ l0.2-0.2l0.5-0.3l0.6-0.3l0.4-0.2l0.1-0.3l0.1-0.3l0,0l0.2-0.2l0.1-0.2l0.2-0.2l0,0l0.2-0.2l0.2-0.2l0,0l0.3-0.2l0.1-0.1
674
+ l0.2-0.1l0.4-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.2-0.1l0.5-0.1l0.5-0.1l0.4-0.1l0.6-0.1l0.7-0.1l1.2-0.2l1.2-0.2l0.5-0.1l0.6-0.1
675
+ l0.5-0.1l0.2-0.2l0.6-0.4l0.6-0.4l0.5-0.4l0.6-0.3l0.5-0.3l0.9-0.6l0.8-0.5l0.3-0.2l0.3-0.2l0.3-0.2l0.4-0.3l0.5-0.3l0.5-0.4
676
+ l0.5-0.4l0.5-0.4l0.6-0.4l0.5-0.4l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.4-0.1l0.4-0.1l0.3-0.1l0.2-0.1h0.2h0.4h0.2h0.4
677
+ h0.1h0.2h0.2h0.1l0.2,0.1l0.2,0.1h0.1l0.2,0.1l0.2,0.1l0,0l0.2,0.2l0.2,0.2h0.1l0.2,0.2l0.2,0.2l0,0l0.1,0.2l0.1,0.2l0,0
678
+ l0.1,0.2l0.4-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.5-0.1l0.5-0.1h0.6h0.5h0.5
679
+ L616.5,62.9z M609.5,90.5L609.5,90.5l0.1,0.4l0.1,0.2l0.1,0.3v0.2l0.1,0.2v0.4l0,0.4V93v0.4l-0.1,0.4l-0.1,0.8l-0.1,0.9
680
+ l-0.1,0.9l-0.1,0.1l0.3-0.4l0.5-0.6l0.4-0.6l0.5-0.6L612,93l0.9-1.3l0.4-0.6l0,0l-0.3,0.1l-0.2,0.1l-0.3,0.1h-0.2H612h-0.1h-0.2
681
+ h-0.2h-0.1l-0.3-0.1l-0.3-0.1h-0.1l-0.3-0.1l-0.3-0.1l0,0l-0.2-0.2l-0.2-0.2L609.5,90.5L609.5,90.5z M586.1,91.5L586.1,91.5
682
+ l-0.5,0.3l0,0l-0.1,0.4v0.2l0.2-0.3L586.1,91.5l0.1-0.1L586.1,91.5z M599.9,89l-0.8,0.1l-0.1,0.1l-0.5,0.3l-0.4,0.3l-0.5,0.3
683
+ l-0.3,0.2h0.3h0.2h0.4h0.1h0.2h0.2h0.1l0.2,0.1l0.2,0.1h0.1l0.2,0.1l0.2,0.1v-0.2l0.1-0.3l0.2-0.3l0.1-0.3l0,0l0.2-0.2l0.1-0.2
684
+ l0,0L599.9,89z"
685
+ />
686
+ <path
687
+ fill="#25B3FF"
688
+ d="M474.6,336.5h0.3h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.2l0.5,0.3
689
+ l0.5,0.3l0.4,0.3l0.4,0.3l0.4,0.2l0.3,0.2l0.1,0.1l0.1,0.1l0.3,0.1l0.2,0.1l0.2,0.1h0.1l0.4,0.1l0.5,0.1l0.5,0.1l0.5,0.1
690
+ l0.5,0.1l0.9,0.2l0.9,0.2l0.9,0.2l1.8,0.4l0.8,0.2l0.8,0.2l0,0l0.2-0.1l0.2-0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.3h0.2l0.5,0.1
691
+ l0.5,0.1l0.5,0.1l0.4,0.1l0.4,0.1l0.4,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0.2,0.1l0,0l0.2,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.2
692
+ l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0,0l0.1,0.2v0.2l0.1,0.2v0.2v0.2v0.2v0.2v0.2l0,0l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2
693
+ l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2h-0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.1h-0.1l-0.1,0.1l-0.2,0.1
694
+ l-0.2,0.1h-0.1h-0.2h-0.2h-0.2h-0.3h-0.2h-0.3h-0.2H493l-0.5-0.1l-0.5-0.1v0.1l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2
695
+ l-0.1,0.2l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.1l-0.2,0.1l-0.2,0.1h-0.2h-0.2l0,0h-0.2h-0.1h-0.2h-0.6
696
+ h-0.6h-0.5h-0.6l-1.2,0.1h-1.2h-0.6h-0.7h-0.6h-0.7h-0.7h-0.7l-0.7-0.1h-0.1H479h-0.8h-0.8h-0.8h-0.8h-1.5h-1.5h-1.5h0.7
697
+ l-0.9,0.4l-1.1,0.5l-0.7,0.3l-0.2,0.2l-0.3,0.3l-0.4,0.3l-0.5,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1
698
+ l-0.2,0.1l-0.3,0.1l-0.2,0.1h-0.1h-0.2h-0.1h-0.1h-0.2h-0.1h-0.1h-0.2h-0.2h-0.1h-0.1h-0.2h-0.2l-0.2-0.1l-0.2-0.1h-0.1
699
+ l-0.4,0.1l-0.6,0.2l-0.6,0.1l-0.4,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.4H460h-0.3h-0.3H459h-0.3h-0.4h-0.2h-0.2h-0.2h-0.1h-0.1h-0.2
700
+ l-0.2-0.1l-0.1-0.1l-0.2-0.1l0,0l-0.2-0.1l-0.2-0.1l-0.1-0.1l-0.2-0.1l0,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2
701
+ l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2l-0.1-0.2l-0.1-0.2v-0.2L455,351v-0.2v-0.2l0,0v-0.2l0.1-0.2l0.1-0.2v-0.2l0.1-0.2l0.1-0.2l0,0
702
+ l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0,0l0.1-0.2l0.2-0.1l0.1-0.1h0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.2
703
+ l0.4-0.2l0.5-0.2l0.8-0.3l0,0l0.1-0.2l0,0l0.1-0.1l0.1-0.1l0.1-0.1l0,0l0.1-0.1l0.1-0.1l0,0l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1
704
+ l0.1-0.1l0.2-0.2l0.3-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.3-0.1l0.5-0.3l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.8-0.4l0.7-0.3l0.2-0.1
705
+ l0,0l1.2-0.6l0.8-0.4l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.1l0.2-0.1h0.1l0,0v-0.1v-0.1v-0.2v-0.1l0.1-0.2v-0.2v-0.1l0.1-0.1
706
+ v-0.1l0.1-0.2l0.1-0.3l0.1-0.3l0.2-0.3l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.1l0.3-0.1l0.3-0.1
707
+ l0.3-0.1h0.2h0.3L474.6,336.5z"
708
+ />
709
+ <path
710
+ fill="#25B3FF"
711
+ d="M632.9,316.7h0.5h0.5h0.4h0.2h0.2l0.2,0h0.2h0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0.2,0.1l0.1,0.1l0.2,0.1
712
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2l0.1,0.2v0.2v0.2l-0.1,0.2v0.2
713
+ l-0.1,0.2l-0.1,0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1
714
+ l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1h-0.2h-0.2h-0.2h-0.2h-0.2l-0.4,0h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4l-0.4,0.1
715
+ l-0.4,0.1l-0.4,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.3,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
716
+ l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.5,0.2l-0.7,0.2l-0.8,0.2l-0.8,0.2l-0.4,0.1l-0.5,0.1
717
+ l-0.4,0.1l-0.5,0.1l-0.4,0.1l-0.4,0.1l-7,0.8h-0.5h-0.6h-0.5h-0.6h-0.8h-0.2h-0.2h-0.2h-0.2h-0.2l-0.1-0.1l-0.2-0.1l-0.2-0.1
718
+ l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2
719
+ l-0.1-0.2l-0.1-0.2v-0.2l-0.1-0.2v-0.2v-0.2l0.1-0.2v-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1
720
+ l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.2-0.1l0.2-0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.4h0.4h0.4h0.4
721
+ l0,0l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.2-0.1l0.3-0.1l0.2-0.1l0.2-0.1l0.5-0.1
722
+ l0.5-0.1l0.5-0.1l0.5-0.1l0.6-0.1h0.6h0.6h0.6h0.6l1.2-0.1h1.1h0.4l1.3-0.3l1.7-0.4l0.9-0.2l0.8-0.2l0.9-0.2l0.9-0.2l0.9-0.2
723
+ l0.9-0.2l0.9-0.2l0.9-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.4-0.1l0.5-0.1h0.5h0.5h0.5L632.9,316.7z"
724
+ />
725
+ <g transform="matrix(1,0,0,1,400.214,44.558)">
726
+ <path
727
+ d="M208.6,8l0.8,0h0.8l0.8,0h0.8l0.8,0h0.8l0.8,0.1l0.8,0.1l0.8,0.1l0.8,0.1l0.8,0.1l0.8,0.1l0.8,0.1l0.8,0.1
728
+ l0.8,0.1l0.8,0.1l0.8,0.1l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2
729
+ l0.8,0.2l0.8,0.2l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3L239,14l0.8,0.3l1.5,0.6l1.5,0.6l1.5,0.6l1.4,0.6l1.4,0.6
730
+ l1.4,0.6l1.3,0.6l1.3,0.6l1.3,0.6l1.2,0.6l1.2,0.6l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.9,0.4
731
+ l0.9,0.3l0.9,0.3l0.9,0.3l1,0.3l1,0.3l1,0.3l1,0.3l2,0.6l2.1,0.6l2.1,0.6l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.4l1.1,0.4l1.1,0.4
732
+ l1.1,0.4l1.1,0.4l0.6,0.2l0.6,0.2l0.5,0.2l0.6,0.2l0.6,0.2L284,31l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.5,0.3l0.5,0.3l0.9,0.5
733
+ l0.9,0.5l0.9,0.5l0.9,0.5l0.9,0.5l0.9,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.6
734
+ l0.8,0.6l0.8,0.6l0.8,0.6l0.8,0.6l0.8,0.6l0.8,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6
735
+ l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.6,0.6l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7
736
+ l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.5,0.7l0.5,0.7l0.5,0.7l0.5,0.7l0.5,0.7
737
+ l0.5,0.7l0.5,0.7l0.5,0.7l0.5,0.7l0.5,0.7l0.5,0.7l0.5,0.7l0.5,0.8l0.5,0.8l0.5,0.8l0.5,0.8l0.5,0.8l0.5,0.8l0.5,0.8l0.5,0.8
738
+ l0.5,0.8l0.5,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8
739
+ l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.9l0.4,0.9l0.7,1.7l0.7,1.7l0.7,1.7l0.7,1.8
740
+ l0.6,1.8l0.6,1.8l0.6,1.8l0.6,1.8l0.6,1.8l0.6,1.8l0.6,1.8l0.5,1.9l0.5,1.8l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4
741
+ l0.1,0.4l0.1,0.4l0.1,0.4l0.2,0.4l0.3,0.8l0.3,0.7l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.8,1.6l0.4,0.8l0.4,0.8l0.4,0.9
742
+ l0.4,0.9l0.4,0.9l0.4,0.9l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.1,0.5l0.1,0.5
743
+ l0.1,0.5l0.1,0.5l0.1,0.6l0.1,0.5l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6v0.6v0.6v0.6v0.5l-0.1,0.9l-0.2,0.9l-0.3,0.8l-0.4,0.8
744
+ l-0.5,0.7l-0.6,0.6l-0.7,0.5l-0.8,0.4l-0.8,0.3l-0.9,0.1H360l-0.9-0.1l-0.9-0.3l-0.8-0.4l-0.7-0.5l-0.7-0.6l-0.6-0.7l-0.4-0.8
745
+ l-0.3-0.8l-0.2-0.9l-0.1-0.9v-0.4v-0.3v-0.3v-0.3V153v-0.3v-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3
746
+ l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.3-0.7l-0.3-0.7
747
+ l-0.4-0.7l-0.4-0.7l-0.4-0.8l-0.4-0.8l-0.8-1.6l-0.4-0.8l-0.4-0.8l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.2-0.5
748
+ l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.1-0.5l-0.5-1.8l-0.5-1.8l-0.5-1.8l-0.5-1.7
749
+ l-0.6-1.7l-0.6-1.7l-0.6-1.7l-0.6-1.7l-0.6-1.7l-0.6-1.7l-0.6-1.6l-0.6-1.6l-0.7-1.6l-0.3-0.8l-0.3-0.8l-0.3-0.8l-0.3-0.8
750
+ l-0.3-0.8l-0.3-0.8l-0.3-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.7l-0.4-0.7
751
+ L331,94l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7L327,87l-0.4-0.7l-0.4-0.7l-0.4-0.7
752
+ l-0.4-0.7l-0.4-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7
753
+ l-0.5-0.6l-0.5-0.6L318,74l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.6-0.6
754
+ l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6
755
+ l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5
756
+ l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5
757
+ l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2
758
+ l-0.4-0.2l-0.4-0.2l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.9-0.4l-0.9-0.4l-0.9-0.3l-1-0.3l-1-0.3l-1-0.3l-1-0.3l-1-0.3l-2-0.6
759
+ l-2.1-0.6l-2.1-0.6l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-0.6-0.2l-0.5-0.2l-0.5-0.2
760
+ l-0.5-0.2l-0.5-0.2l-0.5-0.3l-0.5-0.3l-0.5-0.3l-1.1-0.6l-1.2-0.6l-1.2-0.6l-1.2-0.6l-1.2-0.6l-1.3-0.6l-1.3-0.6l-1.3-0.6
761
+ l-1.3-0.5l-1.4-0.5l-1.4-0.5l-0.7-0.3l-0.7-0.2l-0.7-0.3l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2L230,24l-0.7-0.2
762
+ l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2L223,22l-0.7-0.2l-0.7-0.1l-0.7-0.1l-0.7-0.1
763
+ l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.6-0.1h-0.6h-0.6h-0.6h-0.6l-0.6,0h-0.6h-0.6h-0.6h-0.6
764
+ h-0.6h-0.5l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2
765
+ l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3
766
+ l-0.9,0.3l-0.9,0.3l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4
767
+ l-0.9,0.4l-0.9,0.4l-1.7,0.9l-1.7,0.9l-1.7,0.9l-1.7,0.9l-1.7,0.9l-1.7,0.9l-1.7,0.9l-1.7,0.9l-3.4,1.9l-3.4,1.9l-0.5,0.3
768
+ l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.2l-0.6,0.2l-1.2,0.5l-1.2,0.5l-1.2,0.5l-1.2,0.4
769
+ l-1.2,0.4l-2.3,0.9l-2.3,0.8l-1.1,0.4l-1.1,0.4L132,51l-1.1,0.4l-1.1,0.4l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2
770
+ l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.4,0.3l-0.4,0.2l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3
771
+ l-0.4,0.3l-0.4,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-1.1,1.1l-1.2,1.2l-2.3,2.3l-2.4,2.3l-2.4,2.3
772
+ l-4.7,4.6l-2.3,2.3l-2.3,2.3L99,77.9L97.8,79l-1.2,1.1l-1.1,1.2l-1.1,1.1l-1.1,1.2l-1.1,1.2L91.1,86L90,87.2l-1.1,1.2l-1.1,1.2
773
+ l-1.1,1.2L85.6,92l-1.1,1.2l-1.1,1.2l-1,1.2l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.2
774
+ l-0.9,1.2l-0.9,1.2l-0.8,1.2l-0.8,1.2l-0.8,1.2l-0.8,1.2l-0.8,1.2l-0.8,1.2l-0.8,1.2l-0.8,1.2l-0.8,1.3l-0.8,1.3l-0.8,1.3
775
+ l-0.8,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.6,1.3l-0.6,1.3
776
+ l-0.6,1.4l-0.6,1.4l-0.6,1.4l-0.6,1.4l-0.6,1.4l-0.5,1.4l-0.5,1.4l-0.5,1.4l-0.5,1.4l-0.5,1.4l-0.5,1.4l-0.5,1.4l-0.4,1.4
777
+ l-0.4,1.4l-0.4,1.4l-0.4,1.4l-0.4,1.4l-0.4,1.4l-0.3,1.4l-0.3,1.4l-0.3,1.4l-0.3,1.4l-0.3,1.4l-0.3,1.4l-0.2,1.4l-0.1,0.7
778
+ l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7
779
+ l-0.1,0.7l-0.2,0.7l-0.2,0.7l-0.2,0.7l-0.2,0.7l-0.2,0.7L42,187l-0.2,0.7l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6
780
+ l-0.2,0.6l-0.5,1.2l-0.5,1.2l-0.5,1.2l-0.5,1.1l-0.5,1.1l-1,2.2l-0.1,0.3l-0.2,0.3l-0.3,0.7l-0.2,0.4l-0.2,0.4l-0.2,0.4
781
+ l-0.2,0.4l-0.2,0.4l0,0v0.1v0.9l-0.2,0.9l-0.3,0.8l-0.4,0.8l-0.5,0.7l-0.6,0.6l-0.7,0.5l-0.8,0.4l-0.8,0.3l-0.9,0.2h-0.9
782
+ l-0.9-0.1l-0.9-0.2l-0.8-0.4l-0.7-0.5l-0.7-0.6l0,0l-0.6-0.6l0,0l-0.4-0.7l0,0l-0.3-0.7v-0.1l-0.2-0.6l-0.1-0.3l-0.1-0.5
783
+ l-0.1-0.5v-0.5v-0.7l0.1-0.6l0.1-0.5l0.1-0.5l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.3l0.1-0.4l0.3-0.6l0.3-0.6l0.3-0.6
784
+ l0.3-0.5l0.2-0.5l0.4-0.7l0.1-0.1l0.9-2l0.5-1.1l0.5-1.1l0.4-1.1l0.4-1.1l0.4-1.1l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5
785
+ l0.2-0.5l0.2-0.5l0.2-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.4l0.1-0.4l0.1-0.5l0.1-0.7l0.1-0.8
786
+ l0.1-0.8l0.1-0.8l0.1-0.8l0.1-0.8l0.1-0.8l0.1-0.8l0.1-0.8l0.1-0.8l0.3-1.5l0.3-1.5l0.3-1.5l0.3-1.5l0.3-1.5l0.4-1.5l0.4-1.5
787
+ l0.4-1.5l0.4-1.5l0.4-1.5l0.4-1.5l0.5-1.5l0.5-1.5l0.5-1.5l0.5-1.5l0.5-1.5l0.5-1.5l0.6-1.5l0.6-1.5l0.6-1.5l0.6-1.5l0.6-1.5
788
+ l0.6-1.5l0.6-1.5l0.7-1.4l0.7-1.4l0.7-1.4l0.7-1.4l0.7-1.4l0.7-1.4l0.7-1.4l0.7-1.4l0.8-1.4l0.8-1.4l0.8-1.4l0.8-1.4l0.8-1.4
789
+ l0.8-1.4l0.8-1.4l0.8-1.3l0.8-1.3l0.8-1.3l0.9-1.3l0.9-1.3l0.9-1.3l0.9-1.3l0.9-1.3l0.9-1.3l0.9-1.3l0.9-1.2l0.9-1.2l0.9-1.2
790
+ l0.9-1.2l0.9-1.2l0.9-1.2l1-1.2l1-1.2l1-1.2l1-1.1l1.1-1.3l1.1-1.3l1.1-1.3l1.1-1.2l1.1-1.2l1.1-1.2l1.1-1.2l1.2-1.2l1.2-1.2
791
+ l1.2-1.2l1.2-1.2l1.2-1.2l1.2-1.2l1.2-1.2l1.2-1.2l1.2-1.2l2.4-2.3l2.4-2.3l4.7-4.6l2.3-2.3l2.3-2.3l2.3-2.3l1.1-1.1l1.2-1.2
792
+ l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.6-0.4l0.6-0.4l0.6-0.4l0.6-0.4l0.6-0.3l0.6-0.3l0.6-0.3
793
+ l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l1.2-0.5l1.2-0.5l1.2-0.5l1.2-0.5
794
+ l1.2-0.4l2.3-0.9l2.3-0.8l1.1-0.4l1.1-0.4l1.1-0.4l1.1-0.4l1-0.4l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.4-0.2
795
+ l0.4-0.2l0.4-0.2l0.4-0.2l3.4-1.8l3.4-1.9l1.7-0.9l1.7-0.9l1.7-0.9l1.8-0.9l1.8-0.9l1.8-0.9l1.8-0.9L167,22l0.9-0.4l0.9-0.4
796
+ l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4L176,18l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l1-0.4l1-0.4l1-0.4l1-0.4
797
+ l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.2l1-0.2l1-0.2l1-0.2l1-0.2l1-0.2l1-0.2l1-0.2l1-0.2l1-0.1
798
+ l1-0.1l1.1-0.1l0.8-0.1l0.8-0.1L208.6,8z M35.3,198.2l-0.1-0.2l-0.1-0.1L35.3,198.2z M34.9,197.7l-0.2-0.3l-0.3-0.3L34.9,197.7
799
+ z"
800
+ />
801
+ </g>
802
+ <g transform="matrix(1,0,0,1,381.866,45.2348)">
803
+ <path
804
+ d="M223.3,0.9l1.4-0.1l1.4-0.1l1.4-0.1l1.4,0l1.4,0l1.4,0l1.4,0l1.4,0l1.4,0l1.4,0l1.4,0l1.4,0l1.4,0l1.4,0.1
805
+ l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.2l1.4,0.2l1.4,0.2l1.4,0.2l1.4,0.2l1.4,0.2
806
+ l1.4,0.2l1.4,0.2l1.4,0.2l1.4,0.3l1.4,0.3l1.4,0.3l1.4,0.3l1.4,0.3l1.3,0.3l1.3,0.3l1.3,0.3l1.3,0.4l1.3,0.4l1.3,0.4l1.3,0.4
807
+ l1.3,0.4l1.3,0.4l1.3,0.4l1.3,0.4l1.3,0.5L292,10l1.3,0.5l1.3,0.5l1.3,0.5l1.3,0.5l1.3,0.6l1.3,0.6l1.2,0.6l1.2,0.6l1.2,0.6
808
+ l1.2,0.6l1.2,0.6l1.2,0.7l1.2,0.7l1.2,0.7l1.2,0.7l1.2,0.7l1.2,0.7l1.2,0.8l1.1,0.8l1.1,0.8l1.1,0.8l0.6,0.4l0.6,0.4l0.6,0.4
809
+ l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.5l0.5,0.4l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5
810
+ l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.6
811
+ l0.5,0.5l0.5,0.6l0.5,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6
812
+ l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.1,0.2l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.1l0.1,0.2
813
+ l0.1,0.1l0.3,0.4l0.3,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.5,0.4l0.5,0.4l1,0.9l1.1,1l0.6,0.5l0.6,0.5l0.6,0.6l0.6,0.6l0.6,0.6
814
+ l0.6,0.6l0.6,0.7l0.6,0.7l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.5
815
+ l0.3,0.5l0.3,0.5l0.3,0.5l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.5,0.8
816
+ l0.5,0.8l0.5,0.8l0.5,0.8l0.6,0.8l0.6,0.8l0.6,0.8l0.6,0.8l0.6,0.8l1.3,1.7l1.3,1.7l0.7,0.9l0.7,0.9l0.7,0.9l0.7,0.9l0.7,0.9
817
+ l0.7,0.9l0.7,1l0.7,1l0.6,1l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.6l0.3,0.6l0.3,0.6l0.3,0.7
818
+ l0.3,0.7l0.3,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.4,1.2l0.4,1.2l0.4,1.2
819
+ l0.4,1.2l0.3,1.2l0.3,1.2l0.3,1.2l0.6,2.3l0.6,2.3l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.4,1.1l0.2,0.5l0.2,0.5
820
+ l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.3,0.6l0.2,0.4l0.2,0.5l0.2,0.4
821
+ l0.2,0.5l0.3,0.9l0.3,1l0.4,1.1l0.4,1.1l0.4,1.2l0.4,1.3l0.8,2.7l0.9,2.8l0.9,2.9l0.9,2.9l0.4,1.4l0.4,1.4l0.4,1.3l0.4,1.3
822
+ l0.4,1.2l0.4,1.1l0.4,1l0.3,0.9l0.2,0.4l0.1,0.3l0.1,0.1l0.7,0.9l0.6,0.9l0.5,1l0.4,1.1l0.2,1.1l0.1,1.1l-0.1,1.1l-0.2,1.1
823
+ l-0.3,1.1l-0.5,1l-0.6,0.9l-0.7,0.9l-0.8,0.8l0,0l-0.8,0.6l-0.8,0.5l0,0l-0.9,0.4l-1,0.3l0,0l-1,0.2l-1,0.1l0,0h-1l-1-0.1h-0.1
824
+ l-0.7-0.2l-0.7-0.2h-0.1l-0.6-0.3l-0.6-0.3h-0.1l-0.9-0.6l-0.3-0.3l-0.6-0.5l-0.5-0.5l-0.4-0.4l-0.3-0.4l-0.4-0.6l-0.4-0.6
825
+ l-0.3-0.6l-0.3-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.6l-0.4-1.1l-0.4-1.2l-0.4-1.3l-0.4-1.3l-0.5-1.4
826
+ l-0.5-1.4l-0.5-1.4l-0.5-1.5l-0.9-3l-0.9-2.9l-0.9-2.8l-0.8-2.6l-0.4-1.2l-0.4-1.1l-0.3-1l-0.3-0.9l-0.3-0.7l-0.2-0.6l-0.1-0.2
827
+ l-0.1-0.1l0,0l0,0l-0.3-0.6l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.2-0.7l-0.2-0.7
828
+ l-0.2-0.7l-0.2-0.7l-0.2-0.7l-0.4-1.3l-0.4-1.3l-0.4-1.3l-0.4-1.2l-0.3-1.2l-0.3-1.2l-0.3-1.2l-0.6-2.3l-0.6-2.3L366,118
829
+ l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1l-0.3-1l-0.3-1l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5
830
+ l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.4l-0.2-0.5l-0.2-0.4L361,104l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4L360,102
831
+ l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.6-0.8l-0.6-0.8l-0.6-0.8l-0.6-0.8l-0.6-0.8l-1.3-1.7
832
+ l-1.3-1.7l-0.7-0.9l-0.7-0.9l-0.7-0.9l-0.7-0.9l-0.7-0.9l-0.7-0.9l-0.7-1l-0.7-1l-0.6-1l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5
833
+ l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.6l-0.2-0.5l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2
834
+ l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4
835
+ l-0.5-0.4l-0.5-0.4l-0.5-0.5l-0.5-0.5l-1.1-1l-1.1-1l-0.6-0.5l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.7l-0.6-0.7l-0.3-0.4
836
+ l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.2-0.4l-0.4-0.6l-0.3-0.5l-0.3-0.5l-0.3-0.5
837
+ l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5
838
+ l-0.4-0.5l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4
839
+ l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4
840
+ l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.3l-0.4-0.4l-0.4-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.4-0.3l-0.9-0.7l-0.9-0.6
841
+ l-0.9-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.5l-1-0.5l-1-0.5l-1-0.5l-1-0.5l-1.1-0.5l-1.1-0.5l-1.1-0.5l-1.1-0.5
842
+ l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4L278,23l-1.2-0.3l-1.2-0.3l-1.2-0.3
843
+ l-1.2-0.3l-1.2-0.3l-1.2-0.3l-1.2-0.3l-1.2-0.3l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2
844
+ l-1.2-0.2l-1.2-0.2l-1.2-0.1l-1.2-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1H241
845
+ l-1.3,0h-1.3h-1.3h-1.3h-1.3l-1.3,0h-1.3h-1.3h-1.3H228l-1.3,0l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1
846
+ l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.2l-1.3,0.2l-1.3,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2
847
+ l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.3l-1.2,0.3
848
+ l-1.3,0.3l-1.3,0.3l-1.3,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.4l-1.2,0.4l-1.2,0.4l-1.2,0.4l-1.1,0.4l-1.1,0.4
849
+ l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1,0.5l-1,0.5l-1,0.5l-1,0.5l-1,0.5l-1,0.5l-1,0.5l-1,0.5
850
+ l-1,0.5l-1,0.5l-1,0.5l-0.9,0.5l-0.9,0.5l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6
851
+ l-0.9,0.6l-0.9,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7
852
+ l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7L127,55l-0.8,0.8l-0.8,0.8l-0.8,0.8l-0.8,0.8l-0.7,0.8l-0.7,0.8l-0.7,0.8
853
+ l-0.7,0.8l-0.1,0.1l-0.1,0.2l-0.2,0.5l-0.2,0.5l-0.3,0.5l-0.5,0.9l-0.5,0.9l-0.6,0.9l-0.6,0.9l-0.6,0.9l-0.6,0.9l-0.6,0.9
854
+ l-0.6,0.9l-0.6,0.9l-0.7,0.9l-0.7,0.9l-0.7,0.9l-0.7,0.8l-0.7,0.8l-0.7,0.8l-0.7,0.8l-0.7,0.8l-0.7,0.8l-0.7,0.8l-0.7,0.8
855
+ l-0.7,0.8l-0.7,0.8l-0.7,0.8l-1.5,1.6l-1.5,1.6l-1.5,1.6l-1.1,1.2l-0.2,0.3l-1.4,2l-1.4,2l-1.4,2l-1.4,2l-2.8,4.1l-2.9,4.1
856
+ l-2.9,4.2l-1.5,2.1l-1.5,2.1l-1.5,2.1l-1.5,2.1l-1.2,1.7l-0.4,0.9l-0.5,1.2l-0.5,1.2l-0.5,1.2l-0.5,1.2l-0.5,1.2l-0.5,1.2
857
+ l-0.9,2.5l-0.9,2.5l-0.9,2.5l-0.9,2.6l-0.9,2.6l-1.8,5.2l-0.9,2.6l-0.9,2.6l-0.9,2.6l-1,2.6l-1,2.6l-0.5,1.3l-0.5,1.3l-0.5,1.3
858
+ l-0.5,1.3l-0.5,1.3l-0.5,1.4l-0.4,0.9l-0.4,0.9l-0.4,0.9l-0.4,0.9l-0.4,0.9l-0.4,0.9l-0.4,0.9l-0.4,0.9l-0.4,0.9l-0.4,0.9
859
+ l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.5,0.8l-0.9,1.6l-0.9,1.6l-0.9,1.5l-0.9,1.5l-1.8,3l-0.9,1.5l-0.8,1.5
860
+ l-0.2,0.3l-0.2,0.4l-0.2,0.5l-0.3,0.5l-0.3,0.6l-0.3,0.6l-0.6,1.4l-1.4,3l-0.7,1.5l-0.7,1.5l-0.4,0.7l-0.3,0.7l-0.3,0.7
861
+ l-0.4,0.7l-0.4,0.6l-0.4,0.6l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.3,0.4l-0.4,0.5l-0.5,0.5l-0.3,0.3l-0.7,0.6l-0.1,0.1l-0.5,0.4
862
+ l-0.6,0.4h-0.1l-0.7,0.3l-0.7,0.3l0,0l-0.6,0.2l-0.6,0.2l0,0l-0.7,0.1l-0.7,0.1l0,0h-0.9l-0.9-0.1l0,0l-0.9-0.2l-0.9-0.3l0,0
863
+ l-0.9-0.4l-0.8-0.5l0,0l-0.6-0.5l-0.6-0.5l0,0l-0.5-0.5l-0.5-0.6l0,0l-0.5-0.7l-0.4-0.7v-0.1l-0.3-0.7l-0.2-0.7v-0.1l-0.2-1
864
+ l-0.1-0.5l-0.1-0.8v-0.6v-0.6v-0.4l0.1-1.1l0.3-1.1l0.4-1l0.5-1l0.7-0.9l0.8-0.8l0.9-0.7l0.3-0.2l0.5-1.1l0.7-1.4l1.2-2.6v-0.1
865
+ v-0.5v-0.7V188v-0.7v-0.7v-0.7l0-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7
866
+ l0.1-0.7l0.1-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7
867
+ l0.2-0.7l0.5-1.4l0.5-1.4l0.5-1.4l0.5-1.4l0.5-1.4l0.6-1.4l0.6-1.4l0.6-1.4l0.6-1.4l0.6-1.4l0.6-1.4l0.6-1.4l0.7-1.4l0.7-1.4
868
+ l0.7-1.4l0.7-1.4l0.7-1.4l0.7-1.4l0.7-1.3l0.7-1.3l0.7-1.3l0.7-1.3l0.7-1.3l0.7-1.3l0.7-1.3l0.8-1.3l0.8-1.3l0.8-1.3l0.8-1.2
869
+ l0.8-1.2l0.8-1.2l0.8-1.2l0.3-0.4l0.6-1.1l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l0.5-0.9l0.5-0.9l0.5-0.9l0.5-0.9l0.5-0.9
870
+ l0.5-0.9l0.6-0.9l0.6-0.9l0.6-0.9l0.6-0.9l0.4-0.7l0.2-0.5l0.6-1.3l0.6-1.3l0.7-1.3l0.7-1.3l0.7-1.3l0.7-1.3l0.7-1.3l0.7-1.3
871
+ l0.7-1.3l0.7-1.3l0.8-1.3l0.8-1.3l0.8-1.3l0.8-1.3l0.8-1.3l0.8-1.3l0.9-1.3l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7
872
+ l0.5-0.7l0.5-0.7l0.5-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7
873
+ l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.6l0.6-0.6l0.6-0.6l0.6-0.6l0.6-0.6l0.6-0.6l0.6-0.6l1.5-1.5l0.9-0.9l1-1l1-1l1.1-1
874
+ l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.5l0.6-0.5l0.6-0.4l0.6-0.4l0.6-0.4l0.4-0.2l0.3-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.5-0.3
875
+ l0.6-0.3l0.8-0.3l0.5-0.1l1-0.2h0.1l0,0l0.2-0.2l0.8-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8
876
+ l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l1-0.8l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1.1-0.7
877
+ l1.1-0.7l1.1-0.7l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.2-0.6l1.2-0.6l1.2-0.5l1.2-0.5l1.2-0.5
878
+ l1.2-0.5l1.2-0.5l1.2-0.5l1.2-0.5l1.3-0.5l1.3-0.5l1.3-0.5l1.3-0.5l1.3-0.4L170,9l1.3-0.4l1.3-0.4l1.4-0.4l1.4-0.4l1.4-0.4
879
+ l1.4-0.4l1.4-0.4l1.4-0.3l1.4-0.3l1.4-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2
880
+ l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.4-0.2l1.4-0.2l1.4-0.2l1.4-0.1l1.4-0.1l1.4-0.1l1.4-0.1l1.4-0.1
881
+ l1.4-0.1l1.4-0.1l1.4-0.1l1.4-0.1L223.3,0.9z M388.7,162.8l-0.7,0.6l0.9-0.7l0.8-0.4L388.7,162.8z M390.5,161.8l-0.5,0.3
882
+ l0.9-0.4L390.5,161.8z M392.2,161.4l0.4-0.1h-0.2L392.2,161.4z"
883
+ />
884
+ <path
885
+ d="M156.3,235.9l1.3-0.1l1.3-0.1h1.4h1.3h1.3h1.4h1.3h1.4h1.3h1.3h1.3h1.3h1.3h1.3l1.3,0.1l1.3,0.1l1.3,0.1
886
+ l1.3,0.1l1.3,0.1l1.3,0.1l2.6,0.2l2.7,0.2l2.6,0.2l2.6,0.2l5.3,0.4l2.6,0.2l2.6,0.2l2.6,0.2l2.6,0.2l2.6,0.2l1.3,0.1l1.3,0.1
887
+ l1.3,0.1l1.3,0.1h1.3h1.3h1.3h1.3h1.3h1.3h1.3h1.2h1.2l1.2,0h1.2h1.2l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1
888
+ l1.2-0.1l1.2-0.2l1.2-0.2l1.2-0.2l1.1-0.2l1.1-0.2l1.1-0.2l0.9-0.2l0.9-0.2l1-0.2l1-0.2l1-0.2l1-0.2l1-0.3l1-0.3l1-0.3l1-0.3
889
+ l2.1-0.6l2.1-0.6l2.1-0.6l4.3-1.3l2.2-0.6l2.2-0.6l2.2-0.6l2.3-0.6l1.1-0.3l1.1-0.3l1.2-0.3l1.2-0.3l1.2-0.3l1.2-0.3l1.2-0.3
890
+ l1.2-0.3l1.2-0.3l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1
891
+ l1.2-0.1h1.2h0.6h0.6h0.6h0.6h0.6h0.6h0.6h0.6h0.6h0.6h0.6h0.6l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1
892
+ l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l2.6,0.5l2.6,0.5l5.4,1.1l2.8,0.6l2.8,0.6l2.9,0.6l2.9,0.6l2.9,0.6l3,0.6l1.5,0.3
893
+ l1.5,0.3l1.5,0.3l1.5,0.3l1.5,0.3l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2
894
+ l1.5,0.2l1.5,0.2l1.5,0.1l1.5,0.1l1.5,0.1l1.5,0.1l1.5,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1h1.4h1.4h1.4h1.4h1.4h1.3l1.3-0.1
895
+ h0.6h0.7h0.7h0.6h0.6h0.6l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1
896
+ l0.6-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.6-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.6-0.1l1-0.1l1-0.1l1-0.1l1-0.1l2-0.1l1.9-0.1h0.9
897
+ l0.9-0.1l0.9-0.1l0.8-0.1l0.8-0.1h0.4h0.4l0.4-0.1l0.4-0.1l0.4-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1
898
+ l0.3-0.1l0.3-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.1-0.1l0.1-0.1l0.1-0.1
899
+ l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1v-0.1v-0.1
900
+ v-0.1v-0.1v-0.1v-0.1V228l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0v-0.1v-0.1v-0.1v-0.1v-0.1
901
+ v-0.1v-0.1v-0.1v-0.1V227v-0.1v-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
902
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.1l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3
903
+ l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3
904
+ l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.8-0.3
905
+ l-0.9-0.3l-1.7-0.6l-1.8-0.6l-0.9-0.3l-0.9-0.3l-0.9-0.3l-0.9-0.3l-0.8-0.3l-0.8-0.2l-0.8-0.2l-0.3-0.1l-0.8,0.4l-0.5,0.2
906
+ l-0.6,0.3l-0.7,0.2l-0.4,0.1l-0.9,0.2l-0.9,0.1l0,0h-1l-0.9-0.1l-0.9-0.2l-0.9-0.3l0,0l-1.1-0.5l-1-0.6l-0.9-0.7l-0.8-0.9
907
+ l-0.7-1l0,0l-0.5-0.9l-0.4-1l-0.3-1l-0.1-1v-1l0,0l0.1-1.1l0.2-1.1l0.4-1l0,0l0.4-0.8l0.5-0.8v-0.1l0.7-0.8l0.2-0.3l0.3-0.3
908
+ l0.9-0.8l1-0.7l1.1-0.5l1.2-0.4h0.1l0.2-0.1l0.7-0.3l0.4-0.2l0.4-0.2l0.4-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.6-0.1l0.7-0.1l0.8-0.1
909
+ l0.8-0.1h0.6h0.5l0.6,0.1l0.5,0.1l0.7,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l1,0.3l1.1,0.3l1,0.3l1,0.3l1,0.3l1,0.3
910
+ l1,0.3l1.8,0.6l1.7,0.6l0.8,0.3l0.8,0.3l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3
911
+ l0.7,0.3l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5
912
+ l0.6,0.5l0.6,0.6l0.6,0.6l0.6,0.6l0.6,0.6l0.6,0.6l0.6,0.7l0.6,0.7l0.3,0.4l0.3,0.3l0.3,0.3l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4
913
+ l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.5l0.2,0.5l0.2,0.4l0.2,0.5l0.1,0.5
914
+ l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5v0.5v0.5v0.5v0.5v0.5v0.5v0.5l-0.1,0.5l-0.1,0.6l-0.1,0.5l-0.1,0.5
915
+ l-0.1,0.5l-0.1,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5
916
+ l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.5,0.5l-0.6,0.5l-0.6,0.5l-0.6,0.5
917
+ l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2
918
+ l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1
919
+ l-1.1,0.1l-1.1,0.1l-1.1,0.1l-1.1,0.1l-1,0.1l-2,0.1l-1.9,0.1h-0.9l-0.9,0.1l-0.8,0.1l-0.8,0.1h-0.3h-0.4h-0.3h-0.3h-0.3
920
+ l-0.3,0.1H414l-0.3,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1
921
+ l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1h-0.8h-0.8h-0.8h-0.8l-1.5,0.1h-1.5h-1.5h-1.6h-1.6h-1.6h-1.6l-1.6-0.1l-1.6-0.1
922
+ l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2
923
+ l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.3l-1.6-0.3l-1.6-0.3l-1.6-0.3l-1.5-0.3l-1.5-0.3l-1.5-0.3l-3-0.6l-3-0.6
924
+ l-3-0.6l-2.9-0.6l-2.9-0.6l-2.8-0.6l-5.4-1.1l-2.6-0.5l-2.5-0.5l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1
925
+ l-0.5-0.1l-0.5-0.1h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-1l-1,0.1l-1,0.1l-1,0.1
926
+ l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1.1,0.2l-1.1,0.2l-1.1,0.3l-1.1,0.3
927
+ l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.3l-2.2,0.6l-2.2,0.6l-2.2,0.6l-2.2,0.6l-4.3,1.3l-2.2,0.6l-2.2,0.6l-2.2,0.6l-1.1,0.3
928
+ l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.2l-1.1,0.2l-1.1,0.2l-1.4,0.3l-1.4,0.2l-1.4,0.2l-1.4,0.2
929
+ l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0h-1.4h-1.4h-1.4
930
+ h-1.4H220h-1.4h-1.4h-1.4h-1.4l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.1l-2.7-0.2l-2.7-0.2l-2.7-0.2l-2.7-0.2l-2.7-0.2
931
+ l-5.3-0.4l-2.6-0.2l-2.6-0.2l-2.6-0.2l-2.6-0.2l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.2-0.1l-1.2-0.1h-1.2h-1.2H167h-1.2
932
+ h-1.2h-1.2h-1.2H161h-1.2h-1.2h-1.3h-1.2h-1.3l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-2.6,0.2l-2.6,0.2l-2.6,0.2
933
+ l-2.6,0.2l-5.3,0.4l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1
934
+ l-1.4,0.1h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.1
935
+ l-1.4-0.1l-1.4-0.2l-1.4-0.2l-1.4-0.2l-1.4-0.2l-1.3-0.2l-1-0.2l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1
936
+ l-0.9-0.1L69,253l-0.9-0.1l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-1-0.1h-1l-2-0.1l-2-0.1l-2-0.1l-2-0.1h-2h-2l-4.1-0.1l-2.1-0.1
937
+ l-2.1-0.1l-2.1-0.1l-2.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1
938
+ l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2
939
+ l-1.1-0.3l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2L7,246.9l-0.7-0.2l-0.7-0.2L5,246.2l-0.6-0.3l-0.6-0.3l-0.6-0.3
940
+ L2.6,245L2,244.7l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.5-0.3l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4
941
+ l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.2-0.6l-0.2-0.6
942
+ l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6v-0.6v-0.6l0-0.6v-0.6v-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.5
943
+ l0.1-0.5l0.1-0.5l0.1-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.4
944
+ l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4
945
+ l0.3-0.4l0.4-0.4l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.8-0.7l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6
946
+ l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.4l0.7-0.4l0.1-0.1l0,0l0,0h0.1h0.1l0,0l0.2-0.1l0.2-0.2l0.2-0.2
947
+ l0.3-0.2l0.3-0.3l0.3-0.3l0.3-0.3l0.4-0.3l0.4-0.3l0.8-0.8l0.9-0.8l0.9-0.9l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.5l0.6-0.5l0.6-0.5
948
+ l0.6-0.5l0.6-0.5l0.7-0.5l0.7-0.5l0.4-0.3l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.3-0.2l1.1-0.5l1.2-0.3l1.2-0.2
949
+ h1.2l1.2,0.2l1.2,0.3l1.1,0.5l1,0.6l0.9,0.8l0.8,0.9l0.7,1l0.6,1.1l0.4,1.1l0.2,1.2l0.1,1.2l-0.1,1.2l-0.3,1.2l-0.4,1.1
950
+ l-0.6,1.1l-0.7,1l-0.8,0.9l-0.9,0.8l-1,0.6l-0.2,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.3,0.2
951
+ l-0.3,0.2l-0.3,0.2l-0.3,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.8,0.8l-0.9,0.9l-0.9,0.9l-0.5,0.5
952
+ l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.6,0.5l-0.6,0.5l-0.6,0.5l-0.6,0.4l-0.4,0.2l-0.3,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
953
+ l-0.3,0.2l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4
954
+ l-0.6,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2
955
+ l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2L9.6,225l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2L9.1,226
956
+ L9,226.2l-0.1,0.2l-0.1,0.2l-0.1,0.2L8.6,227l-0.1,0.1l-0.1,0.1l-0.1,0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1l0,0v0.1l0,0l0,0l0,0
957
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.3,0.1l0.3,0.1
958
+ l0.3,0.1l0.3,0.1l0.3,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2
959
+ l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l1,0.1l0.9,0.1l1,0.1l1,0.1
960
+ l1,0.1l1,0.1h1h1l2,0.1l2,0.1l2,0.1l2,0.1l4.1,0.1h2.1h2.1l2.1,0.1l2.1,0.1l2.1,0.1l2.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1
961
+ l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.2l1,0.2l1.2,0.2l1.2,0.2l1.2,0.2
962
+ l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1h1.2h1.2h1.2h1.3h1.3h1.3h1.3h1.3h1.3h1.3h1.3
963
+ l1.3-0.1l1.3-0.1l1.3-0.1l1.3-0.1l1.3-0.1l1.3-0.1l1.3-0.1l2.6-0.2l2.6-0.2l2.6-0.2l2.6-0.2l2.7-0.2l5.3-0.4l2.7-0.2l2.7-0.2
964
+ l2.7-0.2l2.7-0.2l1.4-0.1l1.3-0.1l1.3-0.1L156.3,235.9z M411.9,211.1L411.9,211.1l0.5-0.6l0.1-0.1L411.9,211.1z"
965
+ />
966
+ </g>
967
+ <g transform="matrix(1,0,0,1,400.214,44.558)">
968
+ <path
969
+ d="M6,210.5h0.6h0.6h0.6H9h1.2h1.1h1.1l1.1,0h1h1l1.9,0.1h0.8H19h0.7h0.6l1,0.1l0.9,0.2l0.9,0.4l0.8,0.5
970
+ l0.7,0.7l0.6,0.8l0.5,0.9l0.3,0.9l0.2,1v1l-0.2,1l-0.3,0.9l-0.5,0.9l-0.6,0.8l-0.7,0.7l-0.8,0.5l-0.9,0.4l-0.9,0.2l-1,0.1h-0.7
971
+ h-0.8H18h-0.9l-1.8-0.1h-1h-1h-1l-1,0h-1h-1h-1H7.8H7.3H6.8H6.3H5.8H5.3H4.8H4.3l-0.5,0.1l-0.4,0.1L3,222.8l-0.4,0.1L2.2,223
972
+ l-0.4,0.1l-0.4,0.1L1,223.3l-0.4,0.1l-0.3,0.1L0,223.6l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.2,0.1l-0.2,0.1l0,0l0.2,0.2l0.2,0.2
973
+ l0.2,0.2l0.2,0.1l0.3,0.1L0,225l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l1.6,0.7l1.6,0.7l1.6,0.7l1.7,0.7l1.7,0.7
974
+ l0.8,0.3l0.9,0.3L12,230l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.2l0.9,0.2l0.8,0.2
975
+ l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.3,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1h0.4H31h0.4h0.5h0.5h0.5
976
+ h0.5h0.5h0.5h0.5h0.5h1.1h1.1h1.1l1.1-0.1L41,235l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1
977
+ l1.2-0.2l1.2-0.2l2.3-0.3l2.2-0.3l4-0.6l0.5-0.1l0.5-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1h0.9h0.9H70h0.9h0.9h0.9h0.9l1.7,0.1
978
+ l1.7,0.1l1.6,0.1h1.6H81h0.8h0.8h0.8h0.8h0.7h0.7h0.7H87l0.7-0.1l0.7-0.1h0.3h0.4l1.7-0.2l1.8-0.2l1.8-0.2l1.8-0.2L98,231
979
+ l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.1l1.8-0.1l1.8-0.1l1.8-0.1l1.8-0.1
980
+ l1.8-0.1l1.8-0.1l1.8-0.1l1.8-0.1l1.8-0.1l1.8-0.1l1.8-0.1h1.8h1.8h1.8h1.8h1.8h1.1h1.1h1.1h1.1h1.1l1.1,0.1l1,0.1l1,0.1l1,0.1
981
+ l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.2l1,0.2l1,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2
982
+ l0.9,0.2l0.9,0.2l1.8,0.4l1.8,0.4l1.8,0.5l1.8,0.5l1.8,0.5l1.7,0.5l3.5,1l1.8,0.5l1.8,0.5l1.8,0.5l1.8,0.5l1.8,0.5l1.8,0.4
983
+ l1.8,0.4l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.4,0.1l0.4,0.1l0.4,0.1h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4
984
+ h0.4h0.4h0.4l0.4,0h0.4l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.9-0.2l0.9-0.2
985
+ l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l1.9-0.6l1.9-0.7l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1.4-0.4l1.4-0.4
986
+ l1.4-0.4l1.4-0.4l1.5-0.4l1.5-0.4l1.5-0.4l1.5-0.4l1.5-0.4l1.5-0.4l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3
987
+ l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.2l1.5-0.2l1.5-0.2l1.5-0.2l1.5-0.2l1.5-0.2
988
+ l1.1-0.2l1.2-0.1l1.2-0.1l1.1-0.1l1.1-0.1l1.1-0.1l1.1-0.1h1.1h1.1h1.1h1.1h1.1h1.1h1.1h1.1h1.1l1.1,0.1l1.1,0.1l1.1,0.1
989
+ l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l2.1,0.3l2.1,0.3l2.1,0.3l2.1,0.3l4.1,0.6l2,0.3
990
+ l2,0.3l2,0.3l2,0.3l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1h1h1h1h1h1h0.9h0.9h0.9h0.9h0.9h0.9h0.9
991
+ h0.9l0.9,0.1l0.9,0.1l1.7,0.1l1.7,0.1l1.7,0.1l1.7,0.2l1.7,0.2l3.3,0.3l3.3,0.3l1.6,0.2l1.6,0.2l1.6,0.2l1.6,0.1l1.6,0.1
992
+ l1.6,0.1l0.8,0.1h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1
993
+ l0.8-0.1l0.8-0.1l0.7-0.1l0.9-0.1l0.4-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.2
994
+ l0.5-0.2l0.4-0.2l0.4-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
995
+ l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0,0l0,0v-0.1l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2V225v-0.2v-0.2v-0.2v-0.2V224
996
+ v-0.2v-0.2v-0.2v-0.2V223v-0.2v-0.2v-0.2v-0.2v-0.1V222v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1V221v-0.1l0-0.1v-0.1
997
+ v-0.1v-0.1v-0.1l-0.1-0.1v-0.1v-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
998
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
999
+ l-0.2-0.2l-0.2-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1
1000
+ l-0.4-0.1l-0.4-0.1l-0.4-0.1h-0.4H406h-0.4h-0.4h-0.4h-0.4H404h-0.4h-0.4l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
1001
+ l-0.4,0.1l-0.6,0.2l-0.4,0.1l-0.4,0.1l-0.7,0.1l-0.8,0.1l-0.9,0.1l-1,0.1l-1.1,0.1l-1.1,0.1l-1.2,0.1l-1.2,0.1h-0.6h-0.6h-0.6
1002
+ h-0.5h-0.5h-0.5h-0.5h-0.5l-0.6-0.1l-0.6-0.1l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.5-0.2h-0.1l-0.6-0.3h-0.1l-0.5-0.3l-0.4-0.4l0,0
1003
+ l-0.5-0.5l-0.4-0.6l0,0l-0.3-0.6l-0.3-0.6l-0.2-0.7l0,0l-0.1-1v-1l0.2-1l0.3-0.9l0.5-0.9l0.6-0.8l0.7-0.7l0.8-0.5l0.9-0.4
1004
+ l0.9-0.2l1-0.1l1,0.1l0.9,0.2l0.1,0.1h0.2h0.3h0.4h0.4h0.5h0.5h1l1-0.1l1-0.1l1-0.1l0.9-0.1l0.7-0.1l0.6-0.1h0.2l0.4-0.1
1005
+ l0.7-0.2l0.7-0.2l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1h0.7h0.7h0.7h0.7h0.7l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1
1006
+ l0.7,0.1l0.7,0.2l0.7,0.2l0.7,0.2l0.7,0.2l0.7,0.2l0.6,0.2l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.4l0.6,0.4l0.5,0.4l0.3,0.2
1007
+ l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3
1008
+ l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.3l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.4
1009
+ l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4v0.4v0.4v0.4v0.4l0,0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4
1010
+ l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4L425,228l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.5l-0.2,0.5
1011
+ l-0.2,0.5l-0.2,0.5l-0.3,0.5l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3
1012
+ l-0.3,0.3l-0.3,0.3l-0.4,0.2l-0.4,0.2l-0.3,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
1013
+ l-0.4,0.2l-0.7,0.3l-0.7,0.3l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1
1014
+ l-0.6,0.1l-0.6,0.1l-1,0.2l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1h-0.9h-0.9H395h-0.9h-0.9
1015
+ h-0.9h-0.9h-0.9h-0.9h-0.9h-0.9h-0.9H386h-0.9l-0.9-0.1l-0.9-0.1l-0.9-0.1l-1.7-0.1l-1.7-0.1l-1.7-0.2l-1.7-0.2l-1.6-0.2
1016
+ l-1.6-0.2l-3.3-0.3l-3.2-0.3l-1.6-0.2l-1.6-0.2l-1.6-0.1l-1.6-0.1l-1.6-0.1l-0.8-0.1h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8
1017
+ h-0.8h-1.1h-1.1h-1.1h-1.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1
1018
+ l-1.1-0.1l-1.1-0.1l-2.1-0.3l-2.1-0.3l-2.1-0.3l-2.1-0.3l-4.1-0.6l-2-0.3l-2-0.3l-2-0.3l-2-0.3l-1-0.1l-1-0.1l-1-0.1l-1-0.1
1019
+ l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-1-0.1h-1h-1h-1h-1h-1h-1h-1h-1h-1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1
1020
+ l-1,0.1l-1,0.1l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3
1021
+ l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.4
1022
+ l-1.4,0.4l-1.4,0.4l-1.4,0.4l-1.4,0.4l-1.4,0.4l-1.4,0.4l-1.4,0.4l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3
1023
+ l-1.9,0.7l-1.9,0.7l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.3l-0.6,0.1l-0.5,0.1l-0.5,0.1l-0.6,0.1
1024
+ l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1h-0.6h-0.6l-0.6,0h-0.6h-0.6h-0.6h-0.6
1025
+ h-0.6h-0.6l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-1-0.2l-1-0.2l-1-0.2l-1-0.2l-1-0.2l-1-0.2l-1.9-0.5
1026
+ l-1.9-0.5l-1.9-0.5l-1.8-0.5l-1.8-0.5l-1.8-0.5l-1.8-0.5l-3.5-1l-1.7-0.5l-1.7-0.5l-1.7-0.4l-1.7-0.4l-1.7-0.4l-1.7-0.4
1027
+ l-0.8-0.2l-0.8-0.2l-0.9-0.2l-0.8-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.1l-0.9-0.1l-0.9-0.1
1028
+ l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1H151h-1h-1h-1h-1h-1.7h-1.7h-1.7
1029
+ h-1.7h-1.7l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1
1030
+ l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.7,0.2l-1.7,0.2l-1.7,0.2
1031
+ l-1.7,0.2l-1.7,0.2l-0.4,0.1l-0.5,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1h-0.9H85h-0.9h-0.9H82h-0.9h-0.9h-0.9l-1.7-0.1l-1.7-0.1
1032
+ l-1.6-0.1l-1.6-0.1h-0.8h-0.8h-0.8h-0.8h-0.8H68h-0.7h-0.7h-0.7l-0.7,0.1l-0.7,0.1h-0.3h-0.4l-3.9,0.6l-2.2,0.3l-2.3,0.3
1033
+ l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1h-1.3
1034
+ h-1.3H35h-0.6h-0.6h-0.6h-0.6H32h-0.6h-0.6h-0.6h-0.6l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.5-0.1
1035
+ l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2L21,245l-0.9-0.2l-0.9-0.2l-0.9-0.3l-0.9-0.3l-0.9-0.3l-0.9-0.3l-0.9-0.3l-0.9-0.3
1036
+ l-0.9-0.3l-0.9-0.3l-0.9-0.3l-0.9-0.3l-0.9-0.3L8.4,241l-0.9-0.3l-0.9-0.3l-0.9-0.3l-1.8-0.7l-1.8-0.7L0.4,238l-1.7-0.7
1037
+ l-1.7-0.7l-0.3-0.1l-0.3-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3
1038
+ l-0.5-0.3l-0.5-0.3l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.4-0.5l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3
1039
+ l-0.2-0.3l-0.2-0.3l-0.2-0.4L-13,228l-0.2-0.4l-0.2-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.5l-0.1-0.5v-0.5V224v-0.5l0-0.5
1040
+ l0.1-0.5l0.1-0.5l0.1-0.5l0.2-0.5l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3
1041
+ l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.6-0.3
1042
+ l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1
1043
+ l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1h0.6h0.6L6,210.5z M389.5,208l-0.3-0.4l-0.1-0.1L389.5,208z"
1044
+ />
1045
+ </g>
1046
+ <g transform="matrix(1,0,0,1,400.214,44.558)">
1047
+ <path
1048
+ d="M168.7,64h0.7h0.7h0.7h0.7h0.7l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.2
1049
+ l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3
1050
+ l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4
1051
+ l0.5,0.4l0.5,0.4l0.5,0.4l0.4,0.5l0.4,0.5l0.4,0.5l0.4,0.5L199,78l0.4,0.5l0.4,0.5l0.4,0.5l0.4,0.5l0.4,0.5l0.4,0.5l0.4,0.6
1052
+ l0.3,0.6l0.3,0.6l0.3,0.6L203,84l0.3,0.6l0.3,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.1,0.6L205,90l0.1,0.6
1053
+ l0.1,0.6l0.1,0.6l0.1,0.6V93v0.6v0.6v0.6v0.6V96v0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6L205,99l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6
1054
+ l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6
1055
+ l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.4,0.6l-0.4,0.6l-0.4,0.6
1056
+ l-0.4,0.6l-0.4,0.6l-0.4,0.5l-0.4,0.5l-0.4,0.6l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.4,0.5
1057
+ l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.9,1l-0.9,0.9l-0.9,0.9l-1,0.9l-1,0.9
1058
+ l-1,0.9l-1,0.8l-1,0.8l-1,0.8l-1,0.8l-1,0.7l-0.9,0.7l-0.9,0.7l-0.9,0.7l-0.9,0.6L173,141l-0.9,0.6l-0.9,0.6l-0.9,0.5l-0.9,0.5
1059
+ l-0.8,0.5l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.2l-0.7,0.2
1060
+ l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1h-0.7H153h-0.7h-0.7h-0.7h-0.7
1061
+ l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2
1062
+ l-0.6-0.2l-0.6-0.2l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.4l-0.5-0.4
1063
+ l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.4-0.4l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5
1064
+ l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.3-0.6l-0.3-0.6l-0.3-0.6
1065
+ l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.2-0.6l-0.2-0.6
1066
+ l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.1-0.6l-0.1-0.7l-0.1-0.7
1067
+ l-0.1-0.6l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7v-0.7v-0.7v-0.7v-0.7v-0.7v-0.7l0-0.7v-0.7
1068
+ v-0.7V101l0.1-0.7l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.3-1.5l0.3-1.7l0.3-1.8l0.2-0.9l0.2-0.9l0.2-1l0.2-1
1069
+ l0.2-1l0.2-1l0.2-1l0.3-1l0.3-1l0.3-1l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5
1070
+ l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.3l0.3-0.3
1071
+ l0.3-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.2l0.2-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.3L132,69l0.3,0.1
1072
+ l0.3,0.1l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3
1073
+ l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.3,0.1l-0.1,0.1h-0.1l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.2
1074
+ l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3
1075
+ l-0.2,0.3l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.3,0.9
1076
+ l-0.3,0.9l-0.2,0.9l-0.2,0.9l-0.2,0.9l-0.2,0.9l-0.2,0.9l-0.2,0.9l-0.2,0.9l-0.2,0.9l-0.3,1.8l-0.3,1.7l-0.3,1.5l-0.1,0.6
1077
+ l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.6l-0.1,0.5l-0.1,0.6v0.6v0.6v0.6v0.6v0.6l0,0.6v0.6v0.6v0.6v0.6v0.6l0.1,0.6l0.1,0.6
1078
+ l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6
1079
+ l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5
1080
+ l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.4,0.4l0.4,0.4
1081
+ l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3
1082
+ l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.2l0.4,0.2l0.4,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.1
1083
+ l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5l0.5-0.1l0.5-0.1l0.5-0.1
1084
+ l0.5-0.1l0.5-0.1l0.5-0.1l0.6-0.1l0.6-0.1l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.3l0.6-0.3l0.6-0.3l0.3-0.2
1085
+ l0.3-0.2l0.4-0.2l0.4-0.2l0.8-0.4l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.6l0.9-0.6l0.9-0.6l0.9-0.7l0.9-0.7l0.9-0.7l0.9-0.7
1086
+ l0.9-0.7l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.9l0.9-0.9l0.9-0.9l0.4-0.4l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5
1087
+ l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5
1088
+ l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.2-0.5
1089
+ l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5
1090
+ l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5V96v-0.5V95v-0.5V94v-0.5V93v-0.5V92l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.4l-0.1-0.5
1091
+ l-0.1-0.4l-0.1-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4
1092
+ l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4
1093
+ l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3
1094
+ l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2
1095
+ l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1h-0.5h-0.5
1096
+ h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
1097
+ l-0.4,0.1l-0.4,0.1l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
1098
+ l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.8,0.5l-0.8,0.5l-0.8,0.5l-0.8,0.5l-0.7,0.5l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.5,0.4l-0.5,0.4
1099
+ l-0.5,0.4l-0.5,0.4l-0.2,0.2h-0.1v0.2l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2
1100
+ l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.3h-0.2h-0.2h-0.3h-0.1h-0.2h-0.2h-0.1l-0.2-0.1l-0.2-0.1h-0.1l-0.2-0.1l-0.2-0.2l0,0
1101
+ l-0.2-0.1l-0.2-0.2l-0.2-0.2l0,0l-0.1-0.2l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2l-0.1-0.2l-0.1-0.2l0,0v-0.3v-0.3V79v-0.2v-0.2v-0.1
1102
+ v-0.2l0.1-0.2V78l0.1-0.3l0.1-0.2l0.1-0.3l0.1-0.2l0.1-0.2l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3
1103
+ l0.6-0.5l0.6-0.5l0.6-0.4l0.6-0.4l0.5-0.3l0.4-0.3l0.5-0.3l0.8-0.5l0.8-0.5l0.8-0.5l0.9-0.5l0.9-0.5l0.5-0.3l0.5-0.3l0.5-0.3
1104
+ L157,68l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2L162,66l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2
1105
+ l0.5-0.1L165,65l0.5-0.1l0.5-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1h0.7L168.7,64z M146,75.9L146,75.9L146,75.9L146,75.9z"
1106
+ />
1107
+ </g>
1108
+ <g transform="matrix(1,0,0,1,400.214,44.558)">
1109
+ <path
1110
+ d="M102.5,119.3h0.5h0.5h0.5h0.5h0.5l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.2l0.5,0.2l0.5,0.2
1111
+ l0.5,0.2l0.5,0.2l0.5,0.2l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2
1112
+ l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.3l0.1,0.3
1113
+ l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3
1114
+ l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3
1115
+ l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.4,0.6l-0.4,0.6l-0.4,0.6l-0.4,0.6l-0.4,0.6l-0.4,0.5l-0.4,0.5l-0.5,0.5
1116
+ l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.4
1117
+ l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3
1118
+ l-0.5,0.3l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.1l-0.5,0.1l-0.3,0.1h-0.2l-0.6,0.1l-0.6,0.1h-0.6h-0.5h-0.5
1119
+ h-0.5h-0.5l-0.5-0.1l-0.5-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1L87,156l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1
1120
+ l-0.4-0.2l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3L83,153l-0.3-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4
1121
+ l-0.2-0.4l-0.2-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4V147v-0.4v-0.4v-0.4v-0.4V145
1122
+ v-0.4v-0.4v-0.4v-0.4V143v-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4
1123
+ l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.2-0.5L83,135l0.3-0.8l0.4-0.9l0.4-1l0.5-1l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5
1124
+ l0.2-0.5l0.2-0.5v-0.1V128v-0.2v-0.2v-0.2l0.1-0.2L86,127l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1l0.3-0.3
1125
+ l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3L89,124l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.5-0.2l0.5-0.2l0.5-0.2
1126
+ l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1
1127
+ l0.5-0.1h0.5L102.5,119.3z M102,125.2h-0.4h-0.4l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1L98,126
1128
+ l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l0,0
1129
+ v0.1v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1
1130
+ l-0.2,0.1l-0.2,0.1l-0.2,0.1l0,0l-0.2,0.3l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4L90,133l-0.2,0.5l-0.2,0.5l-0.4,0.9l-0.4,0.9
1131
+ l-0.4,0.8l-0.3,0.7l-0.2,0.6l-0.2,0.4l-0.1,0.2l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3
1132
+ l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3l0.1,0.2
1133
+ l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
1134
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.2,0.1h0.1h0.1h0.1h0.1h0.1H89h0.1h0.1h0.1h0.1h0.2h0.2h0.3h0.3h0.3H91h0.3h0.4l0.4-0.1h0.1h0.1
1135
+ l0.2-0.1l0.2-0.1L93,150l0.3-0.1l0.3-0.1l0.3-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3
1136
+ l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.4-0.4l0.4-0.5
1137
+ l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.2-0.4
1138
+ l0.2-0.4l0.2-0.4l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2v-0.2v-0.2V131v-0.2v-0.2v-0.2v-0.2
1139
+ V130v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1V129v-0.1v-0.1v-0.1v-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2
1140
+ l-0.1-0.2l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
1141
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.3-0.1l-0.3-0.1
1142
+ l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1h-0.3h-0.3h-0.3h-0.4h-0.4h-0.4h-0.4L102,125.2z"
1143
+ />
1144
+ </g>
1145
+ <g transform="matrix(1,0,0,1,400.214,44.558)">
1146
+ <path
1147
+ d="M80.8,178.7h0.4h0.4H82h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.6,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2
1148
+ l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2
1149
+ l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.7,0.5l0.7,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l1.2,1l1.2,1.1l0.6,0.5
1150
+ l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.8,0.6l0.8,0.6l0.8,0.6l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.4,0.2l0.4,0.2
1151
+ l0.4,0.2l0.4,0.2l0.4,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l0.6,0.2l0.6,0.2
1152
+ l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.5,0.2l0.6,0.2l0.5,0.2l0.5,0.3l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.4,0.2l0.4,0.2l0.4,0.3
1153
+ l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.3,0.4l0.2,0.2l0.2,0.2l0.2,0.2
1154
+ l0.2,0.2l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3v0.3v0.3v0.3
1155
+ v0.4l-0.1,0.4l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.2
1156
+ l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1
1157
+ l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.4,0.1l-0.5,0.1l-0.4,0.1l-0.4,0.1h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1
1158
+ l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.8-0.3
1159
+ l-0.7-0.3l-1.4-0.6l-0.7-0.3l-0.6-0.3l-0.6-0.2l-0.5-0.2l-0.5-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1h-0.2h-0.1h-0.2l-0.3-0.1
1160
+ l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1
1161
+ l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.4-0.3l-0.4-0.3l-0.8-0.6l-0.8-0.6l-0.8-0.6l-0.4-0.3l-0.4-0.3l-0.4-0.3
1162
+ l-0.4-0.3l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1
1163
+ l-0.5-0.2l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1h-0.5h-0.5h-0.5h-0.5
1164
+ h-0.5h-0.5h-0.5h-0.5h-0.5h-0.6h-0.5h-1.1l-1.1,0.1l-1.1,0.1l-2.3,0.2l-1.2,0.1l-1.2,0.1l-1.2,0.1l-1.2,0.1h-1.2h-0.6H72h-0.6
1165
+ H69h-0.6h-0.6h-0.6h-0.6H66h-0.6l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.2l-0.6-0.2
1166
+ l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2L55,202l-0.5-0.3l-0.5-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3
1167
+ l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.1-0.4
1168
+ l-0.1-0.4l-0.1-0.4l-0.1-0.4V194v-0.4v-0.4v-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4
1169
+ l0.2-0.4l0.2-0.4l0.2-0.4l0.3-0.4l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3
1170
+ l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.2l0.2-0.1l0,0v-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.2
1171
+ l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.2,0.2l0.2,0.2h0.1l0.5-0.1l0.3-0.1l0.3-0.1l0.3-0.1
1172
+ h0.3h0.4h0.4h0.4h0.4l0.4,0.1h0.3l0.2,0.1L66,181l0.2,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
1173
+ h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2l0.2-0.1l0.2-0.1l0.5-0.1l0.5-0.2l0.5-0.2l0.5-0.2l1.1-0.4
1174
+ l0.5-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.4L80.8,178.7z
1175
+ M80.5,184.6h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2l-0.2,0.1l-0.2,0.1l-0.4,0.1L78,185l-0.5,0.2l-0.5,0.2l-0.5,0.2l-1.1,0.4l-0.6,0.2
1176
+ l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.4h-0.4H70h-0.4h-0.4h-0.4h-0.4H68h-0.4
1177
+ l-0.4-0.1l-0.4-0.1l-0.4-0.1L66,187l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.2-0.1l0,0h-0.1H64h-0.2h-0.2h-0.2h-0.2l-0.5,0.1
1178
+ l-0.5,0.1l-0.5,0.1h-0.2l-0.2,0.2L61,187l-0.3,0.1l-0.4,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2
1179
+ l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.1,0.2
1180
+ l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2v0.2l0,0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1
1181
+ v0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.3,0.2
1182
+ l0.3,0.2l0.3,0.2l0.3,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.5,0.2l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1
1183
+ l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1h0.5h0.5h0.5h0.5h0.5h0.5h0.6h0.6h0.6H71h1.1l1.1-0.1l1.1-0.1l1.2-0.1l1.2-0.1
1184
+ l2.3-0.2l1.2-0.1l1.2-0.1h1.2h0.6h0.6h0.6H85h0.6h0.6h0.6h0.6H88h0.6l0.6,0.1l0.6,0.1l0.6,0.1L91,199l0.6,0.1l0.6,0.1l0.6,0.1
1185
+ l0.6,0.1l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.5,0.3l0.5,0.3
1186
+ l0.5,0.3l0.5,0.3l0.5,0.3l0.5,0.3l0.4,0.3l0.4,0.3l0.8,0.7l0.8,0.6l0.8,0.6l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.2l0.4,0.2l0.4,0.2
1187
+ l0.4,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1h0.2l0.2,0.1
1188
+ l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.6,0.2l0.6,0.3l0.7,0.3l0.7,0.3l0.7,0.3l1.4,0.6l0.7,0.3l0.7,0.3l0.7,0.3
1189
+ l0.7,0.3l0.7,0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1h0.3h0.3h0.2h0.2h0.2h0.2
1190
+ h0.2h0.2h0.2h0.1h0.1h0.1l0,0h0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0v-0.1v-0.1v-0.1V213v-0.1v-0.1
1191
+ l0,0l0,0l0,0l0,0v-0.1v-0.1v-0.1v-0.1v-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.3
1192
+ l-0.2-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2
1193
+ l-0.3-0.2l-0.2-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2
1194
+ l-0.5-0.2l-0.5-0.2l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.4l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2
1195
+ l-0.6-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.2-0.2l-0.9-0.7l-0.9-0.7l-0.8-0.6
1196
+ l-0.8-0.6l-0.7-0.6l-0.7-0.6l-0.7-0.6l-0.7-0.6l-1.2-1.1l-1.2-1l-0.6-0.5l-0.6-0.5l-0.5-0.5l-0.6-0.4l-0.5-0.4l-0.6-0.4
1197
+ l-0.6-0.4l-0.6-0.4l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.4-0.2
1198
+ l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2H80
1199
+ h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.2L80.5,184.6z"
1200
+ />
1201
+ </g>
1202
+ <g transform="matrix(1,0,0,1,400.214,44.558)">
1203
+ <path
1204
+ d="M332.3,146.1h0.2h0.2h0.2h0.2h0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0,0l0,0l0.6,0.1
1205
+ l0.6,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.3,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
1206
+ l0.2,0.1l0.4,0.3l0.4,0.3l0.4,0.3l0.3,0.3l0.3,0.3l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4
1207
+ l0.2,0.4l0.2,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.2,0.8l0.2,0.8l0.2,0.8l0.2,0.8l0.2,0.8l0.2,0.8l0.2,0.8
1208
+ l0.2,0.8l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.3,0.5
1209
+ l0.3,0.7l0.4,0.7l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.1,0.5l0.1,0.5l0.1,0.3v0.3v0.3
1210
+ v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3L350,181l-0.2,0.3l-0.2,0.3
1211
+ l-0.3,0.3l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.3h-0.2
1212
+ h-0.3h-0.3h-0.2H345h-0.2h-0.2h-0.2h-0.2H344h-0.2l-0.2-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2
1213
+ l-0.4-0.2l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.4-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3
1214
+ l-0.3-0.3l-0.3-0.3l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.5-0.7
1215
+ l-0.5-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.3-0.7l-0.3-0.6l-0.3-0.6l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3
1216
+ l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4v-0.4V163v-0.4v-0.4v-0.4v-0.4V161v-0.9v-0.9v-0.8v-1.6v-1.6
1217
+ v-0.7v-0.8v-0.2v-0.1v-0.1v-0.2l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.2l0.1-0.2l0.2-0.4l0.2-0.4l0.1-0.2l0,0v-0.1v-0.1
1218
+ l-0.1-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1
1219
+ l0.1-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1h0.2h0.2h0.2L332.3,146.1z M334.7,152.9l-0.1,0.3l-0.1,0.3v0.1v0.1
1220
+ l0,0v0.6v0.8l-0.1,1.6v1.6v0.8v0.8v0.8v0.4v0.4v0.4v0.4v0.4v0.3v0.3v0.3v0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.1v0.1
1221
+ l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.2,0.5l0.2,0.5l0.3,0.5l0.3,0.6l0.3,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.2,0.3l0.2,0.3l0.2,0.3
1222
+ l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.3,0.3l0.2,0.3l0.2,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.2l0.2,0.2l0.2,0.2
1223
+ l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1h0.2h0.2l0,0h0.1h0.1h0.1
1224
+ h0.1h0.1h0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1V177l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3
1225
+ l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.3l-0.3-0.7l-0.3-0.6l-0.3-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5
1226
+ l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.2-0.9l-0.2-0.9l-0.2-0.9
1227
+ l-0.2-0.9l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.7l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3
1228
+ l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
1229
+ l-0.2-0.1h-0.1h-0.1l-0.1-0.1h-0.1l-0.1-0.1h-0.1h-0.1H336h-0.1h-0.1h-0.1h-0.1l-0.3-0.1l-0.3-0.1h-0.1L334.7,152.9z"
1230
+ />
1231
+ </g>
1232
+ </g>
1233
+ </g>
1234
+ </g>
1235
+ <g>
1236
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1237
+ <path
1238
+ fill="#B5A47D"
1239
+ d="M-204.2,1379.2L-204.2,1379.2l-0.4-0.9l-0.3-0.8l-0.3-0.9l-0.4-0.9l-0.4-0.9l-0.7-1.9l-0.6-1.7l-0.3-0.8
1240
+ l-0.2-0.7l-0.2-0.7l-0.2-0.8l-0.3-1.2l-0.2-1l-0.2-0.9l-0.2-0.9l-0.2-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.9l-0.2-1.6
1241
+ l-0.2-1.6l-0.2-1.5l-0.2-1.5l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6
1242
+ l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.2-0.6l-0.5-1.6l-0.5-1.7l-0.5-1.7l-0.5-1.7l-0.5-1.7l-0.5-1.8l-0.5-1.8l-0.4-1.8l-0.4-1.8
1243
+ l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.3-1.8l-0.3-1.8l-0.3-1.8
1244
+ l-0.3-1.8l-0.3-1.8l-0.3-1.8l-0.3-1.8l-0.3-1.8l-0.3-1.8l-0.3-1.8l-0.2-1.8l-0.2-1.8l-0.2-1.8l-0.1-1.2l-0.2-1.2l-0.2-1.2
1245
+ l-0.2-1.2l-0.2-1.2l-0.2-1.2l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5
1246
+ l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.4l-0.1-0.3l-0.5-0.3l-0.6-0.4l-0.4-0.3l-0.4-0.4l-0.6-0.5l-0.4-0.4l-0.8-0.8l-0.1-0.1l-0.8-1
1247
+ l0,0l-0.6-1l0,0l-0.4-0.7l-0.3-0.8l0,0l-0.4-1.2l-0.2-1.2l0,0l-0.1-1.4v-1.4l0,0l0.2-1.2l0.3-1.2l0.4-1.1l0,0l0.3-0.7l-0.1-0.2
1248
+ l-0.3-0.7l-0.3-0.7l-0.2-0.7l-0.2-0.7l-0.1-0.3h-0.2l-0.5-0.1l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2
1249
+ l-0.5-0.2l-0.5-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.3-0.3
1250
+ l-0.3-0.3l-0.3-0.3l-0.3-0.4l-0.6-0.6l-0.6-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7
1251
+ l-0.4-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.1-0.3l-0.1-0.1l-0.4-0.4l-0.4-0.4l-0.3-0.4l-0.3-0.4l-0.5-0.7
1252
+ l-0.5-0.7l-0.4-0.7l-0.4-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.5l-0.2-0.5l-0.2-0.5l-0.4-0.9l-0.3-0.8l-0.3-0.6l-0.2-0.4l-0.1-0.2
1253
+ l-0.8-1.1l-0.5-0.7l-0.5-0.7l-0.5-0.8l-0.6-0.9l-0.6-0.9l-0.6-1l-0.6-1l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.6l-0.3-0.6
1254
+ l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.2-0.7l-0.2-0.7l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.1-0.8
1255
+ l-0.1-0.9l-0.1-0.8v-0.5v-0.5v-0.5v-0.5v-0.5v-0.5v-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.2-0.6l0.2-0.5
1256
+ l0.2-0.6l0.2-0.6l0.3-0.6l0.3-0.5l0.3-0.5l0.3-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.4l0.4-0.4l0.5-0.4l0.5-0.4
1257
+ l0.5-0.4l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.6-0.2l0.7-0.2l0.8-0.2l0.8-0.2
1258
+ l0.8-0.1l0.9-0.1l0.8-0.1h0.8h0.9l0.9,0.1h0.4l0.1-0.2l0.4-0.6l0.4-0.6l0.5-0.6l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.4l0.5-0.4l0.5-0.4
1259
+ l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.5-0.2l0.8-0.3l0.8-0.3l0.8-0.2l0.7-0.2l0.7-0.2l0.7-0.1
1260
+ l0.7-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.7-0.1l0.5-0.5l0.5-0.5l0.5-0.4l0.5-0.4l0.5-0.3l0.5-0.3l0.5-0.3l0.4-0.3l0.5-0.3l0.8-0.4
1261
+ l0.8-0.4l0.8-0.3l0.8-0.3l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.6-0.1l0.7-0.1l0.6-0.1h0.6h0.6h0.6
1262
+ h0.6h0.7h1.2h1.2h1.2h1.2h1.1l1.1,0.1l1.1,0.1l1,0.1l1.9,0.1l1.7,0.1l1.3,0.1h0.5h0.3h0.1l3-0.1l3.2-0.1l3.2-0.1l3.2-0.1l3.2-0.1
1263
+ l3.2-0.1l3.6-0.2l0.6-0.5l1.2-0.8l1.3-0.6l1.3-0.4l0,0l1.1-0.2l1.2-0.1h1.2h0.1l0.8,0.1l0.8,0.1l0.5,0.1l0.8,0.2l0.6,0.2l0.7,0.2
1264
+ l0.5,0.2l0.4,0.2l0.4,0.2h0.1h0.3h0.7h0.8h0.9h1h0.6h0.5h0.6h0.6h0.6h0.6h0.6h0.6h0.6l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1
1265
+ l0.6-0.1l0.6-0.1l1.2-0.2l1.2-0.2l1.3-0.2l2.7-0.5l1.4-0.2l1.5-0.2l1.5-0.2l0.8-0.1l0.8-0.1l2.5-0.3l2.5-0.3l2.5-0.3l2.5-0.3
1266
+ l2.4-0.2l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1
1267
+ l1.2-0.1h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1
1268
+ l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.2l1.2,0.2l1.3,0.2
1269
+ l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l1.3,0.3l1.3,0.3l1.3,0.3l1.3,0.3l1.2,0.3l1.2,0.3l2.4,0.6h0.1
1270
+ h0.7l1.2-0.1l1.2-0.1h1.2h1.2h0.3l0.7-0.6l1.1-0.7l1.2-0.6l1.2-0.5l1.3-0.3l1.3-0.2l0,0h1.2l1.2,0.1l1.2,0.2l0,0l1.1,0.3l1,0.4
1271
+ l0.4,0.2l0.9,0.4l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3
1272
+ l0.8,0.3h0.6h0.4h0.4h0.4h0.3h0.2l0.3-0.2l0.8-0.5l0.5-0.3l0.5-0.3l0.6-0.3l0.6-0.3l0.6-0.4l0.7-0.4l0.8-0.4l0.8-0.3l0.5-0.2
1273
+ l0.5-0.2l0.5-0.2l0.5-0.2l0.6-0.2l0.6-0.1l0.7-0.1l0.7-0.1l0.8-0.1h0.9h0.9l0.9,0.1l1,0.1l1.1,0.2l1,0.3l0.5,0.2l1,0.5l0.1,0.1
1274
+ l0.9,0.5l0.5,0.4l0.5,0.4l0.8,0.7l0.4,0.4l0.8,0.8l0.7,0.9l0.6,0.9l0.5,0.9l0.4,0.8l0.3,0.9l0.3,0.9l0.2,1l0.1,0.5l0.1,1.1v0.6
1275
+ v0.6l-0.1,0.8l0.3,0.3l0.5,0.4l0.5,0.5l0.4,0.5l0.5,0.5l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.7l0.3,0.7l0.3,0.6l0.3,0.7l0.1,0.3
1276
+ l0.9,0.5l0.1,0.1l1,0.7l0.1,0.1l0.9,0.8l0.1,0.1l0.9,1l0.1,0.1l0.7,1l0.1,0.1l0.6,1l0.1,0.1l0.5,1l0.3,0.6l0.3,1.1l0.2,1l0.1,1
1277
+ l0.1,0.9v0.8v0.8l-0.1,0.7l-0.1,0.7l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.5l-0.1,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.3,0.8
1278
+ l-0.3,0.8l-0.4,0.8l-0.3,0.7l-0.4,0.7l-0.3,0.7l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.6,1l-0.6,0.9l-0.5,0.7l-0.3,0.5l-0.1,0.1v0.1
1279
+ l-0.3,0.5l-0.3,0.6l-0.3,0.6l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.4,0.5l-0.7,1l-0.7,1l-0.7,1l-0.7,1l-0.7,0.9l-0.2,0.4
1280
+ l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.7l-0.4,0.7l-0.4,0.7l-0.4,0.7l-0.4,0.7l-0.5,0.7l-0.5,0.7
1281
+ l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7
1282
+ l-0.5,0.7l-0.4,0.5l0,0l0,0l-0.1,0.1l-0.1,0.1l-0.3,0.5l-0.4,0.6l-0.5,0.7l-0.5,0.8l-0.6,0.9l-0.3,0.5l-0.4,0.5l-0.4,0.5
1283
+ l-0.4,0.5l-0.5,0.6l-0.5,0.6l-0.6,0.6l-0.4,0.4l-0.4,0.4l-0.4,0.3v1.2l-0.1,1.4l-0.3,1.4l-0.4,1.3l-0.2,0.5l-0.5,1.1l-0.3,0.7
1284
+ l-0.3,0.8l-0.3,0.8l-0.2,0.5l-0.2,0.5l-0.4,0.7l-0.4,0.7l-0.4,0.7l-0.4,0.6l-0.4,0.6l-0.4,0.6l-0.4,0.6l-0.4,0.5l-0.4,0.5
1285
+ l-0.4,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.4l-0.5,0.5
1286
+ l-0.9,0.8l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.4,0.3v0.4l-0.1,0.8l-0.1,0.8l-0.1,0.9l-0.2,0.9l-0.2,0.9
1287
+ l-0.2,0.8l-0.2,0.5l-0.1,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.3,0.5l-0.3,0.5l-0.2,0.4l-0.1,0.2l0,0l-0.2,0.4
1288
+ l-0.3,0.5l-0.3,0.6l-0.7,1.4l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.4,0.6l-0.5,0.7l-0.7,0.8l-0.6,0.6
1289
+ l-0.3,0.3l-0.8,0.7l0,0l-0.6,0.4l-0.2,0.5l-1,2.3l-1,2.3l-2,4.6l-3.2,7.4l-3.2,7.4l-3.2,7.4l-3.2,7.4l-3.2,7.5l-3.2,7.4l-3.2,7.5
1290
+ l-3.2,7.5l-3.1,7.5l-3.1,7.5l-3.1,7.5l-3.1,7.5l-6.3,15l-6.3,15l-2.4,5.7l-2.4,5.7l-2.4,5.7l-1.2,2.9l-1.2,2.9l-1.2,2.9l-1.2,2.9
1291
+ l-1.1,2.9l-1.1,2.9l-1.1,2.8l-1.1,2.9l-1.1,2.9l-1.1,2.9l-0.5,1.3l-0.5,1.2l-0.4,1.1l-0.4,1l-0.4,0.9l-0.3,0.8l-0.6,1.4l-0.6,1.4
1292
+ l-0.7,1.5l-0.4,0.9l-0.4,1l-0.5,1.1l-0.5,1.3l-0.2,0.6l-0.2,0.6l-0.3,0.7l-0.3,0.7l-0.4,0.8l-0.4,0.8l-0.3,0.5l-0.3,0.5l-0.3,0.5
1293
+ l-0.3,0.5l-0.3,0.5l-0.4,0.6l-0.4,0.6l-0.5,0.6l-0.6,0.7l-0.7,0.7l-0.5,0.5l-0.5,0.4l-0.6,0.4l-0.7,0.5l-0.8,0.5l-1,0.5l-0.6,0.2
1294
+ l-1.1,0.4h-0.1l-1.2,0.3h-0.1l-0.7,0.1h-0.4l-0.1,0.4l-0.3,0.9l-0.2,0.5l-0.2,0.5l-0.2,0.6l-0.2,0.6l-0.3,0.7l-0.4,0.8l-0.5,0.8
1295
+ l-0.4,0.6l-0.5,0.6l-0.6,0.7l-0.3,0.4l-0.8,0.8h-0.1l-1,0.8h-0.1l-0.7,0.4l-0.7,0.4h-0.1l-0.9,0.4l-0.4,0.1l-0.8,2l-0.8,2.1
1296
+ l-0.8,2.1l-0.8,2.1l-0.8,2.1l-0.8,2.1l-0.7,2.1l-0.7,2.1l-0.7,2.1l-0.7,2.1l-0.3,1l-0.3,0.8l0,0v0.2v0.2l-0.1,0.6l-0.2,1.6
1297
+ l-0.1,0.9l-0.1,0.5l-0.1,0.5l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.2,0.7l-0.2,0.8l-0.3,0.8l-0.2,0.6l-0.3,0.6l-0.3,0.6l-0.4,0.7
1298
+ l-0.5,0.8l-0.6,0.8l-0.4,0.4l-0.9,0.9l-0.1,0.1l-1.1,0.8h-0.1l-0.7,0.4l-0.7,0.4h-0.1l-0.8,0.3l-0.6,0.2v0.1l-0.1,0.9v0.1v0.3
1299
+ v0.8v1l-0.1,2.6v1.5l-0.1,1.5v0.8v0.8v0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.5l-0.1,0.5
1300
+ l-0.1,0.5l-0.1,0.5l-0.2,0.5l-0.2,0.6l-0.3,0.6l-0.3,0.7l-0.4,0.8l-0.5,0.9l-0.4,0.5l-0.7,0.9l-0.1,0.1l-0.8,0.8l-0.9,0.7l0,0
1301
+ l-0.9,0.6l-1,0.5l-1,0.4l0,0l-1.1,0.4l-1.1,0.2l-1.1,0.1h-1.1l0,0l-1.3-0.1l-1.3-0.2l-1.2-0.4l0,0l-1.2-0.5l-1.1-0.6l-1.1-0.8
1302
+ l0,0l-0.8-0.7l-0.7-0.8l-0.6-0.8l0,0l-0.5-0.7l-0.4-0.7l-0.3-0.5l-0.3-0.8l-0.2-0.6l-0.2-0.5l-0.2-0.7l-0.2-0.7l-0.1-0.6
1303
+ l-0.1-0.6l-0.1-0.6l-0.1-0.7l-0.2-1.3l-0.2-1.4l-0.2-1.4l-0.2-1.4l-0.2-1.4l-0.4-2.5l-0.2-1.6l-0.1-0.3l-0.2-0.6l-0.2-0.6
1304
+ l-0.2-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.2-1.1l-0.2-1.1l-0.2-1.1l-0.2-1.1l-0.2-1.1l-0.1-1.1l-0.1-1.1
1305
+ l-0.1-1.1l-0.1-1.1l-0.1-1.1l-0.1-1.1l-0.1-1.1l-0.1-1.1l-0.1-2l-0.3-3.9l-0.1-1.9l-0.1-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.8l-0.1-0.8
1306
+ l-0.1-0.8l-0.4-2.8l-0.4-2.8l-0.4-2.8l-0.4-2.8l-0.4-2.8l-0.4-2.8l-0.4-2.9l-0.4-2.8l-0.4-2.9l-0.4-2.8l-0.9-5.7l-0.9-5.7
1307
+ l-0.9-5.7l-1.8-11.5l-0.9-5.8l-0.9-5.8l-0.4-2.9l-0.4-2.9l-0.4-2.9l-0.4-2.9l-0.4-2.9l-0.4-2.9l-0.4-2.9l-0.4-2.9l-0.3-2.3
1308
+ l-0.3-2.2l-0.6-4.5l-0.3-2.2l-0.2-1.3l-0.2-0.4l-0.3-1.3l-0.2-1.3l-0.6-3.2l-0.7-3.9l-0.3-1.9l-0.3-1.6l-0.2-0.8l-0.2-0.8
1309
+ l-0.2-0.9l-0.2-0.9l-0.2-1l-0.2-1.1l-0.2-1.1l-0.1-0.6l-0.1-0.6l-0.2-1.1l-0.2-1.1l-0.1-1l-0.1-1l-0.1-0.9l-0.1-0.9l-0.1-0.8
1310
+ v-0.1l-0.3-1.1l-0.1-0.2l-0.1-0.3l-0.3-1l-0.8-2.2l-0.3-1.1l-0.2-0.6l-0.2-0.7l-0.2-0.7l-0.1-0.4l-0.1-1.2v-1.2l0,0l0.1-1.4
1311
+ l0.3-1.3l0.4-1.3l0.6-1.2L-204.2,1379.2z M-182.3,1308.4l0.3,1.6h0.1l0,0v-0.1l0.2-0.6l0.1-0.4l-0.1-0.2l-0.7-0.9L-182.3,1308.4z
1312
+ "
1313
+ />
1314
+ </g>
1315
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1316
+ <path
1317
+ fill="#836F40"
1318
+ d="M-165.2,1548.9l0.5-0.9l0.3-0.5l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
1319
+ l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
1320
+ l0.1-0.1l0.1-0.1l0.1-0.1l0.4-0.3l0.8-0.6l0.5-0.3l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1l0.1-0.1l0.1-0.1
1321
+ l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.2
1322
+ h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.2h0.2h0.1h0.2h0.1h0.1h0.1
1323
+ l0.2,0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.5,0.2l0.9,0.4l0.4,0.2l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
1324
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
1325
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
1326
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
1327
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1v0.2v0.1v0.1v0.2v0.1v0.2v0.1v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2
1328
+ v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.1v0.2v0.1v0.2v0.1v0.1v0.1l-0.1,0.1l-0.1,0.1
1329
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
1330
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1v0.1v0.2v0.2v0.2v0.2v0.2v0.2v0.1v0.2v0.2v0.1v0.1v0.2v0.1v0.1l-0.1,0.1l-0.1,0.1
1331
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
1332
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
1333
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
1334
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
1335
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
1336
+ l-0.1,0.1l-0.1,0.1h-0.1h-0.1h-0.1h-0.1h-0.2h-0.1h-0.2h-0.2h-0.1h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2
1337
+ h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.1h-0.2h-0.2
1338
+ h-0.1h-0.1h-0.2h-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
1339
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
1340
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
1341
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
1342
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
1343
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1v-0.1v-0.1v-0.1v-0.2v-0.1v-0.2v-0.2v-0.1v-0.2v-0.2v-0.2v-0.2v-0.2
1344
+ v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.5v-0.6v-0.7l0.1-0.7l0.1-0.8l0.1-0.8l0.1-0.5l0.1-0.5l0.1-0.5
1345
+ l0.1-0.5l0.1-0.5l0.2-0.6l0.2-0.6l0.3-0.7L-165.2,1548.9z M-158.6,1564.1L-158.6,1564.1L-158.6,1564.1L-158.6,1564.1l-0.2-0.1
1346
+ l-0.1-0.1L-158.6,1564.1z"
1347
+ />
1348
+ </g>
1349
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1350
+ <path
1351
+ fill="#836F40"
1352
+ d="M-49.4,1288.3l0.6-1.3l0.6-1.3l0.6-1.2l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6
1353
+ l0.3-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.5-0.6l0.2-0.2l0.4-0.6l0.5-0.8l0.5-1l0.6-1l0.3-0.6l0.3-0.6l0.4-0.6l0.4-0.6l0.4-0.6
1354
+ l0.4-0.6l0.5-0.6l0.5-0.7l0.5-0.6l0.3-0.4l0.3-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.5-0.4l0.5-0.4l0.6-0.4l0.7-0.5l0.8-0.5l1-0.4
1355
+ l0.6-0.2l1.1-0.3h0.1l0.6-0.1l0.6-0.1h0.1l0.7-0.1h0.7h0.1h0.8l0.8,0.1h0.1l0.8,0.1l0.8,0.2h0.1l0.8,0.2l0.8,0.3h0.1l0.7,0.3
1356
+ l0.7,0.4l0.1,0.1l0.6,0.4l0.6,0.4l0.1,0.1l0.6,0.5l0.5,0.5l0.1,0.1l0.5,0.5l0.5,0.6l0.1,0.1l0.4,0.5l0.4,0.6l0.1,0.1l0.3,0.5
1357
+ l0.3,0.6l0.1,0.1l0.4,1l0.2,0.6l0.3,1.1l0.2,1l0.1,0.9l0.1,0.8v0.8v0.7v0.7l-0.1,0.6l-0.1,0.6l-0.1,0.5l-0.1,0.5l-0.1,0.5
1358
+ l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.2,0.8l-0.3,0.8l-0.3,0.8l-0.3,0.7l-0.3,0.7l-0.3,0.7l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6
1359
+ l-0.3,0.5l-0.5,0.9l-0.4,0.8l-0.3,0.6l-0.1,0.2l-0.3,0.5l-0.4,0.9l-0.9,1.6l-0.9,1.6l-0.8,1.6l-1.7,3.1l-0.8,1.5l-0.8,1.5
1360
+ l-0.7,1.4l-0.7,1.4l-1.4,2.8l-1.4,2.9l-1.5,2.9l-0.7,1.5l-0.8,1.5l-0.8,1.5l-0.8,1.5l-0.8,1.5l-0.8,1.5l-0.8,1.5l-0.8,1.5
1361
+ l-0.9,1.5l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.5,0.8l-0.5,0.8l-0.3,0.5l-0.1,0.2l-0.4,0.8l-0.3,0.7l-0.1,0.3l-0.1,0.6l-0.2,0.6
1362
+ l-0.2,0.6l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.4l-0.2,0.5l-0.4,0.7l-0.4,0.7l-0.4,0.7l-0.4,0.7l-0.4,0.6l0,0l-0.6,1.6l-0.8,2.1
1363
+ l-0.8,2.1l-0.8,2.1l-0.8,2.1l-0.8,2.1l-0.8,2.1l-0.8,2.1l-0.8,2.1l-0.9,2l-0.9,2l-0.9,2l-0.7,1.7v0.1l-0.1,0.3l-0.1,0.5l-0.2,0.6
1364
+ l-0.2,0.7l-0.1,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.6l-0.3,0.6l-0.3,0.7l-0.4,0.7l-0.5,0.8l-0.6,0.8l-0.7,0.9l-0.7,0.8l-0.6,0.5
1365
+ l-0.5,0.4l-0.5,0.4l-0.6,0.4l-0.7,0.4l-0.7,0.3l-0.7,0.3l0,0l-0.2,0.8l-0.2,0.8l-0.2,0.8l-0.2,0.7l-0.2,0.7l-0.2,0.7l-0.3,0.7
1366
+ l-0.3,0.7l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.5,1.1l-0.4,1l-0.4,0.9l-0.3,0.7l-0.3,0.7l-0.6,1.3l-0.7,1.4l-0.7,1.4l-0.8,1.5l-0.7,1.4
1367
+ l0,0l-0.1,0.7l-0.1,0.7l-0.1,0.6l-0.1,0.6l-0.1,0.5l-0.2,0.5l-0.2,0.5l-0.3,0.8l-0.3,0.8l-0.3,0.7l-0.3,0.7l-0.3,0.7l-0.3,0.6
1368
+ l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.6,1.1l-1.1,1.8l-0.4,0.7l-0.1,0.2l-0.1,0.3l-1.1,2.1l-1.2,2.1l-1.2,2.1l-1.2,2.1
1369
+ l-1.2,2.1l-1.2,2.1l-1.3,2.1l-1.3,2.1l-1.3,2.1l-1.3,2.1l-1.3,2.1l-1.3,2.1l-0.1,0.2l-0.5,1.1l-0.8,1.5l-0.7,1.5l-0.7,1.5
1370
+ l-0.7,1.5l-0.7,1.5l-0.7,1.5l-0.7,1.5l-0.7,1.5l-0.7,1.5l-0.7,1.5l-0.7,1.5l-0.7,1.5l-0.1,0.1v0.1v0.4l-0.1,0.7l-0.1,0.8
1371
+ l-0.2,1.2l-0.3,1.2l-0.4,1.1l-0.5,1l-0.6,2.4l-0.6,2.5l-0.6,2.5l-0.3,1.3l-0.3,1.3l-0.3,1.3l-0.4,1.3l-0.4,1.3l-0.4,1.3l-0.4,1.3
1372
+ l-0.4,1.3l-0.4,1.3l-0.2,0.7l-0.2,0.7l-0.2,0.7l-0.2,0.7l-0.2,0.7l-0.3,0.7l-0.3,0.7l-0.3,0.7l0,0v0.1v0.7v0.6v0.6l-0.1,0.6
1373
+ l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.2,0.8l-0.2,0.8l-0.3,0.8l-0.3,0.7l-0.3,0.7l-0.3,0.7l-0.3,0.6l-0.3,0.6
1374
+ l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.5l-0.3,0.5l-0.6,1l-0.6,1l-0.5,0.9l-0.9,1.5l-0.4,0.6l-0.3,0.5l-0.7,1.2l-0.7,1.1
1375
+ l-0.6,1l-0.6,0.9l-0.5,0.7l-0.3,0.8l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1l-0.5,1l-0.5,1
1376
+ l-0.5,1l-0.6,1l-0.5,1l-0.6,1l-0.6,1l-0.6,1l-0.6,1l-0.6,1l-0.6,1l-0.6,1l-1.2,1.9l-1.2,1.9l-2.3,3.7l-0.2,0.4l-0.3,0.5l-0.8,1.4
1377
+ l-0.5,0.8l-0.5,0.9l-0.4,1l-0.4,1l-0.4,1l-0.4,1l-0.4,1l-0.4,1l-0.3,1l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.4
1378
+ l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.3l-0.1,0.3v0.3v0.3v0.3v0.2v0.2v0.2v0.2v0.1v0.1l0,0v0.1l0.2,1.2
1379
+ l0.1,1.2v1.2l-0.2,1.2l-0.3,1.2l-0.4,1.1l-0.5,1.1l-0.6,1l-0.7,1l-0.8,0.9l-0.9,0.8l-1,0.7l-1,0.6l-1.1,0.5l-1.1,0.4l-1.2,0.3
1380
+ l-1.2,0.1h-1.2l-1.2-0.1l-1.2-0.2l-1.1-0.3l-1.1-0.5l-1.1-0.6l-1-0.7l-0.9-0.8l-0.8-0.9l-0.7-0.9l-0.6-1l-0.5-1.1l-0.4-1.1
1381
+ l-0.3-1.2l-0.1-0.6l-0.1-0.9l-0.1-0.9l-0.1-0.8l-0.1-0.8v-0.8v-0.8v-0.8v-0.8l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7
1382
+ l0.1-0.7l0.1-0.7l0.1-0.7l0.2-0.7l-0.1-0.2l-0.4-1l-0.3-1l-0.2-1l-0.1-1.1l0,0v-1l0.1-1l0.2-1l0.2-1l0,0l0.3-0.8l0.3-0.8l0,0
1383
+ l0.3-0.6l0.4-0.6l0.3-0.5l0.5-0.7l0.4-0.5l0.3-0.4l0.5-0.6l0.4-0.5l0.2-0.2l2.2-3l0.1-0.1l0.3-0.7l0.3-0.8l0.3-0.8l0.7-1.8
1384
+ l0.7-1.8l0.6-1.5l0.6-1.6l1.5-3.9l1.5-3.9l3-7.7l3-7.7l1.5-3.8l1.5-3.8l1-2.6l1-2.6l1.1-2.6l1.1-2.6l1.1-2.6l1.1-2.6l1.1-2.6
1385
+ l1.1-2.6l1.1-2.6l1.1-2.6l1.1-2.6l1.1-2.6l1.1-2.6l1.2-2.6l1.2-2.6l1.2-2.6l1.2-2.6l1.2-2.6l0.2-0.4v-0.2l0.1-0.5l0.1-0.5
1386
+ l0.1-0.5l0.1-0.5l0.2-0.6l0.3-0.8l0.4-0.8l0.4-0.8l0.4-0.7l0.4-0.7l0.4-0.6l0.4-0.6l0.3-0.4l0.1-0.3l0.3-0.8l0.3-0.8l0.3-0.8
1387
+ l0.3-0.8l0.4-1.3h-0.1l-1-0.1h-0.1l-0.8-0.2l-0.8-0.2l-0.8-0.3h-0.1l-0.9-0.4l-0.9-0.5l-0.8-0.5l0,0l-0.8-0.6l-0.7-0.7l-0.7-0.8
1388
+ l0,0l-0.5-0.7l-0.5-0.8l-0.4-0.8v-0.1l-0.4-1l-0.3-1.1v-0.1l-0.2-0.9l-0.1-0.9v-0.1l-0.1-0.7v-0.7v-0.1l0.1-1.1v-0.5l0.1-0.8
1389
+ l0.2-0.7l0.2-0.7l0.3-0.9l0.3-0.8l0.3-0.7l0.3-0.6l0.3-0.6l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.5-0.9l0.5-0.9l0.5-0.8l0.9-1.5
1390
+ l0.3-0.5l0.2-0.4l0.6-1.1l0.6-1.1l0.6-1l0.5-0.9l0.5-0.8l0.5-0.7l0.8-1.2l0.7-1.1l0.3-0.5l0.4-0.6l0.4-0.7l0.5-0.8l0.6-1l0.6-1.1
1391
+ l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l0.9-1.9l0.9-2l0.9-2l0.9-2l0.9-2l0.7-1.5l0.5-1.3l0.5-1.3l0.5-1.3
1392
+ l0.5-1.2l0.9-2.3l0.4-1.1l0.4-1l0.4-0.9l0.3-0.9l0.3-0.8l0.1-0.3l0.1-0.4v-0.1l0.5-1.1l0.6-1.1l0.7-1l0.8-0.9l0.9-0.9l0.9-0.8
1393
+ l1-0.7l1.1-0.6l1.1-0.4l1.2-0.3l1.2-0.2l1.2-0.1l1.2,0.1l1.2,0.2l1.2,0.3l1.1,0.4l0.6,0.3l0.7-1.4l1.4-2.7l1.4-2.7l1.3-2.7
1394
+ l1.3-2.7l1.3-2.7l0.6-1.3l0.7-1.4l0.3-0.7l0.4-0.7l0.4-0.6l0.5-0.8l0.4-0.5l0.7-0.8l0.8-0.7l0,0l0.7-0.6l0.2-0.1l0.5-1.1l0.6-1.2
1395
+ l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.6-1.1l0.6-1.1l1.2-1.9l0.5-0.9l0.4-0.8l0,0l0.1-0.1l0.1-0.3l0.2-0.4l0.2-0.5l0.3-0.6l0.3-0.7
1396
+ l0.4-0.7l0.3-0.5l0.3-0.4l0.3-0.5l0.4-0.5l0.5-0.6l0.6-0.7l0.4-0.4l0.8-0.8l0.1-0.1l0.9-0.7l0.4-0.3l0.8-0.5l0.5-0.2l0.6-0.3l0,0
1397
+ l0.8-2.2l1.1-2.8l0.5-1.4l0.5-1.4l0.5-1.4l0.6-1.4l0.6-1.4l0.6-1.4L-49.4,1288.3z"
1398
+ />
1399
+ </g>
1400
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1401
+ <path
1402
+ fill="#836F40"
1403
+ d="M-235.9,1180.2l0.5-0.9l0.5-0.8l0.6-0.8l0.7-0.7l0.7-0.7l0.8-0.6l0.8-0.5l0.9-0.5l0.9-0.4l0.9-0.3l1-0.2
1404
+ l1-0.2l1-0.1h0.1h0.5h0.3h0.1l0,0l0.4-0.3l0.4-0.2l0.5-0.3l0.5-0.2l0.5-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.7-0.2l0.7-0.2l0.7-0.1
1405
+ l0.7-0.1l0.7-0.1h0.7h0.7l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.6,0.2l0.6,0.2l0.6,0.2l0.8,0.4l0.8,0.4l0.4,0.2l1.1-0.1l1.2-0.1
1406
+ l1.2-0.1l1.2-0.1l1.2-0.1l2.5-0.2l2.5-0.2l2.5-0.3l2.5-0.3l2.6-0.3l2.6-0.3l2.6-0.3l2.6-0.3l2.6-0.3l2.6-0.3l2.6-0.3l5.2-0.7
1407
+ l5.2-0.7l5.2-0.7l2.6-0.3l2.6-0.3l2.6-0.3l2.6-0.3l2.6-0.3l2.6-0.3l2-0.2l2-0.2l2-0.2l2-0.2l2-0.2l2-0.2l2-0.2l2-0.1l2-0.1l2-0.1
1408
+ l2-0.1l2-0.1l2-0.1l2-0.1l2-0.1l2-0.1l2-0.1l2-0.1l1.9-0.1l2-0.1l1.9-0.1l2-0.1h1.9h2h1.9h2l3.9-0.1h3.9h3.9h3.9h3.9h3.9h3.9h3.8
1409
+ h3.8l7.7,0.1l7.7,0.1l7.6,0.1h3.8h3.8h3.8h3.8h1l1,0.1l1,0.2l0.9,0.3l0.9,0.4l0.9,0.4l0.8,0.5l0.8,0.6l0.7,0.6l0.7,0.7l0.6,0.8
1410
+ l0.6,0.8l0.5,0.8l0.4,0.9l0.4-0.2l0.6-0.2l0.7-0.3l0.8-0.3l0.5-0.2l0.5-0.1l0.5-0.1l0.5-0.2l0.6-0.1l0.6-0.1l0.6-0.1l0.7-0.1
1411
+ l0.8-0.1l0.8-0.1h0.9h1l0.7,0.1l0.6,0.1l0.7,0.1l0.7,0.2l0.8,0.2l0.8,0.3l0.9,0.4l0.9,0.5l0.5,0.3l0.4,0.3l0.4,0.3l0.1,0.1
1412
+ l0.4,0.3l0.4,0.4l0.1,0.1l0.4,0.4l0.4,0.4l0.1,0.1l0.4,0.5l0.4,0.5l0.1,0.1l0.3,0.5l0.3,0.5v0.1l0.3,0.5l0.3,0.5v0.1l0.2,0.5
1413
+ l0.2,0.5l0.2,0.6l0.3,1.1l0.2,1.1l0.1,1v0.8v0.8v0.7l-0.1,0.7l-0.1,0.7l-0.1,0.8l-0.2,0.7l-0.2,0.7L14,1187l-0.3,0.7l-0.3,0.7
1414
+ l-0.3,0.7l-0.3,0.7l-0.4,0.7l-0.4,0.7l-0.4,0.6l-0.4,0.6l-0.5,0.6l-0.5,0.6l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.4l-0.5,0.4
1415
+ l-0.5,0.4l-0.5,0.4l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2
1416
+ l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.9,0.1l-1,0.1l-1,0.1h-1h-0.9
1417
+ h-0.9h-0.9h-0.9h-0.9h-0.9l-0.9-0.1l-0.9-0.1l-0.9,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.2l-1,0.2l-0.9,0.2
1418
+ l-0.9,0.2l-1.7,0.4l-1.6,0.3l-1.4,0.3l-1.1,0.2l-1.1,0.2l-0.7,0.1l-0.8,0.1l-0.6,0.1h-0.6h-0.6h-0.6l-1.3,0.1l-1.5,0.1l-1.6,0.1
1419
+ h-1.6H-45h-1.6h-1.5h-2.7h-0.3l-1.1,0.2l-1.4,0.3l-1.4,0.2l-1.4,0.2l-1.4,0.2l-0.9,0.1l-0.1,0.1h-0.1l-0.7,0.3l-0.7,0.3l-0.4,0.2
1420
+ l-0.8,0.3l-0.7,0.2l-0.6,0.1l-0.5,0.1l-0.5,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1h-0.9h-0.6h-0.6h-0.6h-0.6h-1h-1h-0.9h-0.8h-0.7h-0.3
1421
+ h-0.3h-1l-1,0.1l-1,0.1l-1,0.1l-2.2,0.2l-2.2,0.2l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.9,0.1l-1.9,0.2l-1.9,0.2l-1,0.1l-1,0.1l-1,0.1
1422
+ l-1.1,0.1l-1.1,0.1h-1.1h-1.1h-1.2h-0.8h-0.5l-0.8-0.1l-0.8-0.2l-0.8-0.2l0,0l-0.6-0.2h-1.1h-1.4l-1.4-0.1l-1.4-0.1l-1.4-0.1
1423
+ l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.2l-0.7-0.1l-0.8-0.1l-0.9-0.1l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2
1424
+ l-0.9-0.2l-0.9-0.2l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.7-0.3l-0.7-0.3
1425
+ l-0.7-0.3l-0.7-0.3l-0.6-0.3l-0.9,0.1l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.1l-1.4,0.1l-1.4,0.1
1426
+ l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.3
1427
+ l-1.5-0.1l-0.7-0.1l-0.8-0.1l-0.7-0.1l-0.7-0.1l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2
1428
+ l-0.4-0.2l-0.5-0.2l-0.2-0.1h-0.7l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.2l-1.3-0.2l-1.4-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2
1429
+ l-1.3-0.3l-1.3-0.3l-1.3-0.3l-1.3-0.3l-1.3-0.3l-1.3-0.3l-1.3-0.3l-1.3-0.4l-1.2-0.4l-1.2-0.4l-1.2-0.4l-0.4-0.1h-0.1l-1.3,0.1
1430
+ l-1.3,0.1h-1.3h-1.3h-1.3h-1.3h-1.3h-1.3h-0.4h-1l-1-0.1l-1-0.2l-0.9-0.3l-0.9-0.4l-0.9-0.4l-0.9-0.5l-0.8-0.6l-0.8-0.7l-0.7-0.7
1431
+ l-0.6-0.8l-0.6-0.8l-0.5-0.9l-0.4-0.9l-0.3-0.9l-0.3-1l-0.2-1l-0.1-1v-1l0.1-1l0.1-1l0.2-1l0.3-0.9L-235.9,1180.2z"
1432
+ />
1433
+ </g>
1434
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1435
+ <path
1436
+ d="M-214.1,1345.5L-214.1,1345.5l0.2-0.3l0.1-0.1l0.2-0.3l0.3-0.4l0.2-0.2l0.2-0.3l0.2-0.3l0.3-0.3l0.3-0.3
1437
+ l0.3-0.3l0.3-0.3l0.3-0.3l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.2l0.4-0.2l0.4-0.2l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3
1438
+ l0.5-0.3l0.5-0.3l0.5-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l1.3-1.1l1.4-1.1l2.8-2.3l1.4-1.2l1.4-1.2l1.4-1.2l0.7-0.6
1439
+ l0.7-0.6l0.7-0.6l0.7-0.6l0.8-0.6l0.7-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5
1440
+ l0.8-0.5l0.8-0.4l0.9-0.5l0.9-0.5l0.9-0.5l0.9-0.5l0.9-0.6l0.9-0.6l0.9-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6
1441
+ l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l1.5-1.4l1.5-1.4
1442
+ l1.5-1.4l1.5-1.4l1.5-1.4l3-2.9l3-2.9l1.5-1.5l1.5-1.5l1.5-1.4l1.6-1.4l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7
1443
+ l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.3-0.2l0.4-0.3l0.9-0.7l2.4-1.8l1.4-1.1l1.5-1.1l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6
1444
+ l0.8-0.6l0.8-0.6l0.7-0.6l0.7-0.6l0.7-0.6l0.6-0.6l0.6-0.5l0.5-0.5l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.1-0.2
1445
+ l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.3l0.1-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.4-0.1l0.4-0.1h0.4h0.4l0.4,0.1
1446
+ l0.4,0.1l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.3l0.2,0.3l0.2,0.3l0.1,0.3l0.1,0.4l0.1,0.4v0.4v0.2v0.3v0.3l-0.1,0.3l-0.1,0.4l-0.2,0.4
1447
+ l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.6,0.6
1448
+ l-0.7,0.6l-0.7,0.6l-0.7,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.6l-1.5,1.2l-1.4,1.1
1449
+ l-2.4,1.8l-0.9,0.7l-0.3,0.3l-0.3,0.2l-0.8,0.6l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7
1450
+ l-0.8,0.7l-0.8,0.7l-0.8,0.7l-1.5,1.4l-1.5,1.4l-1.5,1.4l-1.5,1.4l-3,2.9l-3,2.9l-1.5,1.5l-1.5,1.5l-1.5,1.4l-1.5,1.4l-1.6,1.4
1451
+ l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7
1452
+ l-0.9,0.7l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.5
1453
+ l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.5l-0.7,0.5l-0.7,0.5l-0.7,0.5l-0.7,0.5l-0.7,0.5l-0.7,0.5l-0.7,0.5l-0.7,0.5l-0.7,0.5
1454
+ l-0.7,0.6l-0.7,0.6l-0.7,0.6l-0.7,0.6l-0.7,0.6l-1.4,1.2l-1.4,1.2l-1.4,1.2l-2.8,2.3l-1.4,1.1l-1.4,1.1l-0.4,0.4l-0.5,0.4
1455
+ l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3
1456
+ l-0.4,0.2l0,0l0,0l0,0l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.2l-0.2,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.2,0.3l-0.1,0.1l0,0l-0.2,0.3
1457
+ l-0.3,0.3l0,0l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.4h-0.4l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.3-0.2l-0.3-0.3
1458
+ l-0.2-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.4v-0.4v-0.4l0.1-0.3l0.1-0.3L-214.1,1345.5z M-112,1262.3L-112,1262.3L-112,1262.3
1459
+ L-112,1262.3L-112,1262.3z M-209,1348.5L-209,1348.5L-209,1348.5L-209,1348.5L-209,1348.5z"
1460
+ />
1461
+ </g>
1462
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1463
+ <path
1464
+ d="M-199.4,1433l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.4l0.3-0.4l0.7-0.8l0.7-0.8l0.8-0.8
1465
+ l0.8-0.8l0.8-0.8l1.5-1.5l2.3-2.3l1-1l1-1l1-1l1-1l1-1l1-1l2-1.9l2-1.9l2-1.9l2-1.9l2-1.9l2-1.9l2-1.9l2-1.9l2-1.9l2-1.9l1-1l1-1
1466
+ l1-1l1-1l1-1l1-1l1.7-1.7l1.7-1.7l1.7-1.7l1.7-1.7l1.7-1.7l1.7-1.7l1.7-1.6l1.7-1.6l1.7-1.6l1.7-1.6l1.8-1.6l1.8-1.6l1.8-1.6
1467
+ l1.8-1.6l1.8-1.6l1.8-1.6l1.8-1.6l1.8-1.6l3.6-3.2l3.6-3.2l3.6-3.2l3.6-3.2l3.6-3.2l7.2-6.3l7.2-6.3l3.6-3.2l3.6-3.2l3.6-3.2
1468
+ l3.6-3.2l3.5-3.2l1.8-1.6l1.8-1.6l1.8-1.6l1.8-1.6l1.7-1.6l1.8-1.6l1.7-1.6l1.7-1.6l1.7-1.6l1.7-1.6l1.7-1.6l1.7-1.6l1.7-1.6
1469
+ l1.7-1.6l1.7-1.7l1.7-1.7l1.7-1.7l1.7-1.7l0.9-0.9l0.9-0.9l0.9-0.9l0.9-0.9l1-0.9l1-0.9l1-0.8l1-0.8l1-0.8l1-0.8l1-0.8l1-0.8
1470
+ l2-1.6l2-1.6l1.9-1.6l1.9-1.6l1-0.8l1-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.8-0.8
1471
+ l0.4-0.4l0.5-0.5l1.3-1.4l0.7-0.8l0.8-0.8l0.8-0.9l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4
1472
+ l0.4-0.3l0.4-0.3l0.4-0.3l0.2-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.2h0.3h0.1h0.5
1473
+ l0.5,0.1l0.5,0.2l0.4,0.3l0.4,0.3l0.3,0.4l0.2,0.5l0.2,0.5l0.1,0.5v0.5l-0.1,0.5l-0.2,0.5l-0.3,0.4l-0.3,0.4l-0.4,0.3l-0.5,0.2
1474
+ l-0.5,0.2h-0.3l0,0h-0.1h-0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.3,0.2l-0.3,0.2l-0.3,0.3l-0.3,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.4
1475
+ l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.8,0.8l-0.8,0.8l-0.7,0.8l-1.3,1.4l-0.5,0.6l-0.5,0.5l-0.9,0.9l-0.9,0.9
1476
+ l-0.9,0.9l-0.9,0.9l-0.9,0.9l-0.9,0.8l-1,0.8l-1,0.8l-1,0.8l-1,0.8l-1,0.8l-1,0.8l-1.9,1.6l-2,1.6l-1.9,1.6l-1.9,1.6l-1,0.8
1477
+ l-1,0.8l-0.9,0.8l-0.9,0.8l-0.9,0.8l-0.9,0.8l-0.9,0.8l-0.9,0.8l-0.9,0.8l-0.9,0.8l-0.9,0.9l-0.9,0.9l-1.7,1.7l-1.7,1.7l-1.7,1.7
1478
+ l-1.7,1.7l-1.7,1.7l-1.7,1.7l-1.7,1.7l-1.7,1.6l-1.7,1.6l-1.7,1.6l-1.7,1.6l-1.8,1.6l-1.8,1.6l-1.8,1.6l-1.8,1.6l-1.8,1.6
1479
+ l-1.8,1.6l-1.8,1.6l-3.6,3.2l-3.6,3.2l-3.6,3.2l-3.6,3.2l-3.6,3.2l-7.2,6.3l-7.2,6.3l-3.6,3.2l-3.6,3.2l-3.6,3.2l-3.6,3.2
1480
+ l-3.5,3.2l-1.8,1.6l-1.8,1.6l-1.8,1.6l-1.8,1.6l-1.8,1.6l-1.7,1.6l-1.7,1.6l-1.7,1.6l-1.7,1.6l-1.7,1.6l-1.7,1.6l-1.7,1.6
1481
+ l-1.7,1.6l-1.7,1.6l-1.7,1.7l-1.7,1.7l-1.7,1.7l-1.7,1.7l-1,1l-1,1l-1,1l-1,1l-1,1l-1,1l-2,1.9l-2,1.9l-2,1.9l-2,1.9l-2,1.9
1482
+ l-2,1.9l-2,1.9l-2,1.9l-2,1.9l-2,1.9l-1,1l-1,1l-1,1l-1,1l-1,1l-1,1l-2.3,2.3l-1.5,1.5l-0.8,0.8l-0.8,0.8l-0.7,0.8l-0.7,0.7
1483
+ l-0.6,0.7l-0.3,0.3l-0.3,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.1,0.1l0,0l-0.2,0.4l-0.3,0.4l-0.4,0.4l-0.4,0.3l-0.5,0.2l-0.5,0.1
1484
+ l-0.5,0.1h-0.5l-0.5-0.1l-0.5-0.2l-0.4-0.3l-0.4-0.4l-0.3-0.4l-0.2-0.5l-0.1-0.5v-0.5v-0.5v-0.1l0.1-0.4v-0.1l0.1-0.3l0.1-0.2
1485
+ L-199.4,1433z M-1.4,1257.3L-1.4,1257.3L-1.4,1257.3L-1.4,1257.3L-1.4,1257.3z M-194.1,1435.5L-194.1,1435.5l0.1-0.3v-0.1
1486
+ L-194.1,1435.5z"
1487
+ />
1488
+ </g>
1489
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1490
+ <path
1491
+ d="M-186.5,1518.6l0.2-0.4l0.2-0.5l0.3-0.5l0.3-0.6l0.4-0.6l0.4-0.6l0.4-0.7l0.4-0.6l0.4-0.6l0.2-0.3l0.2-0.3
1492
+ l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.2l0.3-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.4
1493
+ l0.2-0.4l0.4-0.8l0.4-0.8l0.4-0.8l0.4-0.8l0.4-0.8l0.2-0.4l0.2-0.4l0.2-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4
1494
+ l0.3-0.4l0.9-1.1l0.9-1.1l0.9-1.1l0.9-1.1l0.9-1.1l0.9-1.1l0.9-1.1l0.9-1.1l0.9-1.1l0.9-1.1l1.7-2.2l1.7-2.3l1.7-2.3l1.7-2.3
1495
+ l1.7-2.3l1.7-2.3l1.7-2.3l3.3-4.6l3.3-4.6l0.9-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3
1496
+ l1-1.3l2-2.5l2-2.5l2-2.5l2.1-2.5l2.1-2.5l2.1-2.5l2.1-2.5l2.1-2.4l2.1-2.4l2.1-2.4l2.1-2.4l2.1-2.4l2.2-2.4l2.2-2.4l2.2-2.4
1497
+ l2.2-2.4l2.2-2.3l2.2-2.3l2.2-2.3l2.2-2.3l2.2-2.3l2.2-2.3l2.2-2.3l2.2-2.3l2.2-2.3l0.3-0.3l0.3-0.3l0.6-0.7l0.7-0.7l0.7-0.8
1498
+ l0.7-0.8l0.7-0.8l0.7-0.9l0.7-0.9l1.5-1.8l1.6-1.9l1.6-1.9l0.8-1l0.8-1l0.8-1l0.8-1l0.8-0.9l0.8-0.9l0.8-0.9l0.4-0.4l0.4-0.4
1499
+ l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3
1500
+ l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.2l0.4-0.2l0.4-0.1h0.5h0.5l0.4,0.1l0.4,0.2l0.4,0.2l0.4,0.3l0.3,0.3l0.2,0.4l0.2,0.4
1501
+ l0.1,0.4v0.5v0.5l-0.1,0.4l-0.2,0.4l-0.2,0.4l-0.3,0.4l-0.4,0.3l-0.4,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2
1502
+ l-0.3,0.2l-0.3,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4
1503
+ l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.8,0.9l-0.8,0.9l-0.8,0.9l-0.8,0.9l-0.8,0.9l-0.8,0.9l-0.8,1l-1.6,1.9l-1.6,1.9l-1.5,1.9l-0.8,0.9
1504
+ l-0.7,0.9l-0.7,0.9l-0.7,0.8l-0.7,0.8l-0.7,0.8l-0.7,0.7l-0.3,0.4l-0.3,0.3l-2.2,2.2l-2.2,2.3l-2.2,2.3l-2.2,2.3l-2.2,2.3
1505
+ l-2.2,2.3l-2.2,2.3l-2.2,2.3l-2.2,2.3l-2.2,2.3l-2.2,2.4l-2.2,2.4l-2.1,2.4l-2.1,2.4l-2.1,2.4l-2.1,2.4l-2.1,2.4l-2.1,2.4
1506
+ l-2.1,2.4l-2.1,2.4l-2,2.5l-2,2.5l-2,2.5l-2,2.5l-2,2.5l-1,1.2l-1,1.3l-1,1.3l-1,1.3l-1,1.3l-1,1.3l-1,1.3l-1,1.3l-1,1.3l-1,1.3
1507
+ l-0.9,1.3l-0.9,1.3l-0.9,1.3l-0.9,1.3l-3.3,4.6l-3.3,4.6l-1.7,2.3l-1.7,2.3l-1.7,2.3l-1.7,2.3l-1.7,2.3l-1.7,2.3l-1.7,2.3
1508
+ l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.2,0.3l-0.2,0.3l-0.2,0.3
1509
+ l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.2,0.4
1510
+ l-0.2,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.4,0.4l-0.3,0.4l-0.1,0.1l-0.1,0.1
1511
+ l-0.1,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.2l-0.4,0.5l-0.4,0.5l-0.4,0.6l-0.3,0.6l-0.3,0.5l-0.3,0.5l-0.1,0.2l-0.1,0.2l-0.2,0.4
1512
+ l-0.2,0.4l-0.1,0.2l-0.2,0.2l-0.1,0.1l-0.2,0.2l-0.2,0.2l0,0l-0.3,0.2l-0.4,0.2l-0.4,0.1l-0.4,0.1h-0.4l0,0h-0.5l-0.5-0.1
1513
+ l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.3-0.4l-0.2-0.4l-0.2-0.4l0,0l-0.1-0.4v-0.4v-0.4l0.1-0.4l0,0l0.1-0.4l0.1-0.1L-186.5,1518.6z"
1514
+ />
1515
+ </g>
1516
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1517
+ <path
1518
+ d="M-226.1,1292.2l0.1-0.2l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1l0.9-0.6l0.9-0.6l1-0.7l1.1-0.7
1519
+ l1.1-0.8l1.2-0.8l1.2-0.9l1.3-0.9l2.7-1.9l2.8-2l2.9-2.1l1.5-1.1l1.5-1.1l1.5-1.1l1.5-1.1l1.6-1.1l1.6-1.1l1.6-1.1l1.6-1l1.6-1
1520
+ l1.6-1l1.5-1l1.5-1l0.8-0.5l0.8-0.5l0.8-0.4l0.8-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.7-0.3l0.2-0.1
1521
+ l0.2-0.1l0.2-0.1h0.2h0.2h0.2h0.2h0.2h0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.1,0.2l0.1,0.2
1522
+ l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2v0.2v0.2v0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2
1523
+ l-0.2,0.2l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.7,0.3l-0.7,0.3l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.4
1524
+ l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.4l-1.5,0.9l-1.5,1l-1.5,1l-1.5,1l-1.5,1l-1.5,1l-1.5,1.1l-1.5,1.1l-1.5,1.1l-1.5,1.1
1525
+ l-1.5,1.1l-1.5,1.1l-2.9,2.1l-2.8,2l-2.7,1.9l-1.3,0.9l-1.2,0.9l-1.2,0.8l-1.1,0.8l-1.1,0.7l-1,0.7l-1,0.6l-0.9,0.6l-0.2,0.1
1526
+ l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1
1527
+ l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2l0.1-0.2l0.1-0.2
1528
+ L-226.1,1292.2z"
1529
+ />
1530
+ </g>
1531
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1532
+ <path
1533
+ d="M-223.1,1301.8l0.2-0.4l0.3-0.3l0.3-0.3l0.4-0.2l0.4-0.2l0.4-0.1h0.4h0.4l0.4,0.1l0.4,0.1l0.5,0.1l0.5,0.1
1534
+ l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.3l1,0.5l1,0.6l1,0.6
1535
+ l1,0.6l1,0.6l1,0.6l1,0.6l1,0.6l1,0.7l1,0.7l1,0.7l1,0.7l2,1.3l1.9,1.3l1.8,1.2l1.7,1.1l0.8,0.5l0.8,0.5l0.8,0.5l0.7,0.4l1.9,1.1
1536
+ l1.9,1.1l1.8,1.1l1.8,1.1l1.8,1.1l1.8,1.1l1.8,1.1l1.8,1.1l1.7,1.1l1.7,1.1l1.7,1.1l1.7,1.1l1.7,1.1l1.7,1.1l1.7,1.1l1.7,1.1
1537
+ l1.7,1.2l1.7,1.2l1.7,1.2l1.7,1.2l1.7,1.2l1.6,1.2l1.7,1.2l1.6,1.2l1.7,1.3l1.7,1.3l1.7,1.3l1.7,1.3l1.7,1.3l1.7,1.4l1.7,1.4
1538
+ l1.7,1.4l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.7,0.5l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4
1539
+ l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l1.4,0.8l1.4,0.8l1.4,0.8l1.4,0.8l1.4,0.8l1.4,0.8l1.4,0.8l2.8,1.6l2.8,1.5l2.8,1.6l1.4,0.8
1540
+ l1.4,0.8l1.4,0.8l1.4,0.8l1.4,0.8l1.4,0.8l1.4,0.8l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.8,0.5l0.7,0.5l0.7,0.5
1541
+ l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l1.3,1l1.2,1l1.2,1l1.2,1l1.2,0.9l0.6,0.5l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4
1542
+ l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.4,0.2l0.3,0.3l0.3,0.3l0.2,0.4l0.2,0.4l0.1,0.4l0.1,0.4v0.4
1543
+ l-0.1,0.4l-0.1,0.4l-0.2,0.4l-0.3,0.4l-0.3,0.3l-0.4,0.3l-0.4,0.2l-0.4,0.1l-0.4,0.1h-0.4h-0.4l-0.4-0.1l-0.4-0.2l-0.8-0.4
1544
+ l-0.8-0.4l-0.8-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-1.2-1
1545
+ l-1.2-1l-1.2-1l-1.2-1l-1.2-1l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.6-0.4l-0.6-0.4
1546
+ l-0.6-0.4l-0.6-0.4l-0.6-0.4l-0.7-0.4l-1.3-0.8l-1.3-0.8l-1.3-0.8l-1.4-0.8l-1.4-0.8l-1.4-0.8l-1.4-0.8l-2.8-1.5l-2.8-1.6
1547
+ l-2.9-1.6l-1.4-0.8l-1.4-0.8l-1.4-0.8l-1.4-0.8l-1.4-0.8l-1.4-0.9l-1.4-0.9l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.5
1548
+ l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.6-0.5
1549
+ l-1.7-1.4l-1.7-1.4l-1.6-1.3l-1.6-1.3l-1.6-1.3l-1.6-1.3l-1.6-1.3l-1.6-1.2l-1.6-1.2l-1.6-1.2l-1.6-1.2l-1.6-1.2l-1.6-1.2
1550
+ l-1.6-1.2l-1.6-1.1l-1.6-1.1l-1.6-1.1l-1.6-1.1l-1.7-1.1l-1.7-1.1l-1.7-1.1l-1.7-1.1l-1.7-1.1l-1.7-1.1l-1.7-1.1l-1.7-1.1
1551
+ l-1.8-1.1l-1.8-1.1l-1.8-1.1l-1.8-1.1l-1.8-1.1l-1.9-1.1l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.9-0.6l-1.8-1.2l-1.8-1.2l-1.9-1.3l-2-1.3
1552
+ l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.5l-0.9-0.5l-0.9-0.5l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2
1553
+ l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.3-0.1l-0.4-0.1l-0.4-0.1
1554
+ l-0.4-0.2l-0.4-0.3l-0.3-0.3l-0.3-0.4l-0.2-0.4l-0.1-0.4l-0.1-0.4v-0.4v-0.4l0.1-0.4L-223.1,1301.8z"
1555
+ />
1556
+ </g>
1557
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1558
+ <path
1559
+ d="M-183.5,1261.5l0.2-0.3l0.3-0.3l0.3-0.3l0.4-0.2l0.4-0.2l0.4-0.1h0.1l0.2-0.1l0.3-0.1l0.4-0.1l0.3-0.1h0.2
1560
+ h0.3h0.1h0.3h0.1l0.4,0.1h0.1l0.2,0.1l0.2,0.1h0.1l0.3,0.1l0.5,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.4l0.6,0.4l0.6,0.4
1561
+ l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.5,0.4l0.5,0.4l1.3,1.1l1.3,1.1l1.3,1.1l1.3,1.1l2.6,2.3l2.6,2.2l1.3,1.1
1562
+ l1.3,1.1l1.3,1.1l1.3,1.1l1.3,1.1l0.6,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l2.2,1.6l2.2,1.6l2.2,1.6l2.2,1.6l2.2,1.7
1563
+ l2.2,1.7l4.3,3.3l4.3,3.3l4.3,3.3l4.3,3.4l4.3,3.3l4.3,3.3l4.3,3.3l2.2,1.7l2.2,1.6l2.2,1.6l2.2,1.6l2.2,1.6l2.2,1.6l2.2,1.6
1564
+ l2.2,1.6l2.2,1.6l2.2,1.6l2.2,1.6l2.2,1.6l0.3,0.2l0.4,0.3l0.7,0.6l0.8,0.6l0.8,0.6l0.8,0.7l0.8,0.7l1.7,1.5l1.8,1.5l0.9,0.8
1565
+ l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.3l0.5,0.3l0.5,0.3l0.5,0.3l0.5,0.3l0.5,0.3l0.5,0.3l0.5,0.3
1566
+ l0.5,0.3l0.5,0.3l0.5,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1h0.2
1567
+ h0.2h0.2h0.2h0.1h0.1h0.1h0.2h0.4l0.4,0.1l0.4,0.2l0.4,0.2l0.3,0.3l0.3,0.3l0.2,0.3l0.2,0.4l0.1,0.4l0.1,0.4v0.4v0.4l-0.1,0.4
1568
+ l-0.2,0.4l-0.2,0.4l-0.3,0.3l-0.3,0.3l-0.3,0.2l-0.4,0.2l-0.4,0.1l-0.4,0.1H-50h-0.2h-0.3h-0.3h-0.3h-0.3h-0.3H-52h-0.3l-0.5-0.1
1569
+ l-0.6-0.1l-0.6-0.1l-0.5-0.2l-0.6-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3
1570
+ l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-1.1-0.8l-1-0.8
1571
+ l-1-0.8l-1-0.8l-1-0.8l-1-0.8l-1-0.8l-1.8-1.6l-1.7-1.5l-0.8-0.7l-0.8-0.6l-0.7-0.6l-0.7-0.6l-0.7-0.5l-0.3-0.2l-0.3-0.2
1572
+ l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.7l-2.2-1.7l-4.3-3.3
1573
+ l-4.3-3.3l-4.3-3.3l-4.3-3.4l-4.3-3.3l-4.3-3.3l-4.3-3.3l-2.1-1.6l-2.2-1.6l-2.1-1.6l-2.1-1.6l-2.2-1.6l-2.2-1.6l-0.7-0.5
1574
+ l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-1.3-1.1l-1.3-1.1l-1.3-1.1l-1.3-1.1l-1.3-1.1l-2.6-2.2l-2.6-2.2l-1.3-1.1
1575
+ l-1.3-1.1l-1.3-1.1l-1.3-1.1l-0.4-0.3l-0.4-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.4l-0.6-0.4l-0.6-0.3l-0.6-0.3l-0.6-0.3
1576
+ l-0.6-0.3l-0.6-0.3l-0.5-0.3l-0.4-0.2l-0.2,0.1l-0.3,0.1l0,0h-0.2h-0.2l0,0h-0.3h-0.3l0,0l-0.4-0.1l-0.4-0.1l-0.3-0.2l0,0
1577
+ l-0.3-0.2l-0.3-0.2l-0.2-0.3l-0.2-0.3l0,0l-0.2-0.4l-0.1-0.4l-0.1-0.4l0,0v-0.4v-0.4l0,0v-0.2v-0.2l0,0l0.1-0.4L-183.5,1261.5z
1578
+ M-178.1,1263.7v-0.2v-0.2V1263.7z M-178,1263.2v-0.2v-0.1V1263.2z"
1579
+ />
1580
+ </g>
1581
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1582
+ <path
1583
+ d="M-82.3,1264.1l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1l0.3-0.1l0.2-0.1l0.3-0.1
1584
+ l0.3-0.1h0.3h0.3h0.3h0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.3,0.3l0.3,0.3l0.3,0.3
1585
+ l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.3,0.5l0.3,0.5l0.3,0.5l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.1l0.1,0.1l0.1,0.1
1586
+ l0.1,0.1l0,0l0,0l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.6l0.7,0.6l0.7,0.6l0.6,0.6l0.6,0.6l0.6,0.6l0.6,0.6
1587
+ l0.6,0.6l1.2,1.2l1.2,1.2l1.2,1.2l1.2,1.2l1.2,1.2l1.2,1.2l1.2,1.2l2.4,2.4l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.4l0.5,0.4
1588
+ l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l1.2,0.8l1.2,0.8l1.2,0.8l1.2,0.8l1.2,0.8
1589
+ l1.2,0.8l2.3,1.5l0.3,0.2l0.4,0.2l0.9,0.6l0.5,0.3l0.6,0.3l0.6,0.4l0.6,0.4l0.6,0.4l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2
1590
+ l0.3,0.2l0.3,0.2l0.3,0.3l0.3,0.3l0.3,0.3l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.2l0.1,0.3v0.1v0.1v0.1v0.1v0.2v0.2v0.1v0.3v0.3v0.3
1591
+ l-0.1,0.3l-0.1,0.3l-0.1,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.3,0.1l-0.3,0.1h-0.3
1592
+ h-0.3H-30h-0.3l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.1
1593
+ l0,0l-0.1-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-1-0.6l-0.4-0.3
1594
+ l-0.4-0.2l-2.3-1.5l-1.2-0.8l-1.2-0.8l-1.2-0.8l-1.2-0.8l-1.2-0.8l-1.2-0.9l-0.6-0.4l-0.6-0.4l-0.6-0.4l-0.6-0.5l-0.6-0.5
1595
+ l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.5-0.5l-0.5-0.5l-0.5-0.5l-0.5-0.5l-2.4-2.4l-1.2-1.2
1596
+ l-1.2-1.2l-1.2-1.2l-1.2-1.2l-1.2-1.1l-1.2-1.1l-1.2-1.1l-0.6-0.5l-0.6-0.6l-0.6-0.6l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5
1597
+ l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.7-0.5l-0.2-0.1l-0.2-0.2l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.2-0.3
1598
+ l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.3-0.5l-0.3-0.5l-0.3-0.4l-0.1-0.2l-0.1-0.2l0,0h-0.1H-80h-0.3l-0.3-0.1
1599
+ l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.3l-0.1-0.3v-0.3v-0.3v-0.3
1600
+ v-0.3l0.1-0.3l0.1-0.2L-82.3,1264.1z M-33,1307.9L-33,1307.9L-33,1307.9L-33,1307.9z"
1601
+ />
1602
+ </g>
1603
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1604
+ <path
1605
+ d="M-214.8,1340L-214.8,1340l0.2-0.3l0.1-0.2l0,0l0.2-0.2l0,0l0.3-0.3l0,0l0.3-0.2l0,0l0.3-0.2l0,0l0.3-0.1l0,0
1606
+ l0.2-0.1h0.2h0.1h0.3h0.3h0.1h0.2h0.2h0.1l0.3,0.1h0.1l0.2,0.1l0.2,0.1l0.3,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2
1607
+ l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.5l0.9,0.9l0.9,1l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.4l0.4,0.4l0.4,0.4l0.4,0.4
1608
+ l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.5,0.3l0.5,0.3l0.5,0.3l0.5,0.3l1.1,0.6
1609
+ l1.1,0.6l1.1,0.6l1,0.6l1,0.6l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1.9,1.5l1.9,1.5
1610
+ l1.9,1.5l1.9,1.5l1.9,1.5l1.8,1.4l3.7,2.9l3.7,2.9l3.7,2.9l3.7,2.9l3.7,3l3.7,3l3.7,3l3.7,3l3.7,3l3.7,3l3.7,3l3.6,3l3.6,3l3.6,3
1611
+ l3.6,3.1l3.6,3.1l0.2,0.2l0.2,0.2l0.2,0.2l0.3,0.2l0.6,0.4l0.6,0.4l0.6,0.4l0.7,0.4l0.7,0.5l0.7,0.5l1.5,1l1.5,1l1.6,1l0.8,0.5
1612
+ l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.6l0.8,0.6l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3
1613
+ l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.4l0.3,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.3l0.2,0.4l0.1,0.4
1614
+ l0.1,0.4v0.4l-0.1,0.4l-0.1,0.4l-0.2,0.4l-0.2,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.2l-0.4,0.2l-0.4,0.1l-0.4,0.1h-0.4H-91l-0.4-0.1
1615
+ l-0.4-0.1l-0.4-0.2l-0.3-0.2l-0.3-0.3l-0.3-0.3l-0.2-0.3l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2
1616
+ l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.3l-0.3-0.2l-0.3-0.3l-0.3-0.2
1617
+ l-0.3-0.3l-0.3-0.2l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5l-1.5-1l-1.5-1l-1.5-1l-0.7-0.5l-0.7-0.5
1618
+ l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.6-0.5l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-3.6-3.1l-3.6-3l-3.6-3l-3.6-3l-3.6-3l-3.6-3l-3.6-3
1619
+ l-3.7-3l-3.7-3l-3.7-3l-3.7-3l-3.7-2.9l-3.7-2.9l-3.7-2.9l-3.7-2.9l-3.7-2.9l-1.8-1.4l-1.9-1.5l-1.9-1.5l-1.9-1.5l-1.9-1.5
1620
+ l-1.9-1.5l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6
1621
+ l-1-0.6l-1-0.5l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.3-0.1l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2
1622
+ l-0.3-0.2l-0.3-0.2l-0.5-0.4l-0.5-0.5l-0.5-0.5l-0.5-0.5l-0.5-0.5l-0.5-0.5l-0.5-0.5l-0.9-1l-0.9-0.9l-0.4-0.4l-0.4-0.4l-0.4-0.4
1623
+ l-0.3-0.3h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.3-0.2l-0.3-0.3l-0.3-0.3l-0.2-0.3l-0.2-0.4l-0.1-0.4l-0.1-0.4v-0.4v-0.3v-0.3
1624
+ l0.1-0.3v-0.1l0.1-0.4v-0.1l0.1-0.2L-214.8,1340z"
1625
+ />
1626
+ </g>
1627
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1628
+ <path
1629
+ d="M-204.5,1408.5l0.2-0.3l0.2-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1l0.3-0.1h0.4h0.4h0.4l0.3,0.1l0.3,0.1
1630
+ l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3
1631
+ l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.8,0.8l0.9,0.8l0.9,0.8l0.9,0.8
1632
+ l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1.1,0.8l2.1,1.6l2.1,1.6l2.1,1.6l1,0.8l1,0.8l1,0.8l0.9,0.8l0.9,0.8l0.9,0.7l3.8,3.3l3.9,3.3
1633
+ l1.9,1.7l2,1.7l2,1.7l2,1.7l2,1.7l2,1.7l2,1.7l2,1.6l2,1.6l2,1.6l2,1.6l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8
1634
+ l1,0.8l1,0.8l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.6
1635
+ l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.3l0.2,0.3l0.1,0.3
1636
+ l0.1,0.3l0.1,0.4v0.4v0.4l-0.1,0.4l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.4,0.1
1637
+ h-0.4h-0.4l-0.4-0.1l-0.3-0.1l-0.3-0.1l-1.1-0.6l-1.1-0.6l-1.1-0.6l-1.1-0.6l-1.1-0.6l-1.1-0.6l-1.1-0.6l-1.1-0.7l-1.1-0.7
1638
+ l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.8
1639
+ l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1-0.8l-1-0.8l-1-0.8l-2.1-1.6l-2.1-1.6
1640
+ l-2-1.7l-2-1.7l-2-1.7l-2-1.7l-2-1.7l-2-1.7l-2-1.7l-2-1.7l-2-1.7l-3.9-3.3l-3.8-3.3l-0.8-0.7l-0.9-0.7l-0.9-0.7l-0.9-0.8l-1-0.8
1641
+ l-1-0.8l-2.1-1.6l-2.1-1.6l-2.1-1.6l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1-0.8l-1-0.8l-1-0.8l-1-0.8l-1-0.8l-0.9-0.8l-0.9-0.8l-0.4-0.4
1642
+ l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4
1643
+ l-0.3-0.4l-0.3-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.1-0.3l-0.1-0.3v-0.4v-0.4v-0.4l0.1-0.3l0.1-0.3L-204.5,1408.5z"
1644
+ />
1645
+ </g>
1646
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1647
+ <path
1648
+ d="M-196.1,1467.1l0.1-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0,0l0.2-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.3
1649
+ h0.3h0.3l0,0l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.1,0.1l0.2,0.2l0.3,0.4l0.4,0.4l0.4,0.5
1650
+ l0.5,0.5l1,1.1l0.9,1l0.7,0.7l0.2,0.2l0.1,0.1l0.4,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.9,0.7l0.9,0.7
1651
+ l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l2,1.4l2.1,1.4l0.9,0.6l0.9,0.6l0.9,0.6l0.9,0.6l0.9,0.5l0.9,0.5l0.9,0.5l0.9,0.5l0.9,0.5
1652
+ l0.9,0.5l0.9,0.5l0.9,0.5l1.8,1l1.8,1l1.9,1l1.9,1l1.9,1l1.9,1l1.9,1l1.9,1l0.9,0.5l0.9,0.5l0.9,0.5l1,0.5l0.5,0.3l0.6,0.3
1653
+ l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l1.2,0.8l1.2,0.9l1.2,0.9l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4
1654
+ l0.6,0.3l0.6,0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
1655
+ l0.2,0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.1,0.3l0.1,0.3
1656
+ l0.1,0.3v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1
1657
+ l-0.3,0.1h-0.3h-0.3h-0.3h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1
1658
+ l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.4-0.2l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.4
1659
+ l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.6-0.4l-1.3-0.9l-1.2-0.9l-1.2-0.8l-0.5-0.4l-0.5-0.4l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.4-0.3
1660
+ l-0.9-0.5l-0.9-0.5l-0.9-0.5l-0.9-0.5l-1.9-1l-1.9-1l-1.9-1l-1.9-1l-1.9-1l-1.9-1l-1.9-1l-1.9-1l-0.9-0.5l-0.9-0.5l-0.9-0.5
1661
+ l-0.9-0.5l-0.9-0.5l-0.9-0.5l-0.9-0.6l-0.9-0.6l-0.9-0.6l-0.9-0.6l-0.9-0.6l-0.9-0.6l-2.1-1.4l-2-1.4l-1-0.7l-1-0.7l-1-0.7
1662
+ l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.8l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.5l-0.2-0.2
1663
+ l-0.3-0.3l-0.8-0.8l-0.9-1l-1-1.1l-0.5-0.6l-0.5-0.5l-0.4-0.5l-0.4-0.5l-0.3-0.4l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.2-0.3v-0.1
1664
+ l-0.1-0.2l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.3v-0.3v-0.3v-0.3l0,0l0.1-0.3l0.1-0.3L-196.1,1467.1z"
1665
+ />
1666
+ </g>
1667
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1668
+ <path
1669
+ fill="#DACEB3"
1670
+ d="M-197.1,1289.5l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2
1671
+ l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.3-0.2l0.2-0.1l0.3-0.1h0.1l0.1-0.1h0.1h0.1h0.2h0.2h0.1h0.3h0.1h0.2h0.2h0.1h0.3h0.1h0.3h0.1
1672
+ l0.3,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0,0l0.2-0.3l0.2-0.3l0.3-0.3l0.3-0.3l0.2-0.2l0.2-0.1l0.2-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1
1673
+ l0.2-0.1l0,0l0.2-0.1l0.2-0.1l0,0h0.2h0.2l0,0h0.2h0.2l0,0h0.2h0.2l0,0h0.2h0.2l0,0l0.2,0.1l0.2,0.1h0.1l0.2,0.1l0.2,0.1l0.1,0.1
1674
+ l0.2,0.2l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.3,0.5l0.3,0.6l0.3,0.6l0.4,0.6l0.4,0.7
1675
+ l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.3,0.7l0.2,0.3l0.2,0.1l0.3,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.3
1676
+ l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3v0.3v0.2l0.2,0.4l0.2,0.5l0.2,0.5l0.1,0.5l0.1,0.4l0.1,0.3v0.2l0.1,0.8
1677
+ l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,1.5l0.1,1.5l0.1,1.5l0.1,1.5l0.1,1.6v1.6v1.6v1.6v1.6v1.6v1.6v0.7l0,0l0.2,0.2
1678
+ l0.2,0.2l0,0l0.2,0.2l0.2,0.2l0,0l0.1,0.2l0.1,0.2l0,0l0.1,0.2l0.1,0.2v0.1v0.2v0.2v0.2l0.1,0.6v0.5v0.5v0.5v0.5v0.5v0.5v0.5v0.5
1679
+ v0.5v0.5v0.1v0.2v0.5v0.5v0.5v0.5v0.5v0.5l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.2,0.8
1680
+ l-0.2,0.8l-0.2,0.8l-0.2,0.8l-0.1,0.3l-0.2,0.7l-0.1,2l-0.1,3l-0.1,3v0.4v0.5v1.1v1.3v1.5v0.8v0.8v0.8v0.9v0.9v0.9l-0.1,0.9
1681
+ l-0.1,0.9l-0.1,0.9l-0.1,0.9l-0.1,0.5l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4
1682
+ l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.3,0.3l-0.3,0.3
1683
+ l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.3,0.1l-0.3,0.1h-0.3
1684
+ h-0.3h-0.3h-0.3h-0.3h-0.3l-0.3-0.1l-0.3-0.1h-0.1l-0.2,0.1l0,0l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.3h-0.3h-0.3l-0.3-0.1l0,0
1685
+ l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l0,0l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2l-0.1-0.2v-0.2
1686
+ v-0.3v-0.2l-0.1-0.4v-0.5v-0.6v-0.7v-0.8l-0.1-1.7l0,0v-0.1l-0.3-0.6l-0.3-0.7l-0.3-0.7l-0.3-0.8l-0.3-0.8l-0.3-0.9l-0.3-0.9
1687
+ l-0.3-0.9l-0.3-0.9l-0.6-1.8l-0.6-1.8l-0.5-1.7l-0.5-1.6l-0.8-2.5v-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2
1688
+ v-0.2l-0.1-0.3l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.1-0.8l-0.1-0.8
1689
+ l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.6l-0.1-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.3
1690
+ l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.2-0.5l-0.2-0.5l-0.2-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6
1691
+ l-0.1-0.6l-0.1-0.6l-0.1-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.5v-0.1v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6
1692
+ v-0.6v-0.6v-0.6l0.1-1.2l0.1-1.2l0.1-1.2l0.1-1.2l0.1-1.2l0.1-1.2l0.2-1.2l0.2-1.2l0.2-1.2l0.2-1.2l0.2-1.2l0.4-2.3l0.4-2.3
1693
+ l0.1-0.5l0.1-0.5l0.2-1.3l0.1-0.7l0.1-0.7l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4L-197.1,1289.5l0-0.4l0.2-0.4
1694
+ L-197.1,1289.5z M-184.6,1294.6L-184.6,1294.6v-0.2l-0.1-0.3L-184.6,1294.6z"
1695
+ />
1696
+ </g>
1697
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1698
+ <path
1699
+ fill="#DACEB3"
1700
+ d="M-182,1397.3L-182,1397.3L-182,1397.3l0.2-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0,0v-0.3
1701
+ v-0.1v-0.1v-0.1l0,0v-0.2v-0.2v-0.1v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0,0l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
1702
+ l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1h0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.1h0.2h0.1l0.1,0.1l0.1,0.1
1703
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1
1704
+ v0.1v0.1v0.2v0.4v0.4v0.5l0.1,1.3v0.7h0.1h0.1h0.1h0.1l0,0h0.1h0.1h0.1h0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1
1705
+ l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1v0.1v0.1v0.1v0.1
1706
+ v0.1v0.1v0.1v0.1v0.2v0.2v0.1v0.1v0.3v0.4l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.6l-0.2,0.6l-0.1,0.3v0.1v0.5v0.5v0.6v0.6
1707
+ v0.6v0.6v0.6v0.6v0.6v0.6v0.6v0.6v0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.3l-0.1,0.3l-0.1,0.3
1708
+ l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.1,0.2l-0.2,0.2l-0.2,0.2l-0.1,0.1
1709
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0h-0.1h-0.1h-0.1l0,0h-0.1h-0.1
1710
+ h-0.1h-0.1l0,0h-0.1h-0.1h-0.1h-0.1l0,0h-0.2h-0.2h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l0,0h-0.1h-0.1h-0.1h-0.1l-0.1-0.1
1711
+ l-0.1-0.1l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l0,0
1712
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.3l-0.1-0.3l-0.1-0.4l-0.1-0.4v-0.2l0,0l-0.2-0.4l-0.2-0.4l-0.1-0.4l-0.1-0.4
1713
+ l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4v-0.4v-0.4v-0.4v-0.4v-0.4v-0.4v-0.4v-0.4v-0.4v-0.4v-0.4l0.1-0.8l0.1-0.8l0.1-0.9l0.1-0.6
1714
+ v-0.1v-0.5v-0.6v-0.6v-0.4v-0.6v-0.8v-0.8v-0.8v-0.8v-0.4v-0.4v-0.4v-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.3v-0.1
1715
+ v-0.1v-0.1l0.1-0.1L-182,1397.3z"
1716
+ />
1717
+ </g>
1718
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1719
+ <path
1720
+ fill="#DACEB3"
1721
+ d="M-240.6,1222l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
1722
+ l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.1l0.4-0.2l0.4-0.2l0.3-0.1l0.5-0.2l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.2-0.1l0,0l0.1-0.1l0.1-0.1
1723
+ l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.2l0.1-0.1l0.1-0.1l0.1-0.1h0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.4-0.1l0.4-0.1
1724
+ h0.4h0.3h0.3h0.3h0.3h0.3h0.3l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.5,0.1l0.5,0.1l0.8,0.2h0.2h0.1l0.4,0.1l0.5,0.1l0.5,0.1l0.5,0.1
1725
+ l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.2l0.5,0.2l0.5,0.2h0.1l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3
1726
+ l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l1.5,0.7l1.5,0.7l1.5,0.7l1.5,0.7l1.4,0.7l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3
1727
+ l0.7,0.3l0.7,0.2l0.7,0.2l0.7,0.2l0.7,0.2l0.7,0.2l0.7,0.2l0.3,0.1l0.4,0.1l0.3,0.1h0.2h0.2h0.4h0.5h0.5h0.5h0.5l0.5,0.1l1,0.1
1728
+ l0.5,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.2,0.1h0.1l0.2,0.1l0.2,0.1l0,0l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0,0
1729
+ l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2v0.2v0.2v0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.2l-0.1,0.2l-0.2,0.2
1730
+ l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l0,0l-0.2,0.1h-0.2h-0.2h-0.1h-0.1h-0.1h-0.2l0,0l0.1,0.2l0.1,0.2v0.2
1731
+ l0,0v0.2v0.2l0,0v0.2v0.2l0,0v0.2l-0.1,0.2l0,0l-0.1,0.2l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l0,0
1732
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1l-0.2,0.1l-0.2,0.1h-0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.3l-0.5,0.1h-0.5
1733
+ h-0.5h-0.5h-0.5h-0.5h-0.6h-0.6h-0.6h-0.6h-0.6l-1.1-0.1l-1.1-0.1l-1-0.1l-0.9-0.1l-0.8-0.1l-0.6-0.1l-0.3-0.1l-0.3-0.1l-0.7-0.2
1734
+ l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3
1735
+ l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.4l-0.6-0.3l-0.7-0.1l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-2.5-0.4l-2.5-0.4
1736
+ l-2.5-0.4l-2.5-0.5h-0.1h-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.3-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2
1737
+ l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2
1738
+ l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.2v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.2v-0.2v-0.1v-0.2
1739
+ v-0.2v-0.1v-0.2l0.1-0.2v-0.1l0.1-0.2l0.1-0.2L-240.6,1222z"
1740
+ />
1741
+ </g>
1742
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1743
+ <path
1744
+ d="M-236.9,1244.6l0.5-0.8l0.6-0.7l0.7-0.6l0.8-0.4l0.9-0.3l0.9-0.2h0.9l0.9,0.1l0.9,0.3l0.8,0.4l0.8,0.5
1745
+ l0.7,0.6l0.1,0.1l0.5,0.6l0.1,0.1l0.4,0.6v0.1l0.3,0.7v0.1l0.2,0.8v0.1l0.1,0.6v0.1v0.7v0.1v0.5v0.3l-0.1,0.5l-0.1,0.5l-0.1,0.4
1746
+ l-0.1,0.4l-0.2,0.5l-0.2,0.5l-0.1,0.2v0.1v0.4v0.4v0.3l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.3,1.6l0.3,1.6
1747
+ l0.3,1.6l0.3,1.5l0.3,1.5l0.3,1.5l0.3,1.5l0.3,1.5l0.3,1.5l0.6,2.9l0.6,2.9l0.6,2.9l1.2,5.9l0.6,3l0.6,3l0.6,3l0.3,1.5l0.3,1.5
1748
+ l0.3,1.5l0.3,1.5l0.3,1.5l0.3,1.5l0.2,1.5l0.2,1.6l0.2,1.6l0.3,2.4l0.1,0.8l0.1,0.9l0.1,0.8l0.3,1.7l0.3,1.7l0.3,1.7l0.3,1.7
1749
+ l0.3,1.7l0.4,1.7l0.4,1.7l0.4,1.7l0.4,1.7l0.4,1.7l0.8,3.5l0.8,3.5l0.8,3.5l0.8,3.5l0.4,1.8l0.4,1.8l0.4,1.8l0.4,1.8l0.4,1.8
1750
+ l0.4,1.8l0.3,1.8l0.3,1.8l0.3,1.8l0.3,1.8l0.1,0.9l0.1,0.9l0.1,0.9l0.1,0.9l0.5,3.8l0.5,3.8l0.6,3.8l0.6,3.8l0.6,3.8l0.6,3.8
1751
+ l0.6,3.8l0.6,3.8l0.6,3.8l0.6,3.8l0.6,3.8l0.6,3.8l1.3,7.5l1.3,7.5l1.3,7.5l1.3,7.5l2.6,15l1.3,7.5l1.3,7.5l1.3,7.5l1.3,7.5
1752
+ l0.4,2.6l0.4,2.6l0.4,2.6l0.4,2.6l0.4,2.6l0.4,2.6l0.4,2.6l0.4,2.6l0.7,5.2l0.7,5.2l0.7,5.1l0.7,5.1l0.7,5.1l0.4,2.5l0.4,2.5
1753
+ l0.4,2.5l0.4,2.5l0.4,2.5l0.4,2.5l0.4,2.5l0.4,2.5l0.4,2.5l0.4,2.5l0.4,2.5l0.5,2.5l0.5,2.5l0.5,2.5v0.2v0.2l0.1,0.2v0.2l0.1,0.4
1754
+ l0.1,0.4l0.1,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.5l0.2,0.5l0.2,0.5l0.5,1l1.1,2.1l0.6,1.1l0.3,0.6
1755
+ l0.3,0.6l0.3,0.6l0,0l0.2-0.4l0.4-1l0.4-1.1l0.2-0.6l0.2-0.6l0.2-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.4-0.6
1756
+ l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7
1757
+ l0.5-0.7l0.5-0.7l0.5-0.8l0.5-0.8l0.5-0.8l0.9-1.5l0.9-1.5l0.9-1.6l0.9-1.6l0.9-1.6l0.9-1.6l0.9-1.6l0.9-1.6l1.7-3.3l1.7-3.3
1758
+ l1.8-3.3l0.9-1.7l0.9-1.7l0.9-1.7l0.9-1.7l0.9-1.7l0.9-1.6l1-1.6l1-1.6l0.5-0.8l0.5-0.8l0.5-0.8l0.5-0.8l0.9-1.4l0.9-1.4l0.9-1.4
1759
+ l0.8-1.4l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.6
1760
+ l1.5-3.1l3-6.3l1.5-3.2l1.5-3.1l0.8-1.6l0.8-1.6l0.8-1.6l0.8-1.6l1.3-2.7l1.3-2.7l1.3-2.7l1.3-2.7l1.3-2.7l1.3-2.7l1.3-2.7
1761
+ l1.3-2.7l1.3-2.7l1.3-2.7l1.3-2.7l1.3-2.7l1.2-2.7l1.2-2.7l1.2-2.7l1.2-2.7l2.5-5.5l2.4-5.5l2.4-5.5l2.4-5.5l4.9-11l2.4-5.5
1762
+ l2.4-5.5l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1
1763
+ l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3l1.4-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.1-2.1
1764
+ l1.1-2.1l1-2.1l1-2.1l1-2.2l1-2.2l0.5-1.1l0.5-1.1l0.5-1.1l0.5-1.1l0.5-1.1l0.5-1.1l0.5-1.1l0.5-1.1l0.5-1.1l0.4-1.1l0.4-1.1
1765
+ l0.4-1.1l0.4-1.1l0.4-1.1l0.4-1.1l0.4-1.1l0.4-1.1l0.4-1.1l0.4-1.1l0.4-1.1l0.1-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4
1766
+ l0.2-0.3l0.2-0.3l0.4-0.6l0.4-0.6l0.6-1l0.3-0.4l0.2-0.4l0.1-0.2l0.1-0.1l0.1-0.1v-0.1l0.1-0.4l0.3-0.9l0.4-0.8l0.5-0.8l0.6-0.7
1767
+ l0.7-0.6l0.8-0.4l0.9-0.3l0.9-0.2h0.9l0.9,0.1l0.9,0.3l0.8,0.4l0.8,0.5l0.7,0.6l0.6,0.7l0.4,0.8l0.3,0.9l0.2,0.9v0.9v0.4
1768
+ l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.2,0.5l-0.2,0.5l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.3l-0.2,0.3l-0.4,0.6l-0.4,0.6l-0.7,1
1769
+ l-0.3,0.4l-0.3,0.4l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1v0.1v0.1l0,0v0.1l-0.4,1.1l-0.4,1.1l-0.4,1.1l-0.4,1.1l-0.4,1.1l-0.4,1.1
1770
+ l-0.4,1.1l-0.4,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1
1771
+ l-0.5,1.1l-1,2.2l-1.1,2.2l-1.1,2.2l-1.1,2.2l-1.1,2.2l-1.1,2.1l-1.5,3l-1.5,3l-1.5,3l-1.5,3l-1.5,3l-1.5,3l-1.5,3l-1.5,3l-1.5,3
1772
+ l-1.5,3l-1.5,3l-1.5,3l-1.4,3l-1.4,3l-1.4,3l-1.4,3l-1.4,3l-1.4,3l-1.4,3l-1.4,3l-1.4,3l-1.4,3.1l-1.4,3.1l-1.4,3.1l-1.4,3.1
1773
+ l-1.4,3.1l-1.4,3.1l-1.4,3.1l-1.4,3.1l-1.4,3.1l-1.4,3.1l-1.4,3.1l-2.4,5.5l-2.4,5.5l-4.9,11l-2.4,5.5l-2.4,5.5l-2.5,5.5
1774
+ l-2.5,5.5l-1.2,2.8l-1.2,2.8l-1.3,2.8l-1.3,2.8l-1.3,2.8l-1.3,2.8l-1.3,2.8l-1.3,2.7l-1.3,2.7l-1.3,2.7l-1.3,2.7l-1.3,2.7
1775
+ l-1.3,2.7l-1.3,2.7l-1.3,2.7l-1.3,2.7l-0.8,1.5l-0.8,1.5l-0.8,1.5l-0.7,1.5l-1.5,3.1l-1.5,3.1l-3,6.3l-1.5,3.2l-0.8,1.6l-0.8,1.6
1776
+ l-0.8,1.6l-0.8,1.6l-0.8,1.6l-0.8,1.6l-0.8,1.6l-0.8,1.6l-0.8,1.6l-0.8,1.6l-0.8,1.6l-0.9,1.6l-0.9,1.5l-0.9,1.5l-0.9,1.5
1777
+ l-0.9,1.5l-0.9,1.5l-0.9,1.5l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.9,1.6l-0.9,1.6l-0.9,1.6l-0.9,1.6l-0.9,1.6l-0.9,1.6
1778
+ l-0.9,1.6l-0.9,1.6l-1.7,3.3l-1.7,3.3l-1.7,3.3l-0.9,1.7l-0.9,1.6l-0.9,1.6l-0.9,1.6l-0.9,1.6l-0.9,1.6l-0.9,1.6l-1,1.6l-0.5,0.8
1779
+ l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.6,0.8
1780
+ l-0.6,0.8l-0.5,0.7l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4
1781
+ l-0.2,0.4l-0.2,0.5l-0.2,0.5l-0.4,1l-0.4,1.1l-0.5,1.1l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.4,0.6
1782
+ l-0.4,0.6l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.4,0.3
1783
+ l-0.5,0.3l-0.4,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.1l-0.5,0.1l-0.4,0.1h-0.4h-0.4h-0.5h-0.4l-0.5-0.1l-0.4-0.1l-0.6-0.2l-0.5-0.2
1784
+ l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3
1785
+ l-0.3-0.3l-0.3-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.4l-0.3-0.4l-0.3-0.5l-0.2-0.5l-0.2-0.7l-0.2-0.5l-0.2-0.5l-0.2-0.5
1786
+ l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.5-1l-1.1-2.1l-0.6-1.1l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6
1787
+ l-0.3-0.6l-0.3-0.7l-0.3-0.7l-0.2-0.7l-0.2-0.7l-0.2-0.7l-0.2-0.7l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.5-2.6l-0.5-2.5
1788
+ l-0.5-2.5l-0.5-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.7-5.1
1789
+ l-0.7-5.1l-0.7-5.1l-0.7-5.1l-0.7-5.1l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.5l-0.4-2.5l-0.4-2.5l-1.2-7.4
1790
+ l-1.3-7.4l-1.3-7.5l-1.3-7.5l-2.6-15l-1.3-7.5l-1.3-7.5l-1.3-7.5l-1.3-7.5l-0.6-3.8l-0.6-3.8l-0.6-3.8l-0.6-3.8l-0.6-3.8
1791
+ l-0.6-3.8l-0.6-3.8l-0.6-3.8l-0.6-3.8l-0.6-3.8l-0.6-3.8l-0.5-3.8l-0.1-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.8l-0.3-1.7l-0.3-1.7
1792
+ l-0.3-1.7l-0.3-1.7l-0.3-1.7l-0.4-1.7l-0.4-1.7l-0.4-1.7l-0.4-1.7l-0.4-1.7l-0.8-3.5l-0.8-3.5l-0.8-3.5l-0.8-3.5l-0.4-1.8
1793
+ l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.3-1.8l-0.3-1.8l-0.3-1.8l-0.2-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.9
1794
+ l-0.2-1.5l-0.2-1.5l-0.2-1.5l-0.2-1.5l-0.2-1.5l-0.3-1.5l-0.3-1.5l-0.3-1.5l-0.3-1.5l-0.3-1.5l-0.6-3l-0.6-2.9l-0.6-2.9l-1.2-5.9
1795
+ l-0.6-3l-0.6-3l-0.6-3l-0.3-1.5l-0.3-1.5l-0.3-1.5l-0.3-1.5l-0.3-1.5l-0.3-1.5l-0.3-1.6l-0.3-1.6l-0.3-1.7l-0.1-0.9l-0.1-0.9
1796
+ l-0.1-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.9v-0.5v-0.5v-0.5v-0.5v-0.5v-0.6v-0.5l0.1-0.5l0.1-0.5l0.1-0.4l0.1-0.4l0.1-0.4
1797
+ l0.2-0.5l0.1-0.2v-0.3l0.1-0.9l0.3-0.9L-236.9,1244.6z M-3,1245.6v0.2l0,0V1245.6L-3,1245.6z M-236.3,1251.3l0.2,0.2l-0.4-0.6
1798
+ L-236.3,1251.3z"
1799
+ />
1800
+ </g>
1801
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1802
+ <path
1803
+ d="M-269.9,1186.4l0.1-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.2l0.2-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2
1804
+ l0.3-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.3h0.3h0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.2
1805
+ l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3
1806
+ l0.1,0.3v0.3l0,0v0.3v0.3v0.3v0.3l0,0v0.2v0.2l-0.1,0.2l-0.1,0.3l-0.1,0.4l-0.2,0.4l-0.3,0.9l-0.4,0.9l-0.4,0.9l-0.3,0.8
1807
+ l-0.1,0.3l-0.1,0.2l-0.2,1.4l-0.1,0.9l-0.1,0.9l-0.1,1l-0.1,1l-0.1,0.5l-0.1,0.5v0.5v0.5v0.5v0.5v0.5v0.5v0.4v0.4v0.4v0.4v0.4
1808
+ v0.3v0.3v0.3v0.3l0.1,0.2v0.1v0.1v0.1v0.1l0.4,1.1l0.4,1.2l0.5,1.3l0.2,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7
1809
+ l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7
1810
+ l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.5,0.7l0.5,0.7l0.5,0.6l0.5,0.6l0.5,0.6l0.5,0.6l0.5,0.6l0.5,0.6l0.5,0.5l0.2,0.3l0.2,0.3
1811
+ l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2
1812
+ l0.2,0.2l0.2,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
1813
+ l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.3h0.3h0.3h0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1
1814
+ l0.3,0.1l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3
1815
+ l0.1,0.3l0.1,0.3l0.1,0.3v0.3v0.3v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3
1816
+ l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1
1817
+ l-0.3,0.1h-0.3h-0.3h1.6h-0.4h-0.5h-0.5h-0.5l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1
1818
+ l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2
1819
+ l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3
1820
+ l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.4l-0.6-0.7l-0.6-0.7l-0.6-0.7l-0.6-0.8l-0.6-0.8l-0.6-0.8
1821
+ l-0.6-0.8l-0.6-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.4-0.8l-0.4-0.8
1822
+ l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.3-0.8l-0.3-0.8l-0.3-0.8l-0.3-0.8l-0.3-0.8
1823
+ l-0.3-0.8l-0.3-0.7l-0.3-0.7l-0.5-1.4l-0.5-1.4l-0.4-1.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.4l-0.1-0.6l-0.1-0.7l-0.1-0.7
1824
+ l-0.1-0.7l-0.1-0.7v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.1-1.1l0.1-1.1l0.2-1l0.2-1
1825
+ l0.3-1.8l0.1-0.3l0.1-0.4l0.1-0.5l0.2-0.5l0.2-0.5l0.4-1l0.4-1l0.3-0.9l0.3-0.7v-0.1v-0.2l0.1-0.3l0.1-0.3L-269.9,1186.4z
1826
+ M-270.5,1188.7v0.6v-0.3V1188.7l0.1-0.3v-0.1L-270.5,1188.7z M-270.4,1187.7L-270.4,1187.7L-270.4,1187.7L-270.4,1187.7z"
1827
+ />
1828
+ </g>
1829
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1830
+ <path
1831
+ d="M-5,1240.4l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2
1832
+ l0.3-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.3-0.1l0.4-0.1l0.3-0.1l0.3-0.1l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2
1833
+ l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.3l0.3-0.3l0.3-0.3
1834
+ l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3
1835
+ l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4
1836
+ l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.5-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9
1837
+ l0.3-0.9l0.3-0.9l0.3-0.9l0.3-0.9l0.3-0.9l0.3-0.9l0.3-1l0.2-0.9l0.2-0.9l0.2-0.9l0.2-0.9l0.2-0.9l0.2-0.9l0.2-0.9l0.1-0.9
1838
+ l0.1-0.9l0.1-0.9l0.1-0.9l0.1-0.9l0.1-0.9v-0.9v-0.9v-0.9v-0.4v-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.2-0.3l0.2-0.3l0.2-0.3
1839
+ l0.2-0.3l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1h0.4h0.4h0.4h0.4
1840
+ l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.3l0.3,0.3l0.2,0.3l0.2,0.3l0.2,0.3
1841
+ l0.2,0.3l0.2,0.3l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4v0.4v0.4v1v1.1v1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.2,1.1
1842
+ l-0.2,1.1l-0.2,1.1l-0.2,1.1l-0.2,1.1l-0.2,1.1l-0.3,1.1l-0.3,1.1l-0.3,1.1l-0.3,1.1l-0.3,1.1l-0.4,1.1l-0.4,1.1l-0.4,1.1
1843
+ l-0.4,1.1l-0.4,1.1l-0.4,1.1l-0.4,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1l-0.5,1l-0.5,1l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5
1844
+ l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5
1845
+ l-0.3,0.5l-0.4,0.5l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4
1846
+ l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.3l-0.5,0.3l-0.5,0.3
1847
+ l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.2l-0.5,0.2
1848
+ l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1H0.8H0.4H0h-0.4l-0.4-0.1
1849
+ l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.3l-0.3-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3
1850
+ l-0.2-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.4l-0.1-0.4l-0.1-0.4v-0.4v-0.4v-0.4v-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4L-5,1240.4z"
1851
+ />
1852
+ </g>
1853
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1854
+ <path
1855
+ d="M-271.2,1188.2l0.2-0.4l0.2-0.4l0.1-0.2l0.3-0.4l0.3-0.4l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.3-0.3l0.3-0.3
1856
+ l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.6-0.3l0.6-0.3l0.7-0.3l0.6-0.3l0.6-0.3
1857
+ l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.4-0.1l0.4-0.1l0.5-0.1h0.5h0.5h0.4h0.4h0.4h0.4h0.4h0.4h0.4l0.4,0.1l0.4,0.1l0.4,0.1
1858
+ l0.4,0.1l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3
1859
+ l0.8,0.3l1.5,0.6l1.4,0.5l1.3,0.5l1.1,0.5l1,0.4l1.1,0.4l1,0.4l1.1,0.4l1,0.4l1,0.4l1.1,0.4l1.1,0.4l1.1,0.4l1.1,0.4l1.1,0.4
1860
+ l1.1,0.4l1.1,0.4l1.1,0.4l1.1,0.4l1.1,0.4l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3
1861
+ l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2
1862
+ l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1
1863
+ l1.1,0.1l1.1,0.1l1.1,0.1h1.1h1.1h1.1h1.1h1.1h1.1h1.6h1.6h1.6h1.6h1.6l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1
1864
+ l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l3.2,0.3l3.2,0.3l3.2,0.3l6.5,0.6l3.2,0.3l3.2,0.3l3.2,0.3l3.2,0.3l3.2,0.3
1865
+ l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1h1.6h1.6h1.6h1.6h1.6
1866
+ h1.6h1.6h1.6h1.6l1.6-0.1l1.6-0.1l1.6-0.1l1.6-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1
1867
+ l0.9-0.1l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.3
1868
+ l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l1.8-0.7l1.8-0.7l1.8-0.7
1869
+ l1.8-0.7l1.8-0.7l1.8-0.7l1.8-0.7l1.8-0.7l1.8-0.7l1.8-0.7l3.5-1.5l3.5-1.5l0.5-0.2l0.5-0.2l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3
1870
+ l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l1.1-0.7l1.1-0.7l1.2-0.7l1.2-0.7l0.6-0.4l0.6-0.4l0.6-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.7-0.4
1871
+ l0.7-0.4l0.7-0.3l0.7-0.3l0.7-0.3l0.8-0.3l0.8-0.3l0.4-0.1l0.4-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1h0.5h0.5h0.5l0.5,0.1
1872
+ l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.2l0.5,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.2,0.3
1873
+ l0.2,0.2l0.2,0.3l0.4,0.4l0.3,0.4l0.3,0.4l0.5,0.7l0.2,0.3l0.2,0.2v0.1l0.5,0.1l0.7,0.3l0.7,0.4l0.6,0.4l0.6,0.5l0.5,0.6l0.4,0.7
1874
+ l0.3,0.7l0.2,0.7l0.1,0.8v0.8l-0.1,0.8l-0.2,0.8l-0.3,0.7l-0.4,0.7l-0.4,0.6l-0.5,0.6l-0.6,0.5l-0.7,0.4l-0.7,0.3l-0.7,0.2
1875
+ l-0.8,0.1h-0.8h-0.4h-0.5l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.3l-0.3-0.3
1876
+ l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.2-0.4l-0.2-0.3l-0.3,0.1
1877
+ l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-1.1,0.7l-1.2,0.7
1878
+ l-1.2,0.8l-1.2,0.8l-0.6,0.4l-0.6,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.3l-0.7,0.3l-0.7,0.3l-3.6,1.5
1879
+ l-3.6,1.5l-1.8,0.8l-1.8,0.8l-1.8,0.8l-1.8,0.8l-1.8,0.7l-1.9,0.7l-1.9,0.7l-1.9,0.7l-1.9,0.7l-1.9,0.7l-1,0.3l-1,0.3l-1,0.3
1880
+ l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.2l-1,0.2l-1,0.2l-1,0.2
1881
+ l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1.7,0.1
1882
+ l-1.7,0.1l-1.7,0.1l-1.7,0.1h-1.7h-1.7h-1.7h-1.7h-1.7h-1.7H-80h-1.6h-1.6l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1
1883
+ l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-3.3-0.3l-3.3-0.3l-3.3-0.3l-3.2-0.3l-3.2-0.3
1884
+ l-6.5-0.6l-3.2-0.3l-3.2-0.3l-3.2-0.3l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1
1885
+ l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1h-1.6h-1.6h-1.6h-1.6h-1.6h-1.2h-1.2h-1.2h-1.2h-1.2h-1.2l-1.2-0.1l-1.2-0.1l-1.2-0.1
1886
+ l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2
1887
+ l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3
1888
+ l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.4l-1.1-0.4
1889
+ l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4
1890
+ l-1.1-0.4l-1.1-0.4l-1.1-0.4l-0.9-0.4l-1.1-0.4l-1.2-0.5l-1.3-0.5l-1.4-0.5l-0.7-0.3l-0.7-0.3l-0.7-0.3l-0.7-0.3l-0.7-0.3
1891
+ l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.6-0.2l-0.6-0.1l-0.6-0.1l-0.6-0.1h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2
1892
+ h-0.2h-0.1h-0.1h-0.1h-0.1h-0.1l0,0l0,0l0,0l-0.2,0.1l-0.3,0.1l-0.3,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
1893
+ l-0.4,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0l-0.1,0.1l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.2,0.3v0.1l0.1-0.1l-0.4,0.6l-0.5,0.6
1894
+ l-0.6,0.5l-0.6,0.4l-0.7,0.3l-0.7,0.2l-0.8,0.1h-0.8l0,0l-0.8-0.1l-0.8-0.2l-0.7-0.3l-0.7-0.4l-0.6-0.4l-0.6-0.5l-0.5-0.6
1895
+ l-0.4-0.7l-0.3-0.7l-0.2-0.7l-0.1-0.8v-0.8l0.1-0.8l0.2-0.8L-271.2,1188.2L-271.2,1188.2z M-260.6,1193.4l0.2-0.4l0,0
1896
+ L-260.6,1193.4L-260.6,1193.4z"
1897
+ />
1898
+ </g>
1899
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1900
+ <path
1901
+ d="M-265.5,1181.6l0.4-0.7l0.5-0.6l0.6-0.5l0.4-0.3l0.4-0.4l0.4-0.3l0.4-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3
1902
+ l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2
1903
+ l0.5-0.1l0.5-0.1l0.5-0.1l0.9-0.3l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l1.8-0.3l1.7-0.3l0.8-0.2l0.8-0.2l0.8-0.2
1904
+ l0.8-0.2l0.8-0.2l0.7-0.2l0.7-0.2l0.7-0.2l1.3-0.4l1.3-0.4l1.3-0.4l1.3-0.4l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3
1905
+ l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2
1906
+ l1.4-0.2l1.4-0.1l1.4-0.1l1.4-0.1l1.4-0.1l1.4-0.1l1.4-0.1l5.1-0.3l5.1-0.3l5.2-0.3l5.2-0.3l10.4-0.7l5.2-0.3l5.2-0.3l5.2-0.3
1907
+ l5.2-0.3l5.2-0.3l5.2-0.3l5.2-0.3l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1
1908
+ l2.6-0.1l2.6-0.1l2.6-0.1h2.6h2.6h2.6h2.6h2.6h2.6h2.6h2.6h2.6h2.6l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1
1909
+ l2.6,0.1l2.6,0.2l2.6,0.2l2.6,0.2l2.6,0.2l2.6,0.2l2.6,0.2l3.2,0.3l3.2,0.3l1.7,0.1l1.7,0.2l1.7,0.2l1.7,0.2l1.7,0.2l1.7,0.2
1910
+ l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2
1911
+ l0.9,0.2l0.9,0.2l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.8,0.3l0.8,0.3l0.8,0.4l0.8,0.4l0.8,0.4l0.8,0.4l0.8,0.4
1912
+ l0.8,0.4l0.8,0.4l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3
1913
+ l0.4,0.3l0.4,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.5,0.6l0.4,0.6l0.3,0.7l0.3,0.7l0.2,0.8l0.1,0.8v0.8l-0.1,0.8l-0.2,0.7
1914
+ l-0.3,0.7l-0.4,0.6l-0.5,0.6l-0.6,0.5l-0.6,0.4l-0.7,0.3l-0.7,0.3l-0.8,0.2l-0.8,0.1H22l-0.8-0.1l-0.7-0.2l-0.7-0.3l-0.6-0.4
1915
+ l-0.6-0.5l-0.3-0.3l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2
1916
+ l-0.3-0.2l-0.3-0.2l-0.6-0.4l-0.6-0.4l-0.6-0.4l-0.6-0.4l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.7-0.3
1917
+ l-0.7-0.3l-0.7-0.3l-0.7-0.3l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2
1918
+ l-0.8-0.2l-0.8-0.2l-0.8-0.2l-0.8-0.2l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1L-9,1173l-0.8-0.1l-0.8-0.1l-0.8-0.1
1919
+ l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.1l-3.2-0.3l-3.2-0.3l-2.6-0.2l-2.5-0.2l-2.5-0.2l-2.5-0.2l-2.6-0.2
1920
+ l-2.6-0.2l-2.6-0.1l-2.6-0.1l-2.6-0.1l-2.6-0.1l-2.6-0.1l-2.6-0.1l-2.6-0.1l-2.6-0.1h-2.6h-2.6h-2.6h-2.6h-2.6h-2.6h-2.6h-2.6
1921
+ h-2.6h-2.6l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1
1922
+ l-2.6,0.1l-2.6,0.1l-5.2,0.3l-5.2,0.3l-5.2,0.3l-5.2,0.3l-5.2,0.3l-5.2,0.3l-5.2,0.3l-10.4,0.7l-5.2,0.3l-5.2,0.3l-5.2,0.3
1923
+ l-5.1,0.3l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2
1924
+ l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3
1925
+ l-1.2,0.3l-1.2,0.3l-1.3,0.3l-1.3,0.3l-1.3,0.4l-1.3,0.4l-1.3,0.4l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2
1926
+ l-0.9,0.2l-0.9,0.2l-1.7,0.3l-1.7,0.3l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.4,0.1l-0.4,0.1
1927
+ l-0.4,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1
1928
+ l-0.3,0.1l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.6,0.5l-0.7,0.4
1929
+ l-0.7,0.3l-0.8,0.2l-0.8,0.1h-0.8l-0.8-0.1l-0.7-0.2l-0.7-0.3l-0.7-0.4l-0.6-0.5l-0.5-0.6l-0.5-0.6l-0.4-0.7l-0.3-0.7l-0.2-0.8
1930
+ l-0.1-0.8v-0.8l0.1-0.8l0.2-0.7L-265.5,1181.6z"
1931
+ />
1932
+ </g>
1933
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1934
+ <path
1935
+ d="M-231.8,1244l0.4-0.6l0.4-0.5l0.5-0.5l0.5-0.4l0.6-0.4l0,0l0.5-0.2l0.5-0.2l0.6-0.1l0.6-0.1l0,0h0.5h0.5h0.3
1936
+ l0.5,0.1l0.5,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.8,0.3l0.9,0.3l1,0.4l2.1,0.8l2.2,0.9l1.1,0.4l1,0.4l0.9,0.3l0.4,0.1l0.4,0.1l0.3,0.1
1937
+ l0.2,0.1h0.2h0.1l1.5,0.3l1.6,0.4l1.5,0.4l1.5,0.4l1.5,0.4l1.5,0.4l6.1,1.6l1.5,0.4l1.5,0.4l1.5,0.4l1.5,0.4l1.5,0.4l1.5,0.3
1938
+ l1.5,0.3l1.5,0.3l1.5,0.3l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1
1939
+ l0.7,0.1l0.7,0.1l0.7,0.1h0.7h0.7h0.7h0.7h0.7h0.7h0.7h0.7h0.7h0.7h0.7l1.6-0.1l1.6-0.1h1.6h1.6h1.6h1.6h1.6h1.6h1.6h1.6h1.6h1.6
1940
+ l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l3.2,0.2l3.2,0.2l3.2,0.2l3.2,0.2l3.2,0.2l3.2,0.2l3.2,0.2
1941
+ l3.2,0.2l3.2,0.2l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1h1.6h1.6h1.6h1.6h1.6h1.6h1.6h1.6h1.6h1.6l1.6-0.1l1.5-0.1
1942
+ l1.5-0.1l1.5-0.1l1.5-0.1l1.5-0.1l1.5-0.1l1.5-0.2l1.5-0.2l1.5-0.2l1.2-0.1l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.2l1.1-0.2
1943
+ l1.1-0.2l1.1-0.2l1.1-0.2l1.1-0.2l1.1-0.2l1.1-0.2l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3
1944
+ l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.4l1.1-0.4l1.1-0.4l1.1-0.4l1.1-0.4l1-0.4l1-0.4l1-0.4l1-0.4
1945
+ l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.5l1-0.5l1-0.5l2.1-0.9l2.1-1l2.1-1l2.1-1l2.1-1l2.1-1L5,1233
1946
+ l0.6-0.3l0.7-0.2l0.7-0.1h0.7h0.7l0.7,0.1l0.7,0.2l0.6,0.3l0.6,0.3l0.5,0.4l0.5,0.5l0.4,0.5l0.4,0.6l0.3,0.6l0.2,0.6l0.2,0.7
1947
+ l0.1,0.7v0.7l-0.1,0.7l-0.2,0.7l-0.2,0.6l-0.3,0.6l-0.4,0.6l-0.4,0.5l-0.5,0.5l-0.6,0.4l-0.6,0.3l-2.2,1.1l-2.2,1.1l-2.2,1
1948
+ l-2.2,1l-2.2,1l-2.2,1l-2.2,1l-1.1,0.5l-1.1,0.5l-1.1,0.5l-1.1,0.5l-1.1,0.5l-1.1,0.5l-1.1,0.5l-1.1,0.4l-1.1,0.4l-1.1,0.4
1949
+ l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4
1950
+ l-1.1,0.4l-1.1,0.4l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3
1951
+ l-1.2,0.3l-1.2,0.3l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.3,0.2l-1.3,0.2
1952
+ l-1.3,0.2l-1.6,0.2l-1.7,0.2l-1.6,0.2l-1.7,0.1l-1.6,0.1l-1.7,0.1l-1.6,0.1l-1.6,0.1l-1.6,0.1l-1.6,0.1h-1.6h-1.6h-1.6h-1.6h-1.6
1953
+ h-1.6h-1.6h-1.6h-1.6h-1.6l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-3.2-0.2l-3.2-0.2l-3.2-0.2l-3.2-0.2l-3.2-0.2
1954
+ l-3.2-0.2l-3.2-0.2l-3.2-0.2l-3.2-0.2l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1h-1.6h-1.6h-1.6h-1.6h-1.6
1955
+ h-1.6h-1.6h-1.6h-1.5h-1.5h-1.5l-1.5,0.1l-1.6,0.1h-0.8h-0.9h-0.9h-0.9h-0.9h-0.9h-0.8h-0.8h-0.9l-0.8-0.1l-0.8-0.1l-0.8-0.1
1956
+ l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1
1957
+ l-0.8-0.2l-1.6-0.3l-1.6-0.3l-1.6-0.4l-1.6-0.4l-1.6-0.4l-1.6-0.4l-1.6-0.4l-1.6-0.4l-1.5-0.4l-3.1-0.8l-3-0.8l-1.5-0.4l-1.5-0.4
1958
+ l-1.5-0.4l-1.5-0.4l-1.5-0.3l-1.5-0.3l-0.4-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.2l-0.5-0.2l-0.5-0.2l-1-0.4l-1.1-0.4l-1.1-0.4l-2.3-0.9
1959
+ l-2.1-0.8l-0.9-0.4l-0.8-0.3l-0.6-0.2h-0.1h-0.1l-0.7-0.2l-0.6-0.3l-0.6-0.3l-0.6-0.4l-0.5-0.5l-0.5-0.5l-0.4-0.6l-0.3-0.6
1960
+ l-0.3-0.6l-0.2-0.7l-0.1-0.7v-0.7l0.1-0.7l0.1-0.7l0.2-0.7L-231.8,1244z M-226.5,1252.7l0.5-0.1l0,0L-226.5,1252.7h-0.3H-226.5z"
1961
+ />
1962
+ </g>
1963
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
1964
+ <path
1965
+ d="M-196.9,1287.6l0.2-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0,0
1966
+ l0.2-0.1h0.3l0,0h0.3h0.3h0.3l0,0h0.3l0.3,0.1l0.2,0.1h0.1l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.3-0.2l0.3-0.1l0.3-0.1
1967
+ l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.3h0.3h0.3h0.3h0.3h0.3h0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1
1968
+ l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.4l0.4,0.4
1969
+ l0.4,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5
1970
+ l0.3,0.5l0.3,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.4,0.9l0.4,0.9l0.4,0.9l0.3,0.8l0.3,0.8l0.3,0.8l0.2,0.7
1971
+ l0.2,0.7l0.2,0.6l0.2,0.8l0.2,0.8l0.2,0.8l0.2,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8
1972
+ l0.1,0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,1.6l-0.2,1.6
1973
+ l-0.2,1.6l-0.2,1.6l-0.2,1.6l-0.2,1.6l-0.2,1.5l-0.2,1.5l-0.4,3.1l-0.4,3l-0.2,1.5l-0.2,1.5l-0.2,1.5l-0.2,1.5l-0.1,1.1l-0.1,1.2
1974
+ l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6
1975
+ l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.3,0.6l-0.3,0.6l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3
1976
+ l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2
1977
+ l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.3
1978
+ h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1
1979
+ l-0.2-0.1l-0.2-0.1l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.4l-0.3-0.4l-0.3-0.4
1980
+ l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.4-0.8l-0.4-0.8l-0.4-0.8
1981
+ l-0.4-0.8l-0.3-0.7l-0.3-0.7l-0.3-0.6l-0.5-1.1l-0.4-0.8l-0.1-0.3l-0.1-0.2l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7
1982
+ l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8
1983
+ l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8
1984
+ l-0.1-0.8v-0.8v-0.8v-0.8v-0.8l-0.1-1.6v-1.6v-1.6v-1.6v-1.6v-1.6v-1.6v-1.6v-3.1v-3.1v-1.5v-1.5v-0.5v-0.5v-0.5v-0.5l0.1-0.5
1985
+ l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.2-0.5l0.3-1l0.3-1l0.3-1
1986
+ l0.3-0.9l0.3-0.9l0.3-0.9l0.3-0.9l0.1-0.3l0.1-0.3l0.3-0.6l0.3-0.6l0.3-0.6l0.7-1.3l0.3-0.6l0.3-0.6v-0.1v-0.2v-0.3v-0.3v-0.3
1987
+ l0.1-0.3l0.1-0.3L-196.9,1287.6z M-194.5,1297.5l-0.3,0.9l-0.3,0.9l-0.3,0.9l-0.3,0.9l-0.3,0.9l-0.3,0.9l-0.1,0.4l-0.1,0.4
1988
+ l-0.1,0.5l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4v0.4v0.4v0.4v0.4v0.4v1.5
1989
+ v1.5v3.1v3.1v1.6v1.6v1.6v1.6v1.6v1.6v1.6v1.6v0.8v0.8v0.8v0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8
1990
+ l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7
1991
+ l0.2,0.7l0.2,0.7l0.2,0.6l0.2,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.3,0.7l0.1,0.3l0.2,0.4l0.4,0.9l0.5,1.1l0.3,0.6l0.3,0.6
1992
+ l0.3,0.7l0.3,0.7l0.3,0.7l0.4,0.7l0.4,0.7l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3
1993
+ l0.2,0.3l0.2,0.3l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0,0h0.1h0.1l0,0l0,0h0.1h0.1l0,0l0,0
1994
+ l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0h0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2
1995
+ l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.2-0.5
1996
+ l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.6
1997
+ l0.1-0.6l0.1-0.6l0.1-0.5l0.1-1.1l0.1-1.1l0.2-1.5l0.2-1.5l0.2-1.5l0.2-1.5l0.4-3l0.4-3.1l0.2-1.5l0.2-1.5l0.2-1.5l0.2-1.5
1998
+ l0.2-1.5l0.2-1.5l0.1-1.5l0.1-1.5l0.1-0.8l0.1-0.8v-0.8v-0.8v-0.8v-0.8v-0.8v-0.8v-0.8v-0.8v-0.7v-0.8v-0.7v-0.7v-0.7v-0.7v-0.7
1999
+ v-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.2-0.7
2000
+ l-0.2-0.7l-0.1-0.5l-0.2-0.5l-0.2-0.6l-0.2-0.7l-0.3-0.7l-0.3-0.8l-0.3-0.8l-0.3-0.8l-0.4-0.8l-0.2-0.4l-0.2-0.4l-0.2-0.4
2001
+ l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.3-0.4
2002
+ l-0.2-0.4l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2
2003
+ l-0.2-0.1h-0.1l-0.1-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l0,0l0,0h-0.1l0,0l0,0l0,0l0,0h-0.1
2004
+ h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l-0.1,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.3h-0.3l-0.3-0.1l-0.2-0.1
2005
+ l-0.1,0.1l-0.1,0.3l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.6,1.2l-0.3,0.6l-0.3,0.5l-0.2,0.5l-0.1,0.2l-0.1,0.2L-194.5,1297.5z"
2006
+ />
2007
+ </g>
2008
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
2009
+ <path
2010
+ d="M-181.5,1393.6L-181.5,1393.6l0.2-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.2l0.2-0.2
2011
+ l0.2-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1h0.2h0.2h0.2h0.3h0.4h0.5h0.4l0.4,0.1l0.4,0.1l0.4,0.1
2012
+ l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.3,0.2l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3
2013
+ l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.4l0.1,0.3l0.1,0.3l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4
2014
+ l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4l-0.1,0.4
2015
+ l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4
2016
+ l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.2,0.4l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3
2017
+ l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.1
2018
+ l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.4,0.1h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.3-0.2l-0.3-0.2
2019
+ l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.3
2020
+ l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.1-0.5l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6
2021
+ l-0.1-0.6l-0.1-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-1.1v-1.1v-1l0.1-0.9v-0.4v-0.4v-0.4v-0.4l0.1-0.4l0.1-0.3
2022
+ l0.1-0.3l0.1-0.3l0.1-0.4l0.1-0.2l0.1-0.2l0.1-0.1l0,0l0.1-0.1l0.1-0.1l0,0l0.1-0.1l0.1-0.1l0,0l0,0l-0.1-0.2v-0.2v-0.2v-0.2
2023
+ v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2l0.1-0.2L-181.5,1393.6z M-176.3,1397.1v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2
2024
+ l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0v0.1v0.3v0.3v0.3v0.4l-0.1,0.8v0.9v0.9v1v0.5v0.5v0.5v0.5v0.5v0.6v0.5v0.5v0.5
2025
+ v0.5v0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.3l0.1,0.2l0,0l0.1-0.1l0.1-0.2
2026
+ l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3
2027
+ l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3v-0.3v-0.3v-0.4v-0.3v-0.3v-0.3v-0.3
2028
+ v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.2
2029
+ l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.1v-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.1
2030
+ l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1h-0.2h-0.2L-176.3,1397.1L-176.3,1397.1L-176.3,1397.1z M-180.9,1400.2
2031
+ l0.2,0.1l-0.1-0.1H-180.9L-180.9,1400.2l-0.2-0.2L-180.9,1400.2z"
2032
+ />
2033
+ </g>
2034
+ <g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
2035
+ <path
2036
+ d="M-240.4,1219l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.3
2037
+ l0.3-0.3l0.3-0.3l0.3-0.2l0.3-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1
2038
+ l0.3-0.1l0.3-0.1h0.3h0.3h0.3h0.3h0.3h0.3h0.3h0.4h0.3h0.1h0.1h0.1l0.2,0.1l0.2,0.1h0.1l0.1,0.1l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1
2039
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0,0l0.1,0.1l0.1,0.2l0,0l0.1,0.2l0.1,0.2l0,0l0.1,0.2l0.1,0.2l0,0v0.2v0.2l0,0v0.2v0.2
2040
+ v0.1v0.2v0.2v0.1v0.1v0.1v0.2l-0.1,0.3l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.1
2041
+ l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.2h-0.2h-0.3h-0.2h-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l0,0l0,0h-0.2h-0.2
2042
+ h-0.2h-0.2l-0.1,0.1h-0.1h-0.1h-0.1h-0.1h-0.1l0,0l0,0h-0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.2l-0.1,0.2
2043
+ l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2v0.2v0.2v0.2v0.2l0,0v0.1l0,0v0.1v0.1l0,0
2044
+ l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.1l0.2,0.1l0.4,0.3l0.4,0.3l0.5,0.3
2045
+ l0.5,0.3l0.5,0.3l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2
2046
+ l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l1.3,0.2l1.3,0.2l1.3,0.2l1.3,0.2l2.7,0.3l1.3,0.2l1.3,0.2
2047
+ l1.3,0.2l1.3,0.2l1.3,0.2l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.2l0.6,0.2l0.6,0.2l0.7,0.2
2048
+ l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1h0.5h0.5h0.4h0.4h0.4h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2
2049
+ h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0v-0.1v-0.1v-0.1v-0.1l0,0v-0.1l0,0l0,0l0,0
2050
+ v-0.1l0,0v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
2051
+ l-0.1-0.1l-0.1-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2
2052
+ l-0.3-0.2l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-1-0.3l-1-0.3
2053
+ l-1-0.3l-1-0.3l-1-0.3l-1-0.3l-1-0.3l-2.1-0.5l-2.1-0.5l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3
2054
+ l-1.1-0.3l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2
2055
+ l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2
2056
+ l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2v-0.2v-0.2v-0.3v-0.2v-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.2
2057
+ l0.2-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1h0.2h0.2h0.3h0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.4,0.3
2058
+ l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.5,0.2l0.5,0.2l0.5,0.2
2059
+ l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l1,0.3l1,0.3l1,0.3l1,0.3l1,0.3l1,0.3l1,0.3l1,0.3l2.1,0.5l2.1,0.5l1.1,0.3l1.1,0.3l1.1,0.3
2060
+ l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.3,0.1l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2
2061
+ l0.4,0.2l0.4,0.2l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.2,0.2l0.2,0.2l0.2,0.2
2062
+ l0.2,0.2l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3v0.3v0.3
2063
+ v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3
2064
+ l-0.3,0.3l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1
2065
+ l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3h-0.6h-0.6h-0.6h-0.6l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1
2066
+ l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.4-0.1l-0.8-0.2l-0.7-0.2l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1
2067
+ l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-1.2-0.2l-1.2-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-2.7-0.3l-1.4-0.2l-1.4-0.2
2068
+ l-1.4-0.2l-1.4-0.2l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2
2069
+ l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.6-0.2l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3
2070
+ l-0.6-0.4l-0.6-0.4l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2
2071
+ l-0.3-0.3l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.3l-0.1-0.2l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3
2072
+ l-0.1-0.3v-0.2v-0.3v-0.2v-0.2v-0.2v-0.2v-0.3v-0.4l0.1-0.5l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.2-0.4L-240.4,1219z
2073
+ M-233.2,1215.7L-233.2,1215.7L-233.2,1215.7L-233.2,1215.7z"
2074
+ />
2075
+ </g>
2076
+ <path
2077
+ d="M402.7,260L402.7,260h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
2078
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1
2079
+ l0.1,0.1v0.1v0.1l0.1,0.1v0.1v0.1v0.1v0.1v0.1l-0.1,0.1v0.1v0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2080
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2081
+ l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1L403,266l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2
2082
+ l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.1,0.2l-0.2,0.2l-0.1,0.2
2083
+ l-0.2,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2v0.1l-0.1,0.2l-0.1,0.3l-0.1,0.3l-0.2,0.7l-0.2,0.7l-0.2,0.7l-0.1,0.5
2084
+ l-0.1,0.3l0,0v0.1v0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2085
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1h-0.1h-0.1h-0.1h-0.1
2086
+ h-0.1h-0.1h-0.1H394h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1H393h-0.1h-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
2087
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
2088
+ l-0.1-0.1l-0.1-0.1l0,0v-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1l-0.1-0.1V275v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1l0.1-0.3l0.1-0.5l0.1-0.6
2089
+ l0.2-0.7l0.2-0.8l0.2-0.8l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.3l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3
2090
+ l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.3l0.2-0.3l0.3-0.3l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.2-0.3l0.3-0.3l0.3-0.2l0.3-0.2
2091
+ l0.3-0.2l0.3-0.2l0.4-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1l0.1-0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1
2092
+ h1.5V260z"
2093
+ />
2094
+ <path
2095
+ d="M413.3,271L413.3,271h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
2096
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1l0.1,0.1
2097
+ v0.1v0.1l0.1,0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1l-0.1,0.1v0.1v0.1l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1L416,275l-0.1,0.1l-0.1,0.1
2098
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1L415,276l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2099
+ l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.5,0.3l-0.5,0.3l-0.5,0.4l-0.5,0.4l-0.2,0.2l-0.3,0.2l-0.3,0.2l-0.2,0.2l-0.3,0.2
2100
+ l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.1,0.2l-0.1,0.1v0.1l0,0v0.1l0.1,0.2
2101
+ l0.1,0.4l0.1,0.4l0.1,0.4l0.2,0.5l0.1,0.5l0.1,0.3l0.1,0.3l0.1,0.3v0.2v0.1v0.1v0.1v0.1v0.1l-0.1,0.1v0.1v0.1v0.1l-0.1,0.1v0.1
2102
+ l0,0l-0.1,0.1v0.1l-0.1,0.1l0,0l-0.1,0.1l-0.1,0.1l-0.1,0.1v0.1h-0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0l-0.1,0.1l-0.1,0.1
2103
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1H407l-0.1,0.1l-0.1,0.1h-0.1h-0.1h-0.1l0,0h-0.1
2104
+ h-0.1h-0.1h-0.1H406h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l0,0h-0.1H405h-0.1h-0.2l-0.3-0.1h-0.2h-0.1H404h-0.1h-0.1h-0.1
2105
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
2106
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1l-0.1-0.1V286v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1
2107
+ v-0.1l0.1-0.1v-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1l0,0l-0.1-0.1l-0.1-0.5l-0.2-0.5l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.4
2108
+ v-0.4v-0.4l0.1-0.4v-0.3l0.1-0.2l0.1-0.3l0.1-0.3l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.3l0.2-0.3l0.3-0.3l0.2-0.3l0.3-0.3l0.2-0.3
2109
+ l0.3-0.3l0.3-0.3l0.4-0.3l0.3-0.3l0.3-0.3l0.4-0.3l0.3-0.3l0.4-0.3l0.3-0.3l0.4-0.3l0.3-0.3l0.7-0.5l0.7-0.4l0.7-0.4l0.6-0.4
2110
+ l0.3-0.2l0.3-0.2l0.2-0.2l0.2-0.1l0.1-0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h1.2V271z M406.4,283.1L406.4,283.1
2111
+ L406.4,283.1L406.4,283.1z"
2112
+ />
2113
+ <path
2114
+ d="M393,250.3L393,250.3h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
2115
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1
2116
+ l0.1,0.1v0.1v0.1l0.1,0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1l-0.1,0.1v0.1l-0.1,0.1v0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2117
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1L395,255l-0.1,0.1l-0.1,0.1l-0.2,0.2l-0.3,0.2l-0.2,0.2l-0.3,0.2l-0.2,0.2l-0.3,0.2
2118
+ l-0.3,0.2l-0.2,0.2l-0.3,0.2l-0.2,0.2l-0.5,0.3l-0.5,0.3l-0.5,0.2l-0.5,0.2l-0.4,0.2l-0.4,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1
2119
+ l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2120
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.4l-0.1,0.4l-0.2,0.9l-0.1,0.5l-0.1,0.3l-0.1,0.3l-0.1,0.3
2121
+ l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3L385,266l-0.2,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2122
+ L384,267l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1H383h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1H382h-0.1
2123
+ h-0.1h-0.1h-0.1h-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
2124
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1v-0.1l-0.1-0.1v-0.1
2125
+ v-0.1v-0.1v-0.1v-0.1v-0.1V264l0.1-0.1v-0.1l0.1-0.1v-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
2126
+ l0.1-0.1l0.1-0.1l0,0h0.1v-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.4l0.2-0.9l0.1-0.5l0.2-0.5l0.1-0.3l0.1-0.3l0.1-0.3
2127
+ l0.2-0.3l0.1-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.3l0.2-0.3l0.3-0.3l0.3-0.2l0.2-0.2l0.3-0.2l0.3-0.2l0.2-0.2
2128
+ l0.3-0.2l0.2-0.2l0.3-0.2l0.2-0.2l0.5-0.3l0.5-0.3l0.5-0.2l0.5-0.2l0.4-0.2l0.4-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.1-0.1
2129
+ l0.2-0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1l0.1-0.1h0.1h0.1h0.1h0.1
2130
+ h0.1h0.1h0.1h0.1h0.1h0.1h0.1L393,250.3z"
2131
+ />
2132
+ <path
2133
+ d="M400,91h0.2h0.1h0.2h0.1h0.2h0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
2134
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1L403,93l0,0v0.1l0.1,0.1v0.1v0.1v0.1l0,0v0.1
2135
+ l-0.1,0.1v0.1v0.1l-0.1,0.1v0.1l-0.1,0.1v0.1l-0.1,0.2l-0.1,0.3l-0.1,0.3l-0.3,0.5l-0.2,0.5l-0.4,0.6l-0.7,1.2l-0.7,1.2l-0.4,0.6
2136
+ l-0.2,0.5l-0.2,0.4l-0.1,0.2l-0.1,0.1l-0.3,0.8l-0.4,0.8l-0.3,0.8l-0.2,0.4l-0.1,0.4l-0.2,0.4l-0.2,0.4l-0.1,0.4l-0.1,0.4
2137
+ l-0.2,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4
2138
+ l-0.1,0.4v0.4l-0.1,0.4l-0.1,0.4v0.4v0.4v0.4v0.2l-0.1,0.2v0.2v0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2139
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.1h-0.1
2140
+ h-0.2H393h-0.2h-0.2h-0.1h-0.2h-0.2H392h-0.2h-0.2h-0.1h-0.2l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1
2141
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2v-0.2l-0.1-0.2V114v-0.2
2142
+ v-0.2v-0.5v-0.5l0.1-0.5v-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5
2143
+ l0.2-0.5l0.1-0.5l0.2-0.5l0.1-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.1-0.5l0.2-0.5l0.2-0.5l0.4-0.9l0.4-0.9l0.4-0.9l0.1-0.3l0.2-0.3
2144
+ l0.2-0.6l0.4-0.6l0.4-0.6l0.7-1.2l0.7-1.2l0.2-0.3l0,0v-0.2v-0.2l0.1-0.2V92l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
2145
+ l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.2l0.2-0.2l0.1-0.1l0.1-0.1l0.1-0.1h0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.1-0.1h0.1h0.1
2146
+ h0.1h0.2h0.1h0.1h0.2l0,0h0.1h0.2V91z"
2147
+ />
2148
+ <path
2149
+ d="M408.1,107.3h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
2150
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1
2151
+ v0.1v0.1l0,0v0.1v0.1v0.1v0.1v0.1v0.1v0.1l-0.1,0.1v0.3l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.2,0.4l-0.3,0.9l-0.4,1l-0.4,1.1l-0.5,1.2
2152
+ l-0.5,1.2l-0.5,1.2l-0.5,1.2l-0.5,1.2l-0.5,1.1l-0.4,1l-0.4,0.8l-0.3,0.7l-0.2,0.4l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2153
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1h-0.1h-0.1
2154
+ h-0.1h-0.2h-0.1h-0.1h-0.1h-0.3h-0.1H402h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
2155
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
2156
+ l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1v-0.1l-0.1-0.1v-0.1v-0.1v-0.1v-0.1l0.1-0.1v-0.1V124l0.1-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1
2157
+ l0.2-0.4l0.3-0.6l0.4-0.8l0.4-0.9l0.4-1.1l0.5-1.1l0.5-1.2l0.5-1.2l0.5-1.2l0.5-1.2l0.4-1.1l0.4-1l0.3-0.8l0.1-0.3l0.1-0.3
2158
+ l0.1-0.2V110v-0.1v-0.1l0.1-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
2159
+ l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1h0.1h0.1h0.1h0.1h0.2h0.1h0.1h0.1h-0.2V107.3z
2160
+ M405,110.4v0.2V110.4L405,110.4L405,110.4L405,110.4z"
2161
+ />
2162
+ <path
2163
+ fill="#25B3FF"
2164
+ d="M483.4,329.1L483.4,329.1h0.3h0.1h0.1h0.1h0.2h0.1l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
2165
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1h0.1l1.4-0.3l0.8-0.2l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.6-0.1h0.4
2166
+ h0.4h0.2h0.3h0.2h0.1h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.2l0.1,0.1l0.1,0.1l0,0l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0
2167
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2v0.1l0.1,0.1v0.1l0.1,0.2v0.2v0.1v0.2l-0.1,0.2
2168
+ v0.1v0.2l-0.1,0.1l0,0l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2169
+ l-0.1,0.1l0,0L494,334l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.4,0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
2170
+ l-0.4,0.1l-0.9,0.2l-0.8,0.2l-0.9,0.2l-0.2,0.1h-0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0l-0.2,0.1l-0.1,0.1h-0.1h-0.1h-0.1
2171
+ h-0.2h-0.1h-0.1H486l-1.4,0.1l-0.5,0.1l-0.5,0.1h-0.1l0,0l-0.2,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1h-0.2h-0.1h-0.2h-0.1h-0.2h-0.2
2172
+ h-0.1h-0.2h-0.2h-0.1h-0.1l-0.7,0.4l-0.8,0.4l-0.8,0.4l-0.5,0.2l-0.4,0.2l-0.4,0.2l-0.5,0.2l-0.4,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2
2173
+ l-0.5,0.2l-0.4,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1h-0.2h-0.2h-0.3h-0.2h0.4H472h-0.3h-0.3l-0.3-0.1l-0.2-0.1h-0.1l-0.1-0.1h-0.1
2174
+ l-0.1-0.1l-0.2-0.1h-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
2175
+ l0,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1h-0.1v-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.2v-0.2l0,0v-0.1v-0.1v-0.1
2176
+ l0.1-0.1v-0.1l0.1-0.1V337v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0,0l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1V336l0.1-0.1l0.1-0.1
2177
+ l0.1-0.1l0.1-0.1l0.2-0.2l0.2-0.2l0.2-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.2-0.1l0,0l0.2-0.1l0.2-0.1l0.2-0.1
2178
+ l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.1l0.5-0.1l0.4-0.1l0.5-0.1l0.4-0.1l0.4-0.1l0.5-0.1l0.9-0.2l0.4-0.1
2179
+ l0.1-0.1v-0.2l0.1-0.1l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
2180
+ l0.2-0.1h0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.2h0.1h0.1L483.4,329.1L483.4,329.1z"
2181
+ />
2182
+ <path
2183
+ fill="#25B3FF"
2184
+ d="M489.4,325L489.4,325h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
2185
+ l0.1,0.1l0.1,0.1l0.1,0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.2,0.2l0.2,0.2l0.1,0.1v0.1l0.1,0.1l0.1,0.3l0.1,0.3
2186
+ l0.1,0.1v0.1l0.1,0.1l0.1,0.3l0.1,0.4l0.1,0.4v0.4v0.4v0.4l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3
2187
+ l-0.1,0.3l-0.2,0.3l-0.1,0.3l-0.2,0.2l-0.2,0.2l-0.1,0.2l-0.2,0.2l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4
2188
+ l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3L486,339l-0.4,0.3l-0.3,0.2l-0.3,0.2l-0.2,0.2l0,0l-0.3,0.4
2189
+ l-0.4,0.5l-0.4,0.5l-0.5,0.7l-0.7,0.8l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2190
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1h-0.1H481h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.2h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1
2191
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l0,0h-0.1L478,343l-0.3-0.1l-0.1-0.1h-0.1
2192
+ h-0.1h-0.1h-0.1h-0.1H477h-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.2L476,342l-0.2-0.2l-0.1-0.2l-0.1-0.2v-0.1
2193
+ l-0.1-0.1l-0.1-0.1l0,0l-0.1-0.1v-0.1l-0.1-0.1v-0.1v-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1v-0.1V340v-0.1v-0.1v-0.1v-0.1v-0.1v-0.2
2194
+ V339l0.1-0.3l0.1-0.3l0.1-0.4l0.2-0.4l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.3l0.2-0.3
2195
+ l0.3-0.3l0.5-0.6l0.3-0.3l-0.1-0.3l-0.1-0.2l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1
2196
+ v-0.1l-0.1-0.1v-0.1v-0.1V331v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1l0.1-0.1l0,0v-0.1V330l0.1-0.1v-0.1l0.1-0.1v-0.1l0.1-0.1v-0.1
2197
+ h0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1h0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.2l0.4-0.2l0.3-0.2l0.4-0.2
2198
+ l0.3-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.8-0.2l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1
2199
+ l0.4-0.1l0.4-0.1l0.4-0.1h0.3h0.4h0.3L489.4,325L489.4,325z"
2200
+ />
2201
+ </g>
2202
+ <path
2203
+ fill="#0096FF"
2204
+ d="M447.3,221.9h0.8h0.8h0.7h0.7h0.7h0.7l0.7,0.1l0.7,0.1l0.7,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.5,0.1l0.5,0.1
2205
+ l0.5,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.3,0.3l0.1,0.2l0.1,0.1
2206
+ l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.1l0.1,0.2v0.2l0.1,0.1v0.2l0.1,0.2v0.1v0.1v0.1v0.2v0.3l-0.1,0.2
2207
+ v0.3l-0.1,0.3l-0.1,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3
2208
+ l0.1,0.2l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1l0.3,0.3l0.3,0.3l0.1,0.2l0.1,0.2l0.5,0.8l0.2,0.4
2209
+ l0.1,0.1l0.1,0.1l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.3,0.6l0.4,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.2,0.6l0.3,0.6l0.2,0.6
2210
+ l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.3,1.2l0.7,2.5
2211
+ l0.4,1.2l0.3,1.2l0.4,1.1l0.2,0.4l0.4,0.5l0.4,0.6l0.3,0.6l0.4,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.2,0.6l0.3,0.6l0.2,0.6l0.1,0.3
2212
+ l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3l0.1,0.3v0.3v0.3v0.3v0.3v0.3v0.3l-0.1,0.3
2213
+ l-0.1,0.3v0.2l0.1,0.6l0.2,1.1l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5v0.5v0.4v0.3v0.2v0.2l-0.1,0.3
2214
+ l-0.1,0.3l-0.1,0.2v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.2l-0.1,0.2v0.1l-0.1,0.2l-0.2,0.2l0,0l-0.2,0.2l-0.1,0.2l-0.2,0.1h-0.1l-0.1,0.1
2215
+ l-0.1,0.1h-0.1l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.2l-0.2,0.2
2216
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1l-0.1,0.1l-0.2,0.1l0,0h-0.1h-0.2h-0.1h-0.1h-0.1h-0.1h-0.2h-0.1h-0.1H476h-0.1h-0.1h-0.2h-0.2
2217
+ h-0.1h-0.2l-0.2-0.1h-0.1l-0.2-0.1l-0.2-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.3-0.2l-0.2-0.2
2218
+ l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.3l-0.3-0.5l-0.3-0.5l-0.2-0.4h-0.1h-0.4H470h-0.4h-0.4h-0.4h-0.4
2219
+ l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1L466,280l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.3-0.2
2220
+ l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.4-0.2l-0.3-0.3l-0.4-0.3l-0.3-0.3
2221
+ l-0.4-0.3l-0.3-0.3l-0.3-0.3l-0.4-0.3l-0.3-0.3l-0.3-0.3l-0.6-0.6l-0.7-0.6l-0.5-0.6l-0.6-0.6l-0.6-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7
2222
+ l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.4-0.7l-0.5-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.2-0.4l-0.1-0.4l-0.1-0.2
2223
+ l0,0h-0.1h-0.1l-0.5-0.1l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.5-0.2l-0.4-0.2l-0.4-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2
2224
+ l-0.2-0.2l-0.2-0.2l-0.5-0.4l-0.5-0.5l-0.7-0.6l-0.7-0.7l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.5l-0.4-0.5l-0.4-0.5
2225
+ l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5L433,249l-0.2-0.3l-0.1-0.3l-0.2-0.3l-0.1-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3
2226
+ l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.3l0,0h-0.1l-0.4-0.4l-0.5-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4
2227
+ l-0.3-0.4l-0.4-0.4l-0.1-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.2-0.2l-0.1-0.2h-0.1l-0.1-0.1l-0.3-0.2l-0.2-0.3l-0.3-0.3
2228
+ l-0.3-0.3l-0.2-0.3l-0.1-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.2l-0.1-0.1v-0.1v-0.2l-0.1-0.2v-0.1l0.1-0.1v-0.1
2229
+ v-0.1v-0.1v-0.1l0.1-0.1v-0.1l0.1-0.2l0.1-0.2l0.1-0.1l0,0l-0.1-0.1l0,0l-0.5-0.1l-0.4-0.1l-0.3-0.1l-0.3-0.1l-0.4-0.1l-0.3-0.1
2230
+ l-0.4-0.1l-0.4-0.2l-0.3-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.1-0.2l-0.1-0.2H420
2231
+ l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2l-0.1-0.3l0,0v-0.2v-0.2v-0.1v-0.1l0.1-0.1v-0.3l0.1-0.4l0.1-0.4l0.1-0.3l0.2-0.3l0.2-0.3l0.2-0.3
2232
+ l0.2-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.3-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.2-0.1
2233
+ l0.3-0.1l0.6-0.2l0.6-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.8-0.1l0.7-0.1l0.7-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1
2234
+ l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1h0.8h0.8h0.8h0.8h0.8h0.8h2.5V221.9z M463.1,271.3l-0.2,0.1l0,0l-0.2,0.1
2235
+ l-0.2,0.1h-0.1h-0.2H462h-0.2l0,0l0,0l0.3,0.2l0.2,0.2l0.3,0.2l0.2,0.2l0.3,0.2l0.2,0.2l0.3,0.2l0.2,0.2l0.3,0.2l0.2,0.2l0.2,0.2
2236
+ l0.2,0.1l0.3,0.1l0.2,0.1l0.1,0.1l-0.7-0.9l-0.7-1L463.1,271.3l-0.1-0.1l-0.2-0.1L463.1,271.3z"
2237
+ />
2238
+ <path
2239
+ d="M438.7,215.5h0.6h0.6h0.5h0.6h0.5h0.6h0.5l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l1,0.1l0.9,0.2l0.9,0.2
2240
+ l0.8,0.2l0.8,0.2l0.7,0.2l0,0h0.1h0.2h0.2h0.2h0.3l0.6-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.8-0.1h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4
2241
+ l0.4,0.1l0.4,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0.3,0.2l0.2,0.2l0.2,0.2l0.5,0.5l0.5,0.5l0.4,0.5l0.5,0.5l0.4,0.5
2242
+ l0.5,0.5l0.4,0.5l0.5,0.5l0.4,0.5l0.4,0.5l0.4,0.5l0.5,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6
2243
+ l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.3,0.7l0.4,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7
2244
+ l0.3,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.1,0.8l0.2,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8
2245
+ l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8v0.8v0.8v0.8l-0.1,0.8v0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.4l-0.1,0.4l-0.1,0.5
2246
+ l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.2,0.5l-0.1,0.5l-0.1,0.5l-0.2,0.5l-0.1,0.4l-0.2,0.4l-0.1,0.4l-0.2,0.4l-0.1,0.4
2247
+ l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.3l-0.2,0.3l-0.2,0.3
2248
+ l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.3l-0.2,0.3l-0.3,0.2l-0.2,0.2
2249
+ l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.4,0.2l-0.3,0.2l-0.3,0.1l-0.4,0.1l-0.3,0.1
2250
+ l-0.4,0.1l-0.4,0.1l-0.3,0.1l-0.4,0.1l-0.4,0.1l-0.3,0.1l-0.4,0.1l-0.4,0.1h-0.4h-0.4h-0.4h-0.3h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4
2251
+ h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.4-0.1l-0.4-0.1
2252
+ l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2
2253
+ l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.4-0.3l-0.3-0.3l-0.4-0.3l-0.3-0.3
2254
+ l-0.4-0.4l-0.4-0.4l-0.3-0.4l-0.4-0.4l-0.3-0.4l-0.4-0.4l-0.3-0.4l-0.4-0.4l-0.3-0.4l-0.3-0.4l-0.4-0.4l-1-1.4l-1-1.3l-0.9-1.3
2255
+ l-0.9-1.3l-0.9-1.3l-0.9-1.3l-0.9-1.3l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6
2256
+ l-0.4-0.6l-0.4-0.6l-0.3-0.6l-0.4-0.6l-0.3-0.6l-0.4-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.2-0.6l-0.3-0.6l-0.2-0.6l-0.2-0.7l-0.2-0.7
2257
+ l-0.2-0.7l-0.2-0.7l-0.2-0.7l-0.2-0.7l-0.2-0.7l-0.2-0.7l-0.1-0.7l-0.2-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7
2258
+ l-0.1-0.7l-0.1-0.7v-0.7v-0.7V231l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2
2259
+ l-0.1-0.2L419,229l-0.1-0.3l-0.1-0.3v-0.3v-0.3v-0.3l0.1-0.3v-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3
2260
+ l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.3l0.1-0.3l0.2-0.3l0.1-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2
2261
+ l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1l0.3-0.1l0.2-0.1l0.3-0.1l0.5-0.2
2262
+ l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.6-0.2l0.5-0.1l0.5-0.1l0.6-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.6-0.1h0.6h0.5h0.6h0.6h0.6h0.6h3.2
2263
+ V215.5z M437.6,221.4h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5l-0.4,0.1l-0.5,0.1l-0.4,0.1l-0.5,0.1l-0.4,0.1L432,222l-0.4,0.1l-0.4,0.1
2264
+ l-0.4,0.1l-0.4,0.1l-0.3,0.1l-0.4,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l0,0l0.1,0.2l0.1,0.2
2265
+ l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.3l0.1,0.3v0.3l-0.1,0.3l-0.1,0.7l-0.1,0.6l-0.1,0.6v0.6l-0.1,0.6v0.6v0.6v0.6v0.6v0.6l0.1,0.6v0.6
2266
+ l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.2,0.6l0.1,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6
2267
+ l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.3,0.6l0.2,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.4,0.6l0.3,0.6l0.4,0.6l0.3,0.6
2268
+ l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.8,1.2l0.9,1.2l0.9,1.3l0.9,1.3l0.9,1.3l0.9,1.3l1,1.3l0.3,0.4
2269
+ l0.3,0.4l0.3,0.4l0.3,0.4l0.2,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.2,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.2,0.3
2270
+ l0.3,0.3l0.3,0.3l0.2,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.2l0.3,0.2l0.2,0.2l0.3,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.3,0.2l0.3,0.2
2271
+ l0.2,0.2l0.2,0.2l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
2272
+ l0.2,0.1l0.2,0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2l0.2-0.1l0.2-0.1l0.2-0.1
2273
+ l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.2
2274
+ l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.3l0.1-0.3
2275
+ l0.2-0.3l0.2-0.3l0.1-0.3l0.2-0.3l0.1-0.3l0.2-0.3l0.1-0.3l0.2-0.3l0.1-0.3l0.2-0.3l0.1-0.3l0.1-0.3l0.1-0.4l0.2-0.4l0.1-0.4
2276
+ l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.5l0.1-0.3l0.1-0.3l0.1-0.7
2277
+ l0.1-0.6l0.1-0.6l0.1-0.7l0.1-0.7v-0.6v-0.7v-0.7v-0.7l-0.1-0.7V252l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7
2278
+ l-0.2-0.7l-0.1-0.7l-0.2-0.7l-0.1-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.3-0.6l-0.2-0.6
2279
+ l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.4-0.6l-0.3-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.5
2280
+ l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.4l-0.4-0.4
2281
+ l-0.4-0.4l-0.4-0.4l-0.4-0.4h-0.1h-0.2h-0.2h-0.3h-0.2h-0.3h-0.3l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1h-0.4h-0.4H450h-0.4
2282
+ h-0.4h-0.4h-0.4l-0.3-0.1l-0.8-0.2l-0.7-0.2l-0.8-0.2l-0.8-0.1l-0.8-0.1l-0.9-0.1l-0.4-0.1l-0.5-0.1l-0.5-0.1h-0.5h-0.5h-0.5h-0.5
2283
+ h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h0.7V221.4z"
2284
+ />
2285
+ <path
2286
+ fill="#0096FF"
2287
+ d="M481.7,317.6L481.7,317.6h0.3h0.2h0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.4,0.2l0.4,0.2
2288
+ l0.4,0.2l0.7,0.4l0.2,0.2l0.2,0.1l0.2,0.1h0.1l0,0l0.2,0.1l0.7,0.2l0.9,0.3l1,0.3l0.6,0.2l0.6,0.2l0.7,0.2l0.7,0.2l0.7,0.3l0.7,0.3
2289
+ l0.7,0.3l0.3,0.2l0.4,0.2l0.3,0.2l0.4,0.2l0.3,0.2l0.4,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.3
2290
+ l0.3,0.3l0.2,0.3l0.2,0.3l0,0l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.1l0.5-0.1l0.5-0.1h0.5h0.5h0.4h0.5h0.5h0.5l0.5,0.1l0.4,0.1
2291
+ l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.4,0.1l0.5,0.1l0.5,0.1l0.9,0.2l0.9,0.2l0.4,0.1l0.2-0.1l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.1
2292
+ l0.7-0.1l0.7-0.1l0.6-0.1l0.6-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.8-0.1l0.7-0.1h0.5h0.3h0.2h0.3l0.3,0.1l0.2,0.1l0.2,0.1
2293
+ l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.1l0.2,0.1l0.2,0.2l0.2,0.2h0.1l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2h0.1l0.1,0.2l0.1,0.2h0.1
2294
+ l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.2,0.1l0,0l0.2,0.1l0.1,0.1l0,0l0.2,0.1l0.1,0.1l0,0l0.2,0.2l0.2,0.2l0,0l0.1,0.2l0.1,0.2
2295
+ l0.1,0.2l0,0l0.1,0.2v0.2l0.1,0.2l0,0v0.2l-0.1,0.2v0.2l0,0l-0.1,0.2l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.2l-0.2,0.2l0,0l-0.1,0.2
2296
+ l-0.2,0.2l0,0l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1H523l-0.1,0.3
2297
+ l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.1,0.3l-0.2,0.3l-0.1,0.3l-0.2,0.2l-0.2,0.3l-0.3,0.5l-0.4,0.5l-0.4,0.4l-0.4,0.4l-0.4,0.4
2298
+ l-0.4,0.4l-0.7,0.8l-0.2,0.2v0.1l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.1,0.3l-0.2,0.3l-0.1,0.3l-0.2,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3
2299
+ l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l0,0l-0.1,0.1l-0.2,0.1h-0.1l-0.2,0.1l-0.2,0.1h-0.1
2300
+ l-0.2,0.1h-0.2h-0.2l0,0h-0.3h-0.2h-0.3h-0.1h-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1h-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l0,0
2301
+ l-0.2-0.2l-0.1-0.2l-0.2-0.2l0,0l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2l-0.1-0.2l0,0v-0.1v-0.1l-0.1-0.2v-0.3v-0.2l0.1-0.3v-0.2l0.1-0.3
2302
+ l0.1-0.3l0.1-0.1l-0.4,0.5l-0.4,0.5l-0.3,0.4l-0.2,0.4l-0.2,0.3l-0.2,0.3l-0.1,0.2l0,0l-0.1,0.1v0.1v0.1l-0.1,0.1l0,0l0.1,0.1
2303
+ l0.2,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.4l0.2,0.4l0.1,0.4l0.1,0.4l0.1,0.4v0.4l-0.1,0.4l0.5,0.2
2304
+ l0.8,0.3l0.8,0.3l0.8,0.3l0.2,0.1h0.2l1.3,0.2l0.7,0.1l0.7,0.1l0.7,0.1l0.6,0.1l0.7,0.1l0.6,0.2l0.5,0.2l0.4,0.1l0.5-0.1l0.4-0.1
2305
+ l0.4-0.1h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.5l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1
2306
+ l0.5,0.1l0.5,0.1l0.5,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.4,0.2l0.2,0.1l0.2,0.1h0.1l0.2,0.2l0,0
2307
+ l0.2,0.1l0.1,0.1h0.1l0.1,0.2l0.2,0.2l0.1,0.2l0,0l0.1,0.2l0.1,0.3l0.1,0.3l0.1,0.3l0,0v0.2v0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2
2308
+ l0,0l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.2l0,0l-0.2,0.2l-0.2,0.2l-0.2,0.1l0,0l-0.2,0.1l-0.2,0.1H535h-0.2h-0.1h-0.2h-0.1
2309
+ h-0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.4,0.1l-0.2,0.1h-0.3h-0.3l-0.5,0.1h-0.6h-0.5h-0.6l-1.2,0.1h-0.5h-0.5h-0.4h-0.3h-0.2h-0.4
2310
+ l-0.7,0.1l-0.8,0.1l-0.8,0.1l-0.9,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5l-0.5-0.1h-0.3h-0.1
2311
+ l-0.9,0.4l-1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-0.7,0.2l-0.6,0.2l-0.6,0.2l-0.7,0.2l-0.7,0.2l-0.6,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2
2312
+ l-0.7,0.2l-0.6,0.2l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.6,0.1h-0.7h-0.7h-0.6h-0.3h-0.3h-0.4h-0.3h-0.3H496
2313
+ h-0.3h-0.3l-0.3-0.1l-0.4-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.2-0.2
2314
+ l-0.3-0.2l-0.2-0.2l-0.3-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l0,0h-0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1
2315
+ l-0.5,0.1h-0.4H487h-0.4h-0.4h-0.4h-0.5h-0.8h-0.9h-0.8H482h-0.8h-0.9h-0.8l-0.8-0.1l-1.5-0.1l-1.5-0.1l-1.4-0.1h-0.7H473h-0.6
2316
+ h-0.5h-0.2h-0.2h-0.6h-0.7l-0.8,0.1l-0.8,0.1l-0.8,0.1H467h-0.4h-0.4h-0.4h-0.4H465h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.2-0.1
2317
+ l-0.3-0.1l-0.3-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1h-0.1l-0.2-0.1l-0.1-0.1h-0.1l-0.1-0.2l-0.2-0.2H461l-0.1-0.2l-0.1-0.2v-0.1
2318
+ l-0.1-0.2l-0.1-0.2l-0.1-0.2v-0.1l-0.1-0.2v-0.2v-0.2v-0.1v-0.3v-0.3v-0.1l0.1-0.2l0.1-0.2V356l0.1-0.2l0.1-0.2v-0.1l0.1-0.1
2319
+ l0.1-0.1v-0.1l0.2-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.2l0.2-0.1l0.2-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.1l0.4-0.1l0.4-0.1
2320
+ l0.5-0.1l0.4-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.6-0.1l1.1-0.2l0.6-0.1l0,0l0.1-0.2l0.1-0.2l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4
2321
+ l0.3-0.4l0.2-0.4l0.3-0.4l0.3-0.4l0.4-0.4l0.3-0.3l0.3-0.4l0.3-0.3l0.4-0.3l0.3-0.3l0.3-0.3l0.4-0.3l0.3-0.3l0.3-0.3l0.3-0.3
2322
+ l0.3-0.2l0.3-0.2l0.4-0.3l0.4-0.3l0.4-0.3l0.5-0.3l0.6-0.3l0.5-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.4-0.2l0,0l-0.3-0.1l-0.3-0.1
2323
+ l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.2-0.2l-0.3-0.2l-0.3-0.2
2324
+ l-0.2-0.2l-0.3-0.2l-0.2-0.2l-0.3-0.2l-0.2-0.2l-0.3-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.1h-3.7
2325
+ h-0.3h-0.2l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.2-0.2l-0.1-0.3l-0.1-0.3
2326
+ l-0.1-0.3v-0.3v-0.3v-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.3-0.1l0.2-0.1
2327
+ l0.3-0.1h0.2h0.3h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2l0.2-0.1l0.3-0.1l0.2-0.1l0.2-0.1l0.3-0.1l0.2-0.1l0.6-0.2l0.5-0.2l0.6-0.2
2328
+ l0.6-0.2l0.3-0.1l-0.1-0.2v-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.3l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1
2329
+ l0.2-0.1l0.3-0.1h0.3h0.3h0.2h0.1h0.4h0.4l0.5-0.1l0.5-0.1l0.5-0.1h0.2l0.1-0.1l0.3-0.3l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.2l0.3-0.2
2330
+ l0.3-0.2l0.3-0.2l0.2-0.2l-0.4-0.1l-0.5-0.1l-0.3-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.3-0.2
2331
+ l-0.3-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.1l-0.1-0.2
2332
+ l-0.1-0.2l-0.1-0.1l-0.1-0.2v-0.2l-0.1-0.1v-0.2v-0.2l-0.1-0.1v-0.2v-0.2l0.1-0.1v-0.2v-0.2l0.1-0.2l0.1-0.2v-0.1l0.1-0.1l0,0
2333
+ l0.1-0.2l0.1-0.2l0,0l0.1-0.2l0.1-0.2l0,0l0.1-0.1l0.2-0.1l0,0l0.2-0.2l0.2-0.1l0,0l0.2-0.1l0.2-0.1h0.1l0.2-0.1l0.2-0.1l0,0
2334
+ l0.2-0.1l0.2-0.1l0,0h0.2h0.2h0.1h0.3L481.7,317.6z M492.7,346.7l-1.1,0.8l-1.1,0.8l-1.1,0.8l-1.2,0.8l-1.1,0.8l-0.8,0.6l0.4-0.1
2335
+ l0.6-0.2l0.7-0.2l0.5-0.2l0.2-0.1l0.2-0.2l0.7-0.4l0.6-0.4l0.6-0.4l0.6-0.4l0.6-0.4l0.9-0.7l0,0v-0.1v-0.1v-0.1v-0.1v-0.1V347v-0.1
2336
+ v-0.1l-0.1-0.1v-0.1L492.7,346.7L492.7,346.7L492.7,346.7L492.7,346.7z M491.1,334.8v0.3l0.1,0.3v0.3l0,0h0.2l0.3,0.1l0.2,0.1
2337
+ l0.2,0.1l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.1-0.1h-0.2h-0.4h-0.5h-0.4h-0.4H491L491.1,334.8z"
2338
+ />
2339
+ <path
2340
+ d="M521.4,320.1h0.5h0.5l0.4,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.4,0.1l0.4,0.2l0.2,0.1l0.2,0.1l0.2,0.1
2341
+ l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0.2,0.4l0.2,0.4
2342
+ l0.1,0.4l0.2,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4v0.4v0.4v0.4v0.3l-0.1,0.4l-0.1,0.3l-0.1,0.3
2343
+ l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3
2344
+ l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.4,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.3l-0.5,0.3l-0.5,0.3
2345
+ l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.9,0.6l-0.9,0.6l-0.8,0.5l-0.4,0.3l-0.4,0.3l-0.4,0.2l-0.4,0.2l-0.3,0.2l-0.4,0.2l-0.2,0.2l-0.2,0.2
2346
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l0,0l0,0h-0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0
2347
+ l0,0v0.1v0.1l0,0l0.1,0.1v0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1h0.2h0.3h0.3h0.4l0.8,0.1
2348
+ l0.9,0.1l1.1,0.1l2.4,0.1l1.2,0.1l1.4,0.1l1.3,0.1l1.4,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1
2349
+ l0.7,0.1l0.7,0.1l0.6,0.1l0.7,0.1l0.6,0.2l0.7,0.2l0.6,0.2l0.5,0.2l0.3,0.1l0.3,0.1l0.3,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0.3,0.1
2350
+ l0.2,0.1l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3
2351
+ l0.1,0.3l0.1,0.3l0.1,0.4l0.1,0.4l0.1,0.4v0.4v0.4l-0.1,0.4l-0.1,0.4l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3
2352
+ l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.4,0.4l-0.3,0.4l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3
2353
+ l-0.4,0.3l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
2354
+ l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1h-0.4h-0.4H530h-0.4h-0.8H528h-0.8h-0.8h-0.8h-1.5h-1.5h-0.7h-0.7h-0.7h-0.7h-0.7
2355
+ h-0.3h-0.4l-2.6,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.1l-1.4,0.1l-1.4,0.1
2356
+ l-1.3,0.1H486h-1.4h-1.3h-1.4h-1.4h-1.4h-1.3h-1.4H475h-0.3h-0.4h-0.4h-0.4l-1.1,0.1l-1.2,0.1l-1.3,0.1l-1.4,0.1l-0.7,0.1h-0.7
2357
+ h-0.8h-0.7h-0.8H464h-0.7h-0.8h-0.7h-0.7h-0.4h-0.4h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.4-0.1l-0.4-0.1
2358
+ l-0.3-0.1l-0.4-0.1l-0.3-0.1l-0.4-0.2l-0.3-0.2l-0.4-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.3l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.3l-0.2-0.3
2359
+ l-0.1-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.3l-0.1-0.3v-0.3l0.1-0.3v-0.3l0.1-0.3l0.1-0.3
2360
+ l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.2l0.1-0.2l0.1-0.2l0.2-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.4
2361
+ l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.5-0.4l0.4-0.4l0.5-0.4l0.5-0.3l0.5-0.3l0.4-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3
2362
+ l0.5-0.3l1-0.6l1-0.6l0.9-0.6l1-0.6l0.9-0.5l1.8-1l0.8-0.5l0.7-0.4l0.3-0.2l0.3-0.2l0.3-0.2l0.2-0.2l0.2-0.1l0.2-0.1l0.1-0.1l0,0
2363
+ h0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0h-0.1l0,0l0,0h-0.1l0,0h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
2364
+ l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.3-0.2l-0.2-0.2l-0.3-0.2l-0.3-0.2l-0.4-0.2l-0.3-0.1l-0.4-0.1l-0.4-0.1
2365
+ l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.8-0.3l-0.8-0.3l-1.6-0.5l-0.8-0.2l-0.7-0.2l-0.7-0.2l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.4-0.1
2366
+ l-0.3-0.1l-0.3-0.2l-0.4-0.2l-0.3-0.2L457,339l-0.3-0.3l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.1l-0.1-0.2v-0.1
2367
+ l-0.1-0.2l-0.1-0.2v-0.1l-0.1-0.2l-0.1-0.2v-0.1v-0.2v-0.2v-0.1v-0.2v-0.2v-0.1l0.1-0.2v-0.2l0.1-0.1v-0.2l0.1-0.2l0.1-0.1l0.1-0.1
2368
+ l0.1-0.1l0.1-0.1l0.1-0.2l0.1-0.1l0.2-0.2l0.1-0.1l0.2-0.2l0.4-0.4l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3
2369
+ l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.2l0.4-0.2l0.4-0.2l0.5-0.2l0.4-0.2l0.4-0.2l0.4-0.2
2370
+ l0.5-0.2l0.4-0.2l0.5-0.2l0.4-0.2l0.5-0.2l0.4-0.2l0.5-0.2l0.4-0.2l0.5-0.2h0.1L470,325l-0.3-0.3l-0.2-0.3l-0.3-0.3l-0.1-0.2
2371
+ l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2v-0.2l-0.1-0.3v-0.3v-0.3v-0.2V321l0.1-0.2l0.1-0.2l0.1-0.2
2372
+ l0.1-0.3l0.1-0.3l0.1-0.2l0.1-0.3l0.2-0.4l0.2-0.3l0.3-0.3l0.2-0.3l0.2-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2
2373
+ l0.3-0.2l0.3-0.2l0.3-0.1l0.4-0.1l0.3-0.1l0.4-0.1l0.6-0.3l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l1.2-0.3
2374
+ l1.1-0.3l0.4-0.1l0.4-0.1h0.5h0.4h0.4h0.4h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.4,0.2l0.4,0.2
2375
+ l0.3,0.2l0.4,0.2l0.3,0.2l0.3,0.2l0.4,0.2l0.6,0.4l0.6,0.4l0.7,0.4l0.6,0.4l0.6,0.4l0.5,0.4l0.6,0.4l1.1,0.8l0.5,0.4l0.5,0.4
2376
+ l0.5,0.4l0.5,0.3l0.5,0.3l0.5,0.3l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0.2,0.1h0.1h0.1h0.1l0,0h0.1
2377
+ h0.1h0.2h0.2h0.2h0.3h0.2h0.3l0.7-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.9-0.1l2-0.3l1-0.2l1-0.1l1.1-0.1l1.1-0.1l1.1-0.1l1.1-0.1l1-0.1
2378
+ h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5L521.4,320.1z M485.3,319L485.3,319L485.3,319h-0.2l-1.1,0.3l-1.2,0.3l-0.6,0.2l-0.6,0.2l-0.6,0.2
2379
+ l-0.6,0.2l-0.6,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.1h0.1l0.2,0.2l0.3,0.2l0.4,0.2
2380
+ l0.4,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3h0.1l0.3,0.1l0.3,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2
2381
+ l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2
2382
+ l-0.2,0.2l-0.3,0.2l-0.2,0.1l-0.3,0.1H480h-0.1l-0.3,0.1l-0.7,0.1l-1.9,0.3l-1.1,0.2l-0.9,0.2l-0.4,0.1l-0.4,0.1H474h-0.1l-0.4,0.1
2383
+ l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
2384
+ l-0.4,0.2l-0.3,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.3,0.2l-0.4,0.2l-0.2,0.1l0.5,0.1l1.6,0.5l0.8,0.3l0.9,0.3l0.4,0.2l0.5,0.2
2385
+ l0.4,0.2l0.4,0.2l0.5,0.2l0.4,0.2l0.5,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.2,0.2
2386
+ l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0.2,0.2l0.1,0.2l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3
2387
+ l0.1,0.3l0.1,0.3v0.3l0.1,0.3v0.3v0.3v0.3l-0.1,0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.2
2388
+ l-0.2,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.2l-0.3,0.2l-0.4,0.2l-0.4,0.2l-0.3,0.2l-0.4,0.2l-0.4,0.2l-0.8,0.5
2389
+ l-0.8,0.5l-1.8,1l-0.9,0.5l-0.9,0.5l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.4,0.3l-0.5,0.3l-0.5,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3
2390
+ l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2391
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1v0.1l0,0l0,0h-0.1l0,0l0,0l0,0h0.1v0.1h0.1l0.1,0.1v0.1h0.1h0.1h0.1h0.1h0.1h0.1
2392
+ h0.2h0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.3h0.2h0.6h0.7h0.6h0.7h0.7h0.7h0.7h0.7h0.7h0.7l1.4-0.1l1.3-0.1l1.2-0.1l1.1-0.1h0.5
2393
+ h0.5h0.5h0.5h1.3h1.4h1.3h1.3h1.3h1.4h1.3h1.4h1.3l1.3-0.1l1.4-0.1l1.3-0.1l2.6-0.1l2.7-0.2l2.7-0.2l2.7-0.2l2.6-0.2l2.7-0.2
2394
+ l2.7-0.2l2.6-0.2l2.7-0.2l2.7-0.2h0.4h0.4h0.8h0.8h0.8h0.8h0.8h1.5h1.5h0.7h0.7h0.7h0.7h0.7h0.4h0.3h0.3h0.4h0.3h0.3l0.3-0.1
2395
+ l0.3-0.1l0.3-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.2-0.1l0.2-0.1l0.3-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1
2396
+ l0.2-0.1l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.3l0.2-0.3l0.1-0.1l0.1-0.1l0.1-0.1
2397
+ l0.1-0.1l0.1-0.1v-0.1l0,0h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.2-0.1
2398
+ l-0.2-0.1l-0.2-0.1l-0.4-0.1l-0.4-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.7-0.1
2399
+ l-0.6-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-1.3-0.1l-1.3-0.1l-1.2-0.1l-1.3-0.1l-2.4-0.1l-1.1-0.1l-1.1-0.1l-0.9-0.1h-0.5l-0.4-0.1
2400
+ l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1l-0.2-0.1h-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1
2401
+ l-0.4-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.1-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3
2402
+ L510,346l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.3v-0.3v-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.3l0.1-0.3
2403
+ l0.2-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.5-0.3
2404
+ l0.4-0.3l0.5-0.3l0.4-0.3l0.9-0.6l0.9-0.6l0.9-0.6l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.3-0.3l0.4-0.3
2405
+ l0.3-0.3l0.1-0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1v-0.1
2406
+ l0.1-0.1l0.1-0.1l0.1-0.1v-0.1l0.1-0.1v-0.1l0.1-0.1V330v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.2l-0.1-0.2v-0.2l-0.1-0.2l-0.1-0.2
2407
+ l-0.1-0.2L524,328l-0.1-0.2l-0.1-0.2l-0.1-0.2v-0.1h-0.1l0,0h-0.1l-0.2-0.1l-0.1-0.1L523,327h-0.2h-0.2h-0.3H522h-0.4h-0.3h-0.4
2408
+ h-0.4h-0.4h-0.4h-0.4h-0.4h-0.5H518h-0.5l-0.9,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-0.9,0.1l-2,0.3l-0.9,0.1l-0.9,0.1l-0.8,0.1
2409
+ l-0.8,0.1l-0.8,0.1h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.4-0.1l-0.3-0.1
2410
+ l-0.3-0.1l-0.4-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.6-0.4l-0.5-0.4l-0.6-0.4l-0.6-0.4l-0.5-0.4l-0.6-0.4l-1.1-0.8
2411
+ l-0.5-0.4l-0.5-0.4l-0.6-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.3l-0.5-0.3l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1L487,320
2412
+ l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1h-0.2h-0.2h-0.1h-0.1h-0.1h-0.1h-0.2V319z"
2413
+ />
2414
+ <path
2415
+ fill="#25B3FF"
2416
+ d="M486.3,321.2h0.2h0.1h0.2h0.1h0.2h0.1l0.1,0.1l0.2,0.1l0.1,0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.3,0.2l0.2,0.2
2417
+ l0.1,0.1l0,0h0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.2,0.1l0.4,0.1h0.1
2418
+ l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2
2419
+ l0.1,0.2l0.1,0.2v0.2l0.1,0.1h0.2l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.5,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.2,0.1l0.3,0.1
2420
+ l0.2,0.1l0.3,0.1l0.3,0.1l0.2,0.2l0.3,0.2l0.1,0.1h0.2h0.3h0.3h0.3h0.3h0.3h0.3h0.3l0.3,0.1l0.4,0.1l0.3,0.1l0.3,0.1l0.4,0.1
2421
+ l0.3,0.2l0.4,0.2l0.3,0.2l0.4,0.2l0.3,0.3l0.3,0.3l0.2,0.3l0.2,0.4l0.2,0.4l0.2,0.4l0.1,0.4l0.1,0.4l0.1,0.3v0.2v0.2v0.2v0.3v0.3
2422
+ l-0.1,0.2l-0.1,0.2v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2423
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.2l-0.3,0.2l-0.3,0.2l-0.2,0.1l-0.3,0.1l-0.3,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1
2424
+ l-0.5,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.5,0.1l-0.4,0.1h-0.4h-0.4H500l-0.9,0.1h-0.3l0.1,0.1l0.1,0.2l0.1,0.2l0,0l0.1,0.2l0.1,0.2
2425
+ v0.2l0.1,0.2v0.2v0.1v0.2l-0.1,0.2v0.2v0.2l-0.1,0.1v0.1l-0.1,0.1L499,341v0.1l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.2,0.3l-0.1,0.2
2426
+ l-0.2,0.2l-0.2,0.2l-0.3,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.8,0.6l-0.9,0.6l-0.9,0.6l-0.8,0.5
2427
+ l-0.8,0.5l-0.2,0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.2l0.1,0.1l0.1,0.2l0,0l0.1,0.1v0.1l0.1,0.1l0,0v0.1l0.1,0.1v0.2l0,0
2428
+ l-0.1,0.2v0.2l0,0v0.2l-0.1,0.2l0,0l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2429
+ l-0.1,0.2l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.5,0.5l-0.5,0.5l-1.1,0.9l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.2,0.2l-0.2,0.2l-0.1,0.1
2430
+ l-0.2,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2l-0.2-0.1l-0.2-0.1
2431
+ l-0.2-0.1l-0.1-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2
2432
+ l-0.1-0.2l-0.1-0.2V354v-0.2v-0.2v-0.2v-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.2-0.1
2433
+ l0.2-0.3l0.3-0.3l0.5-0.5l0.1-0.1l-0.1-0.1L482,350l-0.1-0.1l0,0l-0.2-0.1l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l0,0l-0.1-0.1
2434
+ l-0.1-0.1l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l0,0v-0.2l-0.1-0.2v-0.2l0,0V348v-0.2v-0.1l0,0v-0.2v-0.2l0.1-0.2l0,0
2435
+ l0.1-0.2l0.1-0.2l0.1-0.2v-0.1l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1
2436
+ l0.4-0.2l0.4-0.2l0.4-0.2l0.7-0.4l0.7-0.3l0.2-0.1l0.2-0.1l0.5-0.3l0.5-0.3l0.6-0.4l0.3-0.2h-0.1H487h-0.4l-0.4-0.1l-0.4-0.1
2437
+ l-0.4-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.2-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.1-0.1
2438
+ l-0.1-0.1l-0.1-0.1l-0.1-0.2h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2l0,0v-0.1h-0.1h-0.1l-0.5,0.2l-0.5,0.2l-0.5,0.2
2439
+ l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1h-0.2h-0.2h-0.3h-0.2h-0.3h-0.3l-0.3-0.1l-0.4-0.1l-0.2-0.1l-0.2-0.1
2440
+ l-0.1-0.1h-0.1l-0.2-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1L474,339l-0.1-0.1l-0.1-0.1
2441
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.2l-0.1-0.1l-0.8-0.2l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1
2442
+ l-0.1-0.1l-0.2-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.2
2443
+ l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2l-0.1-0.2v-0.2v-0.2v-0.2v-0.2l0.1-0.2v-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0,0
2444
+ l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.2-0.1h0.1l0.1-0.1l0.2-0.1l0.2-0.1h0.1h0.2
2445
+ h0.1h0.2h0.1h0.2h0.2h0.6h0.3h0.1l0.2-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.5-0.1l0.4-0.1h-0.1v-0.2L475,330l0,0v-0.2l-0.1-0.2v-0.2v-0.2
2446
+ V329l0.1-0.1v-0.1v-0.2l0.1-0.1v-0.1l0.1-0.2v-0.1l0.1-0.1l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.3l0.2-0.4
2447
+ l0.3-0.3l0.2-0.3l0.3-0.3l0.2-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1l0.4-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1
2448
+ l0.4-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.2l0,0l0.1-0.2v-0.1l0.1-0.2v-0.2h0.1v-0.1l0.1-0.1l0.1-0.1l0,0l0.1-0.1l0.1-0.1l0.1-0.1
2449
+ l0.1-0.1h0.1l0.1-0.2l0.1-0.1l0.1-0.1l0.2-0.1l0,0l0.1-0.1l0.2-0.1l0.1-0.1l0.2-0.1l0.1-0.1h0.1l0.2-0.1l0.1-0.1h0.2h0.2h0.2l0,0
2450
+ h0.2h0.2L486.3,321.2z"
2451
+ />
2452
+ <path
2453
+ fill="#25B3FF"
2454
+ d="M455.7,235.5L455.7,235.5h0.2h0.1h0.1h0.2l0,0h0.1h0.2l0.1,0.1l0,0l0.2,0.1l0.1,0.1l0.2,0.1l0,0l0.1,0.1
2455
+ l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1v0.1h0.1v0.1
2456
+ l0.1,0.1v0.1l0,0l0.1,0.2v0.2v0.2v0.2v0.2v0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.2h0.1h0.1h0.2h0.1h0.1h0.1h0.1h0.1h0.1l0.1,0.1
2457
+ l0.1,0.1l0.1,0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1
2458
+ l0.1,0.1l0,0l0.1,0.2l0.1,0.2l0,0l0.1,0.1l0.1,0.1v0.1l0.1,0.1v0.1l0.1,0.2v0.3v0.2v0.1v0.1v0.1v0.1l-0.1,0.2v0.2l-0.1,0.2
2459
+ l-0.1,0.4l-0.2,0.5l-0.2,0.5l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.2l0,0l0.1,0.1l0.1,0.2
2460
+ l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2v0.2l0.1,0.2v0.2l-0.1,0.2v0.2l-0.1,0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.1
2461
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.1h-0.2h-0.2H459
2462
+ h-0.2h-0.2h-0.2h-0.1h-0.1H458h-0.1h-0.1h-0.2h-0.1l-0.2-0.1h-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1h-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1
2463
+ h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2v-0.1l-0.1-0.1l-0.1-0.1
2464
+ l-0.1-0.1v-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.3l-0.1-0.3V249v-0.3v-0.4l0.1-0.4v-0.4l0.1-0.1h-0.1l-0.6,0.3l-0.7,0.3l-0.7,0.3l-0.4,0.2
2465
+ l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.5,0.1l-0.5,0.1l-0.4,0.1l-0.5,0.1L447,250h-0.5H446h-0.5h-0.3
2466
+ H445h-0.2h-0.2h-0.3l-0.2-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.3-0.1l-0.2-0.1l-0.3-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
2467
+ l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.1-0.1L441,248l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.1
2468
+ l-0.1-0.1l-0.1-0.1l0,0v-0.1h-0.1h-0.1h-0.2H440h-0.2h-0.1h-0.1h-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1
2469
+ l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1
2470
+ l-0.1-0.1v-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1v-0.1v-0.2v-0.1v-0.1l0,0l0.1-0.2V244l0.1-0.2l0,0l0.1-0.1v-0.1l0.1-0.1l0.1-0.1
2471
+ l0.1-0.1l0.1-0.1l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.3l0.3-0.3l0.3-0.2l0.2-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.6-0.4l0.7-0.4l0.7-0.4
2472
+ l0.5-0.3H442l-0.8,0.1h-0.4h-0.5h-0.4h-0.4h-0.4h-0.5h-0.4h-0.4h-0.4h-0.5l-0.4-0.1l-0.4-0.1l-0.5-0.1l-0.4-0.1l-0.2-0.1l-0.2-0.1
2473
+ l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.1-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.1
2474
+ l-0.1-0.1h-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.1v-0.1l-0.1-0.1l0,0l0,0l-0.4-0.1l-0.3-0.1l-0.2-0.1l-0.3-0.1l-0.2-0.1
2475
+ l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
2476
+ v-0.1l-0.1-0.2l-0.1-0.2L429,234l-0.1-0.2v-0.1v-0.2l-0.1-0.2v-0.2v-0.2v-0.1v-0.2v-0.2l0.1-0.2V232l0.1-0.1v-0.1l0.1-0.1l0.1-0.1
2477
+ v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.2l0.3-0.3l0.2-0.2l0.2-0.2l0.3-0.2l0.2-0.2l0.2-0.2l0.3-0.1
2478
+ l0.2-0.1l0.3-0.1l0.2-0.1l0.3-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.2-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.5-0.1l0.6-0.1l0.6-0.1l0.5-0.1h0.6
2479
+ h0.5h0.6l1.1-0.1l2.1-0.1l0.9-0.1h0.4h0.4h0.3h0.3h0.2h0.2l0.8-0.2l0.8-0.2l0.8-0.2l0.8-0.2l0.1-0.1l0.2-0.1l0.2-0.1l0.5-0.2
2480
+ l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.5-0.1l0.2-0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2l0.2,0.1l0.1,0.1l0.2,0.1l0.2,0.1
2481
+ l0.1,0.1l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2l0.1,0.2
2482
+ v0.2v0.2v0.2v0.2l-0.1,0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l0,0l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
2483
+ l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1l0,0l-0.2,0.1L454,231l-0.2,0.1l-0.4,0.2l-0.6,0.2l-0.7,0.3l-0.5,0.2l0,0l0.1,0.2v0.2v0.2v0.2
2484
+ v0.2l-0.1,0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1h0.1l0.1,0.1
2485
+ l0.1,0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.2l0.1,0.2v0.1l0.1,0.1v0.1l0.1,0.1v0.1v0.1v0.1
2486
+ l0.2-0.1h0.1h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.2h0.1L455.7,235.5z M458.8,246.9L458.8,246.9h-0.2H458.8z"
2487
+ />
2488
+ <g>
2489
+ <g transform="matrix(1,0,0,1,454.698,46.683)">
2490
+ <path
2491
+ d="M343.4,257.1h0.9h0.9h0.9h0.9h0.5h0.2l0.3-0.1l0.4-0.1h0.4h0.4h0.4h0.4h0.4h0.4h0.3h0.3h0.3h0.3h0.3h0.3h0.3
2492
+ l0.3,0.1l0.7,0.1l0.7,0.1l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.4,0.1l0.6,0.1l0.6,0.1h0.2h0.2h0.3h0.3l0.8,0.1
2493
+ l0.9,0.1l1,0.1l1.1,0.1l1.1,0.2l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.5,0.1l0.5,0.2l0.5,0.2
2494
+ l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.1,0.1l0.2,0.3
2495
+ l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.3v0.2v0.2v0.2v0.1v0.2v0.2l0,0v0.3v0.3l0,0v0.2l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.2l-0.1,0.2
2496
+ l-0.1,0.2l0,0l-0.2,0.2l-0.2,0.2l-0.2,0.2l0,0l-0.2,0.1l-0.2,0.1l-0.2,0.1l0,0l-0.2,0.1l-0.2,0.1l0,0H374h-0.2l0,0h-0.3h-0.1
2497
+ h-0.2H373h-0.1l-0.3-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.5-0.2l-0.5-0.2l-1.1-0.5l-0.5-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1
2498
+ l-0.2-0.1l-0.2-0.1h-0.1h-0.1h-0.1l0,0h-0.3h-0.4h-0.4h-0.3h-0.3h-0.3h-0.3H365l-0.3-0.1l-0.3-0.1l-0.7-0.1l-0.7-0.1l-0.6-0.2
2499
+ l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-1.2-0.4l-0.5-0.2l-0.4-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1
2500
+ l-0.7-0.1l-0.7-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1H349l-0.4,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1
2501
+ l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-1.4,0.1l-1.5,0.1l-1.5,0.1l-1.5,0.1l-1.5,0.1l-1.5,0.1h-1.5h-1.5h-1.5h-1.5h-2.4h-0.9l0,0
2502
+ l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.3l-0.7,0.3l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1
2503
+ l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.2l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2
2504
+ l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.1h0.1l0.3,0.1l0.3,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.9,0.1l1,0.1l1,0.1
2505
+ l1,0.1l2,0.2l1,0.1l1,0.1l0.9,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1
2506
+ l0.4,0.2l0.4,0.2l0.2,0.1l0.3,0.2h0.1l0.1,0.1l0.1,0.1l0.4,0.2l0.4,0.2l0.5,0.2l0.5,0.3l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2
2507
+ l0.3,0.2l0.3,0.2l0.3,0.3l0.3,0.3l0.3,0.3l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.3l0.1,0.3
2508
+ l0.1,0.3v0.3v0.3v0.3v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2
2509
+ l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.3,0.1l-0.3,0.1
2510
+ l-0.5,0.2l-0.5,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1
2511
+ l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-1.4,0.2l-1.4,0.1l-1.4,0.1l-1.3,0.1L312,289l-1.2,0.1
2512
+ l-1.2,0.1l-1.1,0.1h-1l-1.8,0.1h-1.3h-0.5h-0.2h-0.1h-0.3H303h-0.3l-0.3-0.1l-0.3-0.1l-0.3-0.1l0,0l-0.3-0.2l-0.2-0.2l-0.2-0.2
2513
+ l-0.2-0.2l-0.2-0.2l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.3v-0.3V286l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0,0l0.2-0.2l0.2-0.2
2514
+ l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0,0h0.2h0.2h0.2h0.4h0.5h1.3l1.7-0.1h1l1.1-0.1l1.1-0.1l1.2-0.1l1.2-0.1
2515
+ l1.3-0.1l1.3-0.1l1.3-0.1l1.3-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1
2516
+ l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.4-0.1l0.4-0.1l0.4-0.2l0.3-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0,0
2517
+ h-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.4-0.2l-0.4-0.2l-0.5-0.2l-0.5-0.2l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.2-0.1l0,0h-0.1h-0.1
2518
+ l-0.1-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1h-0.4l-0.9-0.1l-0.9-0.1l-1-0.1
2519
+ l-2-0.2l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.4-0.1l-0.4-0.1
2520
+ l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2
2521
+ l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.3v-0.3v-0.3v-0.3l0.1-0.3l0.1-0.3
2522
+ l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.2l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.3l0.3-0.3
2523
+ l0.3-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0,0l-1.4-0.1l-1.4-0.1l-1.3-0.1l-1.3-0.1l-1.2-0.2l-0.4-0.1h-0.5l-1.1-0.1
2524
+ l-1.2-0.1l-0.6-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.4-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1
2525
+ l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.3
2526
+ l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.2-0.3l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4V255
2527
+ v-0.5V254v-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2
2528
+ l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.2
2529
+ l0.4-0.2l0.4-0.2l0.4-0.2l0.8-0.4l0.8-0.4l1.4-0.7l0.6-0.3l0.5-0.3l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1
2530
+ l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.3h0.3h0.3h0.6h0.6h0.6h0.5h0.5l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1
2531
+ l0.5,0.1l0.5,0.1l1,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1
2532
+ l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1h0.7h0.7h0.8h0.8h0.8l1.5,0.1h1.5h1.5h1.5h1.5h3h2.9h1.1h1.1h1.1l1.1-0.1l1.1-0.1l1.1-0.1
2533
+ l1.1-0.1l1.1-0.1l1.1-0.1l1.1-0.2l1.1-0.2l1.1-0.2l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1h0.1h0.1
2534
+ l0.2-0.1l0.2-0.1l0.2-0.1l0.3-0.1l0.6-0.3l0.6-0.3l0.6-0.3l0.7-0.3l0.6-0.3l0.6-0.3l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1
2535
+ l0.4-0.1l0.3-0.1h0.3h0.2h0.2h0.2h0.1h0.2h0.2l0,0l0.3,0.1l0.3,0.1l0,0l0.2,0.1l0.2,0.1l0.2,0.2l0,0l0.2,0.2l0.2,0.2l0.2,0.2l0,0
2536
+ l0.1,0.2l0.1,0.2l0.1,0.3l0,0l0.1,0.2v0.2v0.2l0,0v0.3v0.3v0.1v0.2v0.2v0.1l-0.1,0.3l-0.1,0.2l-0.1,0.3l-0.1,0.2l-0.1,0.2
2537
+ l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.3h-0.3h-0.2l0,0l-0.6,0.3l-0.6,0.3
2538
+ l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.4,0.2l-0.4,0.2l-0.4,0.1L357,248l-0.4,0.1l-0.3,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1
2539
+ l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.1l-1.2,0.1l-1.2,0.1l-1.2,0.1l-1.2,0.1h-1.2
2540
+ h-1.2h-1.2h-2.9h-3h-1.5h-1.6h-1.6h-1.6l-1.6-0.1h-0.8h-0.8h-0.8h-0.8l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1
2541
+ l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-1-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.4-0.1l-0.4-0.1
2542
+ l-0.4-0.1l-0.4-0.1l-0.4-0.1H304h-0.4h-0.4h-0.4h-0.4H302h-0.2h-0.2h-0.2h-0.2H301h-0.2h-0.2h-0.2h-0.2H300l-0.2,0.1l-0.2,0.1
2543
+ l-0.2,0.1l-0.2,0.1L299,248l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.6,0.3l-0.7,0.3l-1.4,0.6l-0.7,0.3l-0.7,0.4l-0.4,0.2l-0.3,0.2
2544
+ l-0.3,0.2L293,251l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1
2545
+ l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1v0.1v0.1v0.1l0,0l0,0l0,0l0,0l0,0l0,0v0.2v0.2v0.2v0.2v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1
2546
+ v0.1v0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
2547
+ l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1
2548
+ l0.6,0.1l1.1,0.1l1.1,0.1l0.5,0.1l0.5,0.1l1.2,0.1l1.2,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1
2549
+ l1.4,0.1l1.5,0.1h1.5h1.4h0.1l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l1-0.1l0.9-0.1
2550
+ l1-0.1l1-0.1h0.9h0.9h0.9h0.9h0.9h0.9h0.9L343.4,257.1z M303.7,289.4L303.7,289.4L303.7,289.4L303.7,289.4z"
2551
+ />
2552
+ </g>
2553
+ <g transform="matrix(1,0,0,1,381.866,45.2348)">
2554
+ <path
2555
+ d="M-30.6-41.7h1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.2l1,0.2l1,0.2l1,0.2l1,0.2l1,0.3l1,0.3l0.5,0.2
2556
+ l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2
2557
+ l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.2l0.9,0.7l0.8,0.8l0.7,0.9l0.6,1l0.5,1l0.3,1.1l0.2,1.1l0.1,1.1
2558
+ l-0.1,1.1l-0.2,1.1L-2-23.3l-0.5,1l-0.6,0.9l-0.7,0.8l-0.8,0.8l-0.9,0.6l-1,0.5l-1,0.4L-8.6-18l-1.1,0.1h-1.1l-1.1-0.2l-1.1-0.3
2559
+ l-1-0.4l-1-0.6l-0.3-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1
2560
+ l-0.3-0.1l-0.3-0.1L-19-21l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.6-0.2l-0.6-0.2
2561
+ l-0.6-0.2l-0.6-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1h-0.7h-0.7h-0.7h-0.7h-0.7h-0.7h-0.7h-0.7
2562
+ h-0.7l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.6,0.2l-0.6,0.2
2563
+ l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1
2564
+ l-0.3,0.1l-0.3,0.2l-0.3,0.1l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2
2565
+ l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.7,0.7l-0.7,0.7l-1.4,1.4l-1.5,1.4
2566
+ l-1.5,1.4l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.6,0.7l-0.3,0.3L-66.5-3l-0.3,0.4
2567
+ l-0.3,0.3L-67.4-2l-0.3,0.3L-68-1.4l-0.3,0.3l-0.3,0.3l-0.2,0.3L-69-0.2l-0.2,0.3l-0.2,0.3l-0.2,0.3L-69.8,1L-70,1.3l-0.2,0.3
2568
+ l-0.2,0.3l-0.2,0.3l-0.2,0.3L-71,2.8l-0.1,0.3l-0.1,0.3l-0.1,0.3L-71.4,4l-0.1,0.3l-0.1,0.3l-0.1,0.3l0,0.1v0.2v0.1v0.2v0.4v0.4
2569
+ l-0.1,0.5l-0.1,1.3l-0.2,3l-0.1,1.7l-0.1,0.9l-0.1,0.9l-0.1,0.9l-0.1,0.9l-0.1,0.9l-0.1,0.9l-0.1,0.9l-0.2,0.9l-0.2,0.9l-0.1,0.5
2570
+ l-0.1,0.4l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.3,0.5l-0.3,0.6l-0.4,0.6l-0.4,0.6l-0.7,0.4
2571
+ l-0.3,0.4l-0.6,0.6l-0.4,0.3l-0.5,0.4L-79,30l-0.5,0.3l-0.4,0.2l-1.9,0.9l-1.7,0.9l-1.7,0.9l-1.7,0.9l-1.7,0.9l-1.7,1l-1.7,1
2572
+ l-1.7,1l-1.7,1l-1.7,1l-1.7,1l-1.7,1l-1.7,1l-1.7,1.1l-1.7,1.1l-1.7,1.1l-1.7,1.1l-1.7,1.1l-1.7,1.1l-1.7,1.1l-1.7,1.1l-1.7,1.1
2573
+ l-1.7,1.1l-1.7,1.1l-1.7,1.2l-1.7,1.2l-3.4,2.3l-3.4,2.4l-3.4,2.4l-6.9,4.8l-3.5,2.4l-3.5,2.4l-3.5,2.4l-3.5,2.4l-1.8,1.2
2574
+ l-1.8,1.2l-1.8,1.2l-1.8,1.2l-1.8,1.2l-1.8,1.2l-1.8,1.2l-1.8,1.2l-1.8,1.1l-1.8,1.1l-1.8,1.1L-177,93l-1.8,1.1l-1.8,1.1
2575
+ l-1.8,1.1l-1.8,1.1l-1.8,1.1l-1.8,1.1l-1.9,1l-1.8,1l-4.2,2.4l-4.2,2.4l-4.2,2.4l-4.2,2.4l-4.2,2.4l-4.2,2.4l-2.1,1.2l-2.1,1.2
2576
+ l-2.1,1.2l-2.1,1.2l-2.1,1.2l-2.1,1.2l-2.1,1.2l-2.1,1.2l-2.1,1.2l-2.1,1.3l-2.1,1.3l-2.1,1.3l-2.1,1.3l-2.1,1.3l-2.1,1.3
2577
+ l-2.1,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.4l-2,1.4
2578
+ l-2,1.4l-2,1.4l-2,1.4l-2,1.4l-2,1.4l-1.9,1.4l-1.9,1.4l-1.9,1.4l-1.9,1.4l-1.9,1.4l-1.9,1.4l-1.9,1.4l-1.9,1.4l-1.9,1.4
2579
+ l-1.9,1.4l-1.9,1.5l-1.9,1.5l-1.9,1.5l-1.9,1.5l-1.9,1.5l-1,0.8l-1,0.8l-1,0.8l-1,0.8l-1,0.7l-1,0.7l-1,0.7l-1,0.7l-1,0.7l-1,0.7
2580
+ l-1,0.7l-1,0.7l-2,1.3l-2,1.3l-4,2.6l-2,1.3l-1,0.6l-1,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.7
2581
+ l-0.9,0.7l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2v0.4l-0.1,1.1l-0.2,1.1l-0.3,1.1l-0.5,1l-0.6,0.9
2582
+ l-0.7,0.9l-0.8,0.8l-0.9,0.7l-1,0.5l-1,0.4l-1.1,0.3l-1.1,0.1h-1.1l-1.1-0.1l-1.1-0.3l-1-0.4l-1-0.5l-0.9-0.7l-0.8-0.8l-0.7-0.9
2583
+ l-0.3-0.4l-0.4-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.7l-0.2-0.7l-0.2-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7v-0.7v-0.6l0.1-0.6l0.1-0.6l0.1-0.6
2584
+ l0.1-0.6l0.1-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.4-0.6l0.4-0.6l0.4-0.6l0.5-0.5
2585
+ l0.4-0.5l0.4-0.5l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.3l0.4-0.3l0.7-0.6l0.7-0.5l0.6-0.5l1-0.8l1-0.7l1-0.7l1-0.7
2586
+ l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l2-1.3l4-2.6l2-1.3l2-1.3l1-0.6l1-0.6l0.9-0.6l0.9-0.6l0.9-0.6l0.9-0.6l0.9-0.7l0.9-0.7
2587
+ l0.9-0.7l0.9-0.7l0.9-0.7l0.9-0.7l1.9-1.5l1.9-1.5l1.9-1.5l1.9-1.5l1.9-1.5l1.9-1.5l2-1.5l2-1.5l2-1.5l2-1.5l2-1.5l2-1.4l2-1.4
2588
+ l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2.1-1.4l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3
2589
+ l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3
2590
+ l2.1-1.3l2.1-1.2l2.1-1.2l2.1-1.2l2.1-1.2l4.2-2.4l4.2-2.4l4.2-2.4l4.2-2.4l4.2-2.4l4.2-2.4l1.8-1l1.7-1l1.7-1l1.7-1l1.8-1l1.7-1
2591
+ l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.2l1.7-1.2l1.7-1.2l3.5-2.4
2592
+ l3.5-2.4l3.5-2.4l3.5-2.4l6.9-4.8l3.5-2.4l3.5-2.4l3.5-2.4l1.7-1.2l1.8-1.2l1.8-1.2l1.8-1.2l1.8-1.2l1.8-1.2l1.8-1.2l1.8-1.1
2593
+ l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1l1.8-1l1.8-1l1.8-1l1.8-1l1.8-1l1-0.5
2594
+ v-0.2l0.1-0.6l0.1-0.6l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.8l0.1-0.8l0.1-1.5l0.2-3l0.1-1.4l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7
2595
+ l0.1-0.4l0.1-0.4l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6
2596
+ l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5
2597
+ l0.4-0.5l0.4-0.5l0.8-0.9l0.8-0.9l0.8-0.9l0.8-0.9l0.8-0.8l0.8-0.8l0.8-0.8l0.8-0.8l0.8-0.8l1.5-1.5l1.5-1.4l1.4-1.3l0.6-0.6
2598
+ l0.6-0.6l0.3-0.3l0.4-0.4l0.4-0.4l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3
2599
+ l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.2l0.5-0.2l0.5-0.2l0.4-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2
2600
+ l0.5-0.2l0.5-0.2l0.5-0.2l0.9-0.4l1-0.4l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.2l1-0.2l1-0.2l1-0.2l1-0.2l1-0.1l1-0.1l1-0.1l1-0.1
2601
+ l1-0.1l1-0.1h1h1h1L-30.6-41.7z M-356,204.7l-0.1-0.1l-0.2-0.3v-0.1L-356,204.7z"
2602
+ />
2603
+ <path
2604
+ d="M-5.6-32.2l0.8,0.1l0.7,0.2l0,0l0.7,0.2l0.7,0.3l0.6,0.3l0,0l0.8,0.5l0.7,0.6l0,0l0.4,0.4l0.4,0.5l0.3,0.3
2605
+ l0.4,0.5l0.3,0.4l0.3,0.6l0.3,0.5l0.3,0.5l0.4,0.9l0.4,0.9l0.2,0.3l0.1,0.3l0.1,0.1l0,0l0.1,0.1l0.2,0.2l0.6,0.6l0.4,0.4L5-22
2606
+ l0.4,0.6L5.7-21l0.2,0.4l0.3,0.4l0.3,0.4l0.3,0.5L7-18.8l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.6L8-16.1l0.1,0.4l0.1,0.5l0.1,0.4
2607
+ l0.1,0.5l0.2,0.5l0.2,0.6L9-12.6l0.2,0.7l0.2,0.7l0.3,0.7L10-9.7l0.3,0.8l0.3,0.8l0.3,0.8l0.3,0.8l0.4,0.8L12-4.9l0.4,0.8
2608
+ l0.4,0.8l0.4,0.8l0.2,0.3l0.2,0.3l0.2,0.3L14-1.3L14.2-1l0.2,0.3l0.2,0.3l0.2,0.3L15,0.2l0.2,0.2l0.2,0.2l0.2,0.2L15.8,1l0.1,0.2
2609
+ L16,1.4l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.2,0.1L17,2.1l0.5,0.3L18,2.7L18.5,3L19,3.3l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4L21,5.3
2610
+ l0.4,0.4l0.4,0.4l0.3,0.4l0.3,0.4l0.3,0.4L23,7.7l0.3,0.4l0.3,0.4l0.2,0.4L24,9.3l0.2,0.4l0.2,0.4l0.2,0.4l0.4,0.7l0.3,0.7
2611
+ l0.3,0.7l0.3,0.7l0.3,0.6l0.3,0.6l0.5,1.1l0.2,0.5l0.2,0.5l0.2,0.4l0.2,0.4l0.2,0.3l0.2,0.3l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
2612
+ l0.1,0.1l0.1,0.1v0.1l0.1,0.1l0,0l0.1,0.1l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.5l0.4,0.5l0.4,0.5l0.4,0.5l0.4,0.5
2613
+ l0.4,0.5l0.4,0.5l0.4,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.6,1l0.6,1l0.6,1l0.6,1l0.5,1l0.5,1l0.5,1
2614
+ l0.5,1l0.5,1l0.5,1l0.5,1l0.5,1l0.4,1l0.4,1l0.4,1l0.4,1l0.4,1l0.4,1l0.8,2l0.8,2l1.5,4l0.8,2l0.8,2l0.4,1l0.4,1l0.4,0.9l0.4,0.9
2615
+ l0.4,0.9l0.4,0.9l0.4,0.9l0.4,0.9l0.4,0.9l0.4,0.9l0.4,0.9l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.5,0.8l0.2,0.3
2616
+ l0.2,0.4l0.2,0.4l0.2,0.3l0.2,0.4l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.3,0.3l0.3,0.4l0.5,0.6l0.5,0.6l0.5,0.6l0.4,0.7
2617
+ l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7
2618
+ l0.3,0.7l0.3,0.7l0.2,0.7l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.4,1.3l0.4,1.3l0.4,1.2l0.4,1.2l0.4,1.2l0.7,2.4l0.3,1.1l0.3,1.1
2619
+ l0.3,1.1l0.3,1.1l0.3,1.1l0.4,1.1l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.4l0.2,0.4
2620
+ l0.2,0.5l0.9,1.7l0.9,1.8l0.9,1.8l0.9,1.8l0.9,1.9l0.9,1.9l0.9,1.9l0.9,2l0.9,2l0.9,2l0.9,2l0.8,2l0.8,2.1l0.8,2.1l0.8,2.1
2621
+ l0.8,2.1l0.8,2.1l0.8,2.2l0.4,1.1l0.4,1.1l0.4,1.1l0.4,1.1l0.4,1.1l0.4,1.1l0.4,1.1l0.4,1.1l0.4,1.1l0.4,1.1l0.3,1.1l0.3,1.1
2622
+ l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.2l0.3,1.1l0.3,1.2
2623
+ l0.3,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.1,1.2
2624
+ l0.1,1.2l0.1,1.2l0.1,1.2l0.1,1.2l0.1,1.2l0.1,1.2l0.1,1.2l0.1,1.2l0.1,1.2l0.1,1.1v1.1v1.1v1.1v1.1v1.1v1.1v1.1v1.1v1.1
2625
+ l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.2,1.1l-0.2,1.1l-0.2,1.1l-0.2,1.1l-0.2,1.1
2626
+ l-0.2,1.1l-0.2,1.1l-0.2,1.1l-0.3,1.1l-0.3,1.1l-0.3,1.1l-0.3,1.1l-0.3,1.1l-0.3,1.1l-0.4,1.1l-0.4,1l-0.4,1l-0.4,1l-0.4,1
2627
+ l-0.4,1l-0.5,1l-0.5,1l-0.5,1.1l-0.3,0.6l-0.4,0.6l-0.4,0.5l-0.4,0.5l-0.4,0.4l-0.4,0.4l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.3,0.2
2628
+ l-0.3,0.2l-0.4,0.2l-0.6,0.4l-0.6,0.3l-0.6,0.3L89,261l-0.6,0.3l-0.6,0.2l-0.6,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-1,0.4l-1,0.3
2629
+ l-0.9,0.3l-0.8,0.3l-0.3,0.1l-0.3,0.1l-0.2,0.1L81,264l-0.1,0.1l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.2l-0.4,0.3l-0.8,0.5l-0.8,0.4
2630
+ l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2
2631
+ l-0.9,0.2l-0.9,0.2l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1h-0.9h-0.9h-0.9h-0.9h-0.9H53h-0.9h-0.9h-0.9l-0.9-0.1
2632
+ l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1
2633
+ l-0.8-0.2l-0.8-0.2l-0.8-0.2L35,269l-1.6-0.3l-1.6-0.4l-1.5-0.4l-1.5-0.4l-1.6-0.4l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.6-0.3
2634
+ l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-1.1-0.5l-2.1-1.1l-1-0.5l-0.9-0.4l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.3-0.1l-0.2-0.1
2635
+ l-0.2-0.1h-0.1h-0.3l-1-0.2l-0.9-0.3l-0.9-0.4l-0.9-0.5L9,259.1l-0.7-0.7l-0.6-0.8l-0.6-0.8l-0.5-0.9L6.2,255L6,254l-0.1-1v-1
2636
+ l0.1-1l0.2-1l0.3-0.9l0.4-0.9l0.5-0.9l0.6-0.8l0.7-0.7l0.8-0.6l0.8-0.6l0.9-0.5l0.9-0.4l1-0.3l1-0.1h1h0.3h0.5l0.5,0.1l0.5,0.1
2637
+ l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.7,0.2l0.7,0.2l0.7,0.2l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l1.1,0.5l1.1,0.5l2.1,1l1,0.5
2638
+ l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.3,0.1l0.3,0.1l0.2,0.1l0.2,0.1h0.1h0.2l1.3,0.3l1.4,0.3l1.4,0.3l1.4,0.3l1.4,0.3l1.4,0.3
2639
+ l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1
2640
+ l0.7,0.1H52h0.6h0.6h0.6h0.6H55h0.6h0.6h0.6h0.6H58h0.6l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.5-0.1l0.5-0.1
2641
+ l0.5-0.1l0.5-0.1l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.3l0.5-0.3l0.2-0.1l0.2-0.1
2642
+ l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.3l0.5-0.3l0.6-0.3l0.6-0.3l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.9-0.3l0.9-0.3l0.9-0.3
2643
+ l0.9-0.3l0.4-0.1l0.4-0.1l0.4-0.1l0.3-0.1l0.2-0.4l0.3-0.8l0.3-0.8l0.3-0.8l0.3-0.8l0.3-0.8l0.3-0.8l0.3-0.8l0.3-0.8l0.2-0.8
2644
+ l0.2-0.8l0.2-0.8l0.2-0.8l0.2-0.9l0.2-0.9l0.2-0.9l0.2-0.9l0.2-0.9l0.1-0.9l0.1-0.9l0.1-0.9l0.1-0.9l0.1-0.9l0.1-0.9l0.1-0.9
2645
+ l0.1-0.9l0.1-0.9l0.1-0.9V221v-1v-1v-1v-1v-1v-1v-1v-1v-1v-1l-0.1-1l-0.1-1l-0.1-1l-0.1-1l-0.1-1l-0.1-1l-0.1-1l-0.1-1l-0.1-1
2646
+ l-0.1-1l-0.1-1l-0.1-1l-0.2-1l-0.2-1l-0.2-1l-0.2-1l-0.2-1l-0.2-1l-0.2-1l-0.2-1l-0.2-1l-0.2-1.1l-0.2-1.1l-0.2-1.1l-0.2-1.1
2647
+ l-0.2-1.1l-0.2-1.1l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1l-0.3-1l-0.3-1.1l-0.3-1
2648
+ l-0.3-1l-0.3-1l-0.3-1l-0.3-1l-0.3-1l-0.3-1l-0.3-1l-0.4-1l-0.4-1l-0.4-1l-0.4-1l-0.4-1l-0.7-2l-0.8-2l-0.8-2l-0.8-2l-0.8-2
2649
+ l-0.8-2l-0.8-1.9l-0.8-1.9l-0.8-1.9l-0.8-1.9l-0.8-1.9l-0.8-1.8l-0.8-1.8l-0.8-1.8l-0.8-1.8l-0.8-1.7l-0.8-1.7l-0.8-1.7l-0.3-0.6
2650
+ l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.6l-0.2-0.7l-0.2-0.7l-0.2-0.6l-0.2-0.7l-0.4-1.3l-0.4-1.3
2651
+ l-0.4-1.2l-0.4-1.2l-0.4-1.2l-0.3-1.2l-0.7-2.3l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.4-1.1l-0.2-0.5l-0.2-0.5l-0.2-0.5
2652
+ L51,99.4l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5L50,96.9l-0.2-0.5l-0.2-0.5l-0.2-0.4l-0.2-0.4L49,94.7l-0.2-0.4l-0.2-0.4l-0.2-0.4
2653
+ l-0.2-0.4L48,92.7l-0.2-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4L46,89.9l-0.3-0.4L45.3,89l-0.4-0.5L44.5,88l-0.4-0.5
2654
+ L43.8,87l-0.3-0.5L43.2,86l-0.3-0.5L42.6,85l-0.3-0.5L42,84l-0.6-1l-0.6-1l-0.6-1l-0.6-1l-0.5-1l-0.5-1l-0.5-1l-0.5-1l-0.5-1
2655
+ l-0.5-1l-0.5-1l-0.5-1l-0.4-1l-0.4-1l-0.4-1L34,68l-0.4-1l-0.4-1l-0.8-2l-0.8-2l-1.5-4l-0.8-2l-0.8-2l-0.4-1l-0.4-0.9l-0.4-0.9
2656
+ l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8
2657
+ l-0.5-0.8l-0.5-0.7l-0.2-0.3l-0.2-0.4l-0.2-0.3l-0.2-0.3L20.1,37l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3L19,35.5l-0.2-0.3l-0.3-0.3
2658
+ l-0.3-0.3l-0.3-0.3L17.6,34l-0.3-0.3L17,33.4l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.4-0.4l-0.3-0.4L14.8,31l-0.3-0.4l-0.3-0.4
2659
+ l-0.3-0.4l-0.3-0.4L13.4,29l-0.2-0.4L13,28.2l-0.2-0.4l-0.4-0.7L12,26.4l-0.3-0.7L11.4,25l-0.3-0.6l-0.3-0.6l-0.5-1.1l-0.2-0.5
2660
+ l-0.2-0.5l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4L9,20l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1
2661
+ l-0.1-0.1L8.1,19l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l-0.2-0.1l-0.5-0.3l-0.6-0.4l-0.6-0.4l-0.6-0.4L5.1,17
2662
+ l-0.5-0.4l-0.5-0.4l-0.4-0.4l-0.4-0.4L2.9,15l-0.4-0.4l-0.4-0.5l-0.4-0.4l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5
2663
+ l-0.3-0.5l-0.3-0.5L-1,9.2l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.5-1l-0.5-1l-0.5-1l-0.5-1l-0.4-1l-0.4-1l-0.4-1l-0.4-1l-0.4-1
2664
+ l-0.4-1l-0.3-1l-0.3-0.9l-0.3-0.9l-0.3-0.9l-0.3-0.9l-0.2-0.8L-8.5-9l-0.2-0.7l-0.2-0.2l-0.3-0.3l-0.4-0.4l-0.4-0.5l-0.4-0.5
2665
+ l-0.3-0.4l-0.2-0.4l-0.2-0.4l-0.3-0.4l-0.3-0.6l-0.3-0.5l-0.2-0.5l-0.2-0.5l-0.3-0.7l-0.5-0.5l-0.5-0.8l-0.5-0.9l-0.4-0.9l-0.2-1
2666
+ l-0.1-1v-0.5v-0.5v-0.7l0.1-0.7v-0.1l0.1-0.7l0.2-0.7l0.2-0.6l0,0l0.3-0.7l0.4-0.7l0.4-0.7l0,0l0.6-0.7L-12-29l0.7-0.5l0.7-0.5
2667
+ l0,0l0.7-0.4l0.8-0.3l0.8-0.2l0.8-0.2l0.8-0.1l0,0h0.8L-5.6-32.2z M14.2,260.9h0.2l0,0H14H14.2z M2.1-22.5L2.1-22.5v-0.2V-22.5z
2668
+ M2.1-23.1v-0.5v-0.2V-23.1z"
2669
+ />
2670
+ <path
2671
+ d="M-358.4,223.5l1.1,0.2l0,0l0.6,0.2l0.6,0.2l0.2,0.1l1.3,0.5l1.7,0.7l0.7,0.3l0.5,0.2l0.2,0.1l0.2,0.1
2672
+ l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.4,0.1l0.4,0.1l0.5,0.1l0.5,0.1l0.5,0.1l1.2,0.2l1.3,0.3l0.7,0.2l0.8,0.2l0.8,0.2l0.7,0.2
2673
+ l0.4,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.8,0.1
2674
+ l0.8,0.1l1.6,0.1l1.6,0.1l1.7,0.1l1.7,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l1,0.1l1,0.1l1,0.2l1,0.2l0.9,0.2l1.2,0.2
2675
+ l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.1l1.2,0.1
2676
+ l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l2.6,0.2l2.6,0.1l2.6,0.1
2677
+ l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1h2.6h2.6h2.6h2.6h2.5h2.5h5h5.3h5.3h5.3l5.3,0.1l5.3,0.1l5.3,0.1
2678
+ l5.3,0.1l5.3,0.1l5.3,0.1l5.3,0.2l5.3,0.2l5.3,0.2l5.3,0.2l5.3,0.2l5.3,0.2l5.3,0.2l5.3,0.2l5.3,0.2l5.3,0.3l5.3,0.3l5.3,0.3
2679
+ l5.3,0.3l5.3,0.3l5.3,0.3l5.3,0.3l5.3,0.3l5.3,0.3l5.3,0.3l5.3,0.3l5.3,0.4l5.3,0.4l5.2,0.4l1.7,0.1l1.7,0.1l3.4,0.2l3.4,0.2
2680
+ l3.4,0.2l3.5,0.2l3.5,0.2l3.5,0.1l3.5,0.1l3.5,0.1l3.5,0.1l3.5,0.1l3.4,0.1h3.4h3.4h3.4h3.3h0.6h0.6h0.7h0.7h0.7l0.8-0.1l1.7-0.1
2681
+ l1.8-0.1l1.9-0.1l1-0.1l1-0.1l1-0.1l1-0.1h1h1.1h1.1h1.1h1.1h0.6h0.5h0.5h0.5h0.5h0.5l0.5,0.1L12,245l0.6,0.1l0.5,0.1l0.6,0.1
2682
+ l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.3l0.4,0.2l1,0.5l0.9,0.7l0.8,0.8l0.7,0.9
2683
+ l0.6,0.9l0.5,1l0.3,1.1l0.2,1.1l0.1,1.1l-0.1,1.1l-0.2,1.1l-0.4,1.1l-0.5,1l-0.6,0.9l-0.7,0.9l-0.8,0.8l-0.9,0.7l-1,0.5l-1,0.4
2684
+ l-1.1,0.3l-1.1,0.1h-1.1l-1.1-0.1l-1.1-0.3l-1-0.4l-0.2-0.1l0,0h-0.1h-0.1H12h-0.1h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.3h-0.3H9.8
2685
+ H9.5H9.2H8.9H8.6H8.3H7.9H7.6H6.8H6H5.2H4.4H3.5H2.6l-0.9,0.1l-0.9,0.1l-0.9,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-0.9,0.1l-0.9,0.1
2686
+ h-0.9h-0.9H-10h-0.8h-3.5h-3.5h-3.5h-3.5l-3.5-0.1l-3.5-0.1l-3.5-0.1l-3.5-0.1l-3.5-0.1l-3.5-0.1l-3.5-0.2l-3.5-0.2l-3.5-0.2
2687
+ l-3.5-0.2l-3.5-0.2l-1.7-0.1l-1.7-0.1l-5.2-0.4l-5.2-0.4l-5.2-0.4l-5.2-0.4l-5.2-0.3l-5.2-0.3l-5.2-0.3l-5.3-0.3l-5.2-0.3
2688
+ l-5.3-0.3l-5.3-0.3l-5.3-0.3l-5.3-0.3l-5.3-0.3l-5.3-0.2l-5.3-0.2l-5.3-0.2l-5.3-0.2l-5.3-0.2l-5.3-0.2l-5.3-0.2l-5.3-0.2
2689
+ l-5.3-0.1l-5.3-0.1l-5.3-0.1l-5.3-0.1l-5.2-0.1l-5.2-0.1l-5.2-0.1h-5.2h-5.2h-5.2h-5.1h-2.6h-2.6h-2.6h-2.6h-2.6h-2.6h-2.6
2690
+ l-2.6-0.1l-2.7-0.1l-2.7-0.1l-2.7-0.1l-2.7-0.1l-2.7-0.1l-2.7-0.1l-2.7-0.2l-2.7-0.2l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1
2691
+ l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2
2692
+ l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.2-0.2l-0.7-0.1l-0.7-0.1
2693
+ l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.8-0.1l-0.8-0.1l-1.6-0.1l-1.6-0.1l-1.7-0.1l-1.7-0.1l-0.9-0.1
2694
+ l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-1-0.1l-1-0.2l-1-0.2l-1-0.2l-1-0.2l-0.5-0.1l-0.5-0.1l-0.5-0.1
2695
+ l-0.4-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-1.2-0.2l-1.3-0.3l-0.7-0.2l-0.7-0.2l-0.8-0.2l-0.8-0.2l-0.8-0.2l-0.4-0.1
2696
+ l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.5-0.2l-0.5-0.2l-0.8-0.3l-0.9-0.4l-1.7-0.8l-0.8-0.3l-0.7-0.3l-0.3-0.1l-1-0.6l-0.9-0.7l-0.8-0.8
2697
+ l-0.7-0.9l-0.6-1l-0.4-1l-0.3-1.1l-0.2-1.1v-1.1l0.1-1.1l0.3-1.1l0.4-1.1l0.5-1l0.7-0.9l0.8-0.8l0.9-0.7l1-0.6l1-0.5l1.1-0.4
2698
+ l1.1-0.2l1.1-0.1L-358.4,223.5z"
2699
+ />
2700
+ <path
2701
+ d="M-365,199.4h0.3h0.3h0.3l0.4,0.1l0.7,0.2l0.4,0.1l0.3,0.1l0.3,0.1l0.3,0.1h0.1l0.2,0.1l0.2,0.1l0.2,0.1
2702
+ l0.2,0.1h0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2h0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.1l0.2,0.2l0.2,0.2
2703
+ l0.2,0.2l0.2,0.2l0.2,0.3l0.2,0.3v0.1l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.1l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3
2704
+ l0.1,0.3v0.3v0.1v0.3v0.3v0.3v0.3v0.3v0.1v0.3v0.3v0.3v0.3l-0.1,0.3v0.1l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3v0.1l-0.1,0.3
2705
+ l-0.1,0.3l-0.1,0.3l-0.2,0.4l-0.4,0.7l-0.3,0.5l-0.3,0.4l-0.3,0.4l-0.5,0.6l-0.5,0.5l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.7,0.6
2706
+ l-0.7,0.6l-0.3,0.3l-0.3,0.3l-0.3,0.2l-0.1,0.1l-0.1,0.5v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.2v0.2v0.2
2707
+ v0.2v0.2v0.2v0.2v0.2v0.2v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1l0,0v0.1h0.1l0.1,0.1h0.1l0.1,0.1
2708
+ l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.4,0.1l0.3,0.1l0.3,0.1
2709
+ l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2
2710
+ l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3
2711
+ v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3
2712
+ l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2
2713
+ l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.3h-0.3
2714
+ h-0.3h-0.3h-0.3h-0.3h-0.3l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.6-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.3l-0.7-0.3l-0.6-0.3l-0.6-0.3
2715
+ l-0.6-0.3l-0.6-0.3l-0.6-0.4l-0.6-0.4l-0.6-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.5l-0.5-0.5l-0.5-0.5l-0.4-0.5l-0.4-0.5
2716
+ l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6
2717
+ l-0.2-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.5l-0.1-0.6v-0.6v-0.5v-0.5v-0.5v-0.5v-0.5v-0.6v-0.5
2718
+ v-0.5v-0.5v-0.5v-0.5v-0.5l0.1-0.5l0.1-0.5l0.1-1l0.1-1l0.2-1.1l0.1-0.7l0.2-0.7l0.2-0.7l0.2-0.6l0.3-0.6l0.3-0.5l0.3-0.5
2719
+ l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.3l0.3-0.3l0.3-0.3l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.4l0.5-0.4l0.4-0.4l0,0l0.1-0.2l0.1-0.3
2720
+ l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.2
2721
+ l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.3h0.3h0.3
2722
+ L-365,199.4z M-366.9,217h0.1H-366.9L-366.9,217z"
2723
+ />
2724
+ </g>
2725
+ </g>
2726
+ </g>
2727
+ </svg>
assets/img/grid.svg ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="231" height="252" fill="none">
2
+ <rect width="65.374" height="65.374" x=".162" y=".779" fill="#E1E3E6" rx="3"/>
3
+ <rect width="47.266" height="5.148" x="9.216" y="76.153" fill="#E1E3E6" rx="2.574"/>
4
+ <rect width="62.8" height="15" x="1.565" y="101.448" fill="#E1E3E6" rx="5"/>
5
+ <rect width="65.374" height="65.374" x=".162" y="136.277" fill="#E1E3E6" rx="3"/>
6
+ <rect width="47.266" height="5.148" x="9.216" y="211.651" fill="#E1E3E6" rx="2.574"/>
7
+ <rect width="62.8" height="15" x="1.565" y="236.946" fill="#E1E3E6" rx="5"/>
8
+ <rect width="65.374" height="65.374" x="82.478" y=".779" fill="#E1E3E6" rx="3"/>
9
+ <rect width="47.266" height="5.148" x="91.532" y="76.153" fill="#E1E3E6" rx="2.574"/>
10
+ <rect width="62.8" height="15" x="83.882" y="101.448" fill="#E1E3E6" rx="5"/>
11
+ <rect width="65.374" height="65.374" x="82.478" y="136.277" fill="#E1E3E6" rx="3"/>
12
+ <rect width="47.266" height="5.148" x="91.532" y="211.651" fill="#E1E3E6" rx="2.574"/>
13
+ <rect width="62.8" height="15" x="83.882" y="236.946" fill="#E1E3E6" rx="5"/>
14
+ <rect width="65.374" height="65.374" x="164.788" y=".779" fill="#E1E3E6" rx="3"/>
15
+ <rect width="47.266" height="5.148" x="173.843" y="76.153" fill="#E1E3E6" rx="2.574"/>
16
+ <rect width="62.8" height="15" x="166.192" y="101.448" fill="#E1E3E6" rx="5"/>
17
+ <rect width="65.374" height="65.374" x="164.788" y="136.277" fill="#E1E3E6" rx="3"/>
18
+ <rect width="47.266" height="5.148" x="173.843" y="211.651" fill="#E1E3E6" rx="2.574"/>
19
+ <rect width="62.8" height="15" x="166.192" y="236.946" fill="#E1E3E6" rx="5"/>
20
+ <rect width="6.177" height="6.177" x="13.283" y="86.301" fill="#E1E3E6" rx="3"/>
21
+ <rect width="6.177" height="6.177" x="21.498" y="86.301" fill="#E1E3E6" rx="3"/>
22
+ <rect width="6.177" height="6.177" x="29.713" y="86.301" fill="#E1E3E6" rx="3"/>
23
+ <rect width="6.177" height="6.177" x="37.927" y="86.301" fill="#E1E3E6" rx="3"/>
24
+ <rect width="6.177" height="6.177" x="46.238" y="86.301" fill="#E1E3E6" rx="3"/>
25
+ <rect width="6.177" height="6.177" x="95.599" y="86.301" fill="#E1E3E6" rx="3"/>
26
+ <rect width="6.177" height="6.177" x="103.814" y="86.301" fill="#E1E3E6" rx="3"/>
27
+ <rect width="6.177" height="6.177" x="112.029" y="86.301" fill="#E1E3E6" rx="3"/>
28
+ <rect width="6.177" height="6.177" x="120.243" y="86.301" fill="#E1E3E6" rx="3"/>
29
+ <rect width="6.177" height="6.177" x="128.554" y="86.301" fill="#E1E3E6" rx="3"/>
30
+ <rect width="6.177" height="6.177" x="177.909" y="86.301" fill="#E1E3E6" rx="3"/>
31
+ <rect width="6.177" height="6.177" x="186.124" y="86.301" fill="#E1E3E6" rx="3"/>
32
+ <rect width="6.177" height="6.177" x="194.339" y="86.301" fill="#E1E3E6" rx="3"/>
33
+ <rect width="6.177" height="6.177" x="202.553" y="86.301" fill="#E1E3E6" rx="3"/>
34
+ <rect width="6.177" height="6.177" x="210.864" y="86.301" fill="#E1E3E6" rx="3"/>
35
+ <rect width="6.177" height="6.177" x="13.283" y="221.798" fill="#E1E3E6" rx="3"/>
36
+ <rect width="6.177" height="6.177" x="21.498" y="221.798" fill="#E1E3E6" rx="3"/>
37
+ <rect width="6.177" height="6.177" x="29.713" y="221.798" fill="#E1E3E6" rx="3"/>
38
+ <rect width="6.177" height="6.177" x="37.927" y="221.798" fill="#E1E3E6" rx="3"/>
39
+ <rect width="6.177" height="6.177" x="46.238" y="221.798" fill="#E1E3E6" rx="3"/>
40
+ <rect width="6.177" height="6.177" x="95.599" y="221.798" fill="#E1E3E6" rx="3"/>
41
+ <rect width="6.177" height="6.177" x="103.814" y="221.798" fill="#E1E3E6" rx="3"/>
42
+ <rect width="6.177" height="6.177" x="112.029" y="221.798" fill="#E1E3E6" rx="3"/>
43
+ <rect width="6.177" height="6.177" x="120.243" y="221.798" fill="#E1E3E6" rx="3"/>
44
+ <rect width="6.177" height="6.177" x="128.554" y="221.798" fill="#E1E3E6" rx="3"/>
45
+ <rect width="6.177" height="6.177" x="177.909" y="221.798" fill="#E1E3E6" rx="3"/>
46
+ <rect width="6.177" height="6.177" x="186.124" y="221.798" fill="#E1E3E6" rx="3"/>
47
+ <rect width="6.177" height="6.177" x="194.339" y="221.798" fill="#E1E3E6" rx="3"/>
48
+ <rect width="6.177" height="6.177" x="202.553" y="221.798" fill="#E1E3E6" rx="3"/>
49
+ <rect width="6.177" height="6.177" x="210.864" y="221.798" fill="#E1E3E6" rx="3"/>
50
+ </svg>
assets/img/no-matching-products.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg viewBox="0 0 797.12 564.08" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd"><path d="m216.92 118.87 1 .15 1 .25.61.2.7.28.25.12.67.35.25.13.63.4.54.37.78.63.7.7.63.72.55.73.52.8.42.77.36.81.29.8.23.8.17.77.11.77.07.71v2.14l-.13 1.16-.22 1.2-.26 1.17-.34 1.13-.45 1.07-.42 1.1-.45 1.1-.5 1.09-.28.61.41.57.37.6.08.13.27.52.22.53.06.17.3 1v.18l.07.28.72-.48.75-.48.76-.47.79-.45.83-.43.9-.4 1-.39.73-.23.79-.18.4-.09.76-.11.49-.07h1.35l.78.08h.17l.86.17h.15l.95.3.14.05.5.2.46.23.14.08.5.29.46.33.14.08.43.35.42.39.11.1.39.4.36.43.1.12.32.41.28.45.09.14.45.86.08.17.3.8.07.18.21.74.12.53.13.85.07.82v1.21l-.07 1.2-.13 1.19-.2 1.15-.27 1.11-.31 1.09-.35 1.06-.09.24.62-.34 1-.55 1.1-.53 1.12-.48.72-.29.71-.23.8-.22.87-.18.62-.08.76-.07h1.52l.57.07.57.1.25.05.63.17.63.21.24.09.68.3.67.38.2.12.66.45.62.51.18.17.55.57.5.61.15.2.4.6.35.64.14.25.25.56.21.6.1.3.22.84.17.8.15 1.11.06 1.1v1.67h.17l1.45-.08h2.88l1.44.07 1.43.11 1.42.15 1.41.2 1.42.24 1.4.26.58.12 1.14-.27 1.35-.25 1.35-.18 1.38-.15 1.4-.1h5.85l1.52.08 1.55.12 1.58.15 1.6.17 1.63.2 1.65.21 1.67.25 1.7.27 1.7.3 1.73.32 1.74.35 1.75.35 1.76.38 1.79.4 1.78.42 1.8.43 1.78.47 1.8.46 1.8.49 1.8.5 1.79.51 1.78.54 1.78.53 1.77.57 1.77.55 1.75.58 1.71.58 1.72.6 1.7.6 1.67.62 1.65.62 1.61.63 1.6.63 1.57.64 1.53.65 1.52.65 1.47.66 1.43.65 1.4.67 1.37.67 1.31.68 1.29.68 1.23.69 1.2.68 1.17.7 1.1.72 1.08.71 1 .74 1 .76.95.8.91.84.85.86.74.82.66.8.64.83.6.85.56.87.52.87.48.88.47.9.42.9.4.9.36.92.35.91.32.94.28.91.27.94.25.93.22.93.2.94.18.93.17.93.16.94.14 1 .23 1.84.17 1.86.13 1.87.1 1.85.07 1.83v1.15l.09.14.83 1.38.82 1.43.78 1.47.73 1.48.7 1.52.65 1.52.29.68.56.05h.15l.87.17h.15l.88.27h.14l.8.35.15.07.73.4.13.1.65.45.14.1.56.46.37.35.55.59.3.38.48.67.22.31.45.79.35.7.42 1 .31 1 .25 1 .2.93.17.92.12.92.08.91.08.92.05.93v4.82l-.08 2-.12 2-.17 2.05-.18 2.07v.62l.15.35.32.8.25.8.23.8.18.8.14.78.1.78.08.77v.53l.18-.21 1.23-1.6.65-.8.55-1.15.42-.8.38-.69.37-.6.52-.83.7-1.07.85-1.26 1-1.4.58-.77.58-.77.64-.8.66-.78.69-.82.73-.8.77-.8.81-.78.87-.78.92-.77 1-.75 1-.67.62-.36.6-.34.61-.31.65-.3.7-.27.74-.25.78-.22.82-.16.86-.14.92-.06h.93l1 .08 1 .15 1 .25 1 .33.94.42.9.5.83.55.78.62.65.6.59.6.5.53.48.57.47.56.45.57.41.6.42.58.38.62.39.6.38.67.63 1.21.6 1.29.55 1.3.49 1.33.43 1.33.38 1.35.34 1.37.3 1.38.25 1.39.21 1.4.19 1.41.13 1.42.12 1.43.08 1.44.05 1.45v3.91l.66.27.72.4.13.07.65.43.6.48.14.12.48.47.45.51.12.14.33.46.32.47.1.17.45.85.08.2.3.71.18.54.22.83.15.77.1.73.07.7.05.68v3.29l-.06 1.61-.12 1.62-.17 1.62-.2 1.6-.25 1.58-.3 1.58-.33 1.57-.38 1.55-.4 1.55-.45 1.53-.49 1.54-.51 1.51-.55 1.5-.59 1.49-.6 1.48-.63 1.47-.67 1.46-.68 1.45-.7 1.44-.73 1.43-.75 1.42-.77 1.41-.78 1.4-.82 1.39-.82 1.38-.85 1.37-.85 1.36-.86 1.35-.87 1.34-.9 1.35-.43.61-.77 3.07-.43 1.63-.42 1.54-.42 1.43-.43 1.4-.59 1.56-.5 1.4-.55 1.4-.6 1.49-.68 1.56-.75 1.7-1.82 4.05-.36.75-.44.82-.46.83-.52.84-.55.83-.58.85-.62.85-.68.87-.77.86-.83.84-.6.51-.64.5-.46.3-.67.4-.18.1-.49.24-.5.21-.16.07-.67.22-.68.16h-.17l-.93.13h-1.09l-.76-.05-.75-.14-.75-.2-.14-.05-.78-.28-.43-.22-1.45 2-1.33 1.88-.24.35-.23.37-.23.38-.22.4-.52 1-.51 1.05-.54 1.16-.58 1.25-.62 1.32-.66 1.38-.74 1.4-.41.77-.45.75-.47.75-.5.77-.55.76-.58.77-.64.75-.7.75-.73.73-.8.72-.4.32-.45 1.06-.8 1.84-.8 1.8-.83 1.76-.84 1.75-.85 1.74-.88 1.7-.88 1.66-.92 1.65-.93 1.62-.95 1.57-1 1.55-1 1.5-1 1.48-1 1.43-1.08 1.39-1.1 1.35-1.15 1.3-1.15 1.23-.62.63-.61.6-.62.59-.63.56-.64.55-.65.55-.66.52-.67.52-.7.5-.75.51-.57.35-.7.37-.43.2-.73.27-.15.05-.85.23h-.14l-1 .15h-1.98l-.59-.09h-.11l-.62-.13-.6-.19h-.1l-.57-.21-.55-.27-.1-.05-.51-.3-.5-.32-.09-.08-.43-.32-.38-.35-.1-.08-.65-.7-.09-.1-.51-.65-.07-.12-.53-.88-.13-.31-.23-.46-.18-.49-.12-.31-.25-.77-.08-.32v.05l-.2 1.15-.24 1.1-.26 1.07-.3 1.05-.34 1-.36 1-.44 1-.5 1-.4.65-.4.6-.75.94-.73.85-.77.8-.8.76-.81.72-.85.68-.89.64-.88.58-.92.55-.91.5-.95.47-.95.41-1 .39-1 .35-1 .3-1 .26-1 .24-1 .18-1 .17-1 .13-1 .1-1 .07-1 .05h-2l-1-.05-1-.05-1-.1-1-.12-1-.13-1-.15-.95-.19-.95-.21-.95-.22-.94-.25-.15-.05-.06.07-.84.55-.83.55-.87.51-.88.49-.9.46-.92.45-.93.4-.95.39-1 .35-1 .31-.8.22-.81.18-.79.15-.8.14-.76.08-.77.07h-2.98l-1.34-.08-1.33-.15-1-.14-.2.1-1.17.59-1.2.55-1.23.51-1.25.45-1.28.4-1.27.34-.72.16-.68.14-.7.1-.7.08-.72.07h-2.26l-.79-.06-.81-.1-.84-.17-.85-.22-.88-.28-.87-.37-.88-.43-.8-.5-.82-.57-.71-.55-.22-.18-.92.2-1.48.3-1.48.25-1.42.18-.8.09-.73.05h-2.35l-.82-.07-.88-.13-.89-.18-.88-.25-.83-.29-.8-.33-.77-.38-.75-.4-.7-.45-.67-.49-.63-.5-.6-.51-.55-.54-.19-.55-.49-.57-.46-.58-.44-.59-.4-.58-.38-.62-.35-.6-.32-.6-.31-.61-.3-.67-.5-1.18-.44-1.24-.38-1.25-.33-1.25-.27-1.25-.22-1.25-.18-1.25-.13-1.25-.09-1.25-.01-1.21v-2.42l.07-1.2.11-1.2.15-1.18.2-1.17.24-1.17.3-1.15.36-1.15.42-1.15.48-1.06.34-.65.25-.42.5-.78.16-.24.59-.7.41-.46.65-.64.64-.56.65-.55.7-.57.71-.55-.06-.22-.19-.81-.13-.69-.1-.68-.07-.68v-.25l-.82.05h-.18l-.69-.05-.66-.09h-.17l-.85-.2-.82-.28h-.15l-.91-.44-.85-.55-.14-.1-.56-.45-.54-.5-.48-.55-.08-.11-.6-.84-.49-.9-.06-.15-.32-.8-.25-.81v-.19l-.14-.66-.06-.67v-1.78l.06-1 .14-1 .16-.95.22-.92.25-.92.28-.88.32-.85.35-.83.37-.84.38-.8.2-.4-.9-.53-1.92-1.17-1.91-1.2-1.94-1.25-1.97-1.29-2-1.3-2-1.34-2-1.35-2-1.4-2-1.4-2-1.43-2-1.45-1.95-1.48-2-1.49-1.93-1.5-1.95-1.53-1.92-1.53-1.92-1.54-1.88-1.55-1.88-1.56-1.85-1.57-1.57-1.58-1.8-1.58-1.79-1.59-1.75-1.56-1.71-1.57-1.7-1.57-.49-.45-.56.32-1.2.55-1.25.53-1.26.54-1.3.51-1.34.49-1.33.46-1.37.44-1.36.41-1.4.4-1.39.35-1.41.34-1.4.28-1.42.25-1.4.2-1.42.17-1.43.1-1.32-.02h-1.5l-.71-.05-.74-.06-.73-.09-.75-.11-.75-.15-.77-.19-.76-.21-.77-.27-.78-.3-.85-.4-.64-.35-.73-.47-.3-.2-.77-.61-.25-.24-.4-.36-.36-.4-.2-.25-.37-.45-.32-.49-.16-.25-.32-.51-.27-.54-.11-.28-.24-.53-.18-.57-.08-.3-.14-.55-.11-.55v-.3l-.06-.53v-2.09l.12-.83.11-.68.12-.4h-.4l-.85-.05-.48-.05-.79-.13-.78-.2-.78-.27-.74-.31-.73-.37-.68-.42-.64-.46-.58-.49-.37-.33-.51-.55-.49-.58v-.07l-.46-.72-.4-.76-.32-.8v-.09l-.21-.71-.14-.74-.08-.73v-.92l.07-.81v-.1l.12-.6.15-.62v-.12l.29-.8.06-.13.4-.85.17-.28.4-.65.37-.54.53-.7.5-.61.52-.59 1-1.1 1.06-1.13 1.05-1.13 1-1.17.47-.55.45-.55.43-.52.39-.51.33-.47.28-.42.09-.15-.09-.3-.15-.73v-.17l-.1-.88v-1.38l.07-.62.12-.62v-.11l.15-.64.22-.61v-.1l.26-.62.32-.58.05-.1.33-.52.35-.48.09-.09.33-.4.37-.38.08-.08.43-.39.45-.35.2-.15.74-.46.33-.75.42-.95.4-1 .4-1 .36-1 .37-1 .37-1.05.35-1.07.23-.73h-.67l-1-.06-1-.19-1-.31-.92-.42-.86-.53-.79-.64-.71-.73-.62-.8-.27-.47-1 .17-1 .05-1-.05-1-.19-.92-.28-.88-.37-.74-.46-.7-.51-.65-.59-.58-.63-.5-.7v-.08l-.44-.75-.36-.8-.27-.84v-.11l-.15-.69-.09-.68v-2.18l.13-1 .13-.82-.33-.5-.16.25-.54.71-.53.72-.55.68-.58.67-.64.67-.66.65-.77.66-.57.44-.63.41-.33.2-.84.45-.3.15-.85.34-.46.15-.47.11-.75.17h-.13l-.85.08h-1.48l-1-.11-.52-.1-.48-.14-.79-.26-.11-.05-.82-.35-.12-.07-.78-.47-.12-.06-.76-.59-.1-.08-.69-.65-.08-.08-.63-.75-.07-.1-.5-.74-.07-.11-.4-.77v-.12l-.21-.51-.19-.55-.08-.25-.15-.62-.12-.63v-.29l-.08-1v-1.83l.15-.93.19-.85.21-.77.24-.73.23-.69.28-.7.5-1.2.57-1.2.57-1.13.56-1.07 1-1.83.82-1.5.58-1.08.65-1.14.65-1.11.67-1.1.67-1.09.66-1.08 1.35-2.05 1.35-2 1.32-2 1.3-1.94 1.27-1.9 3.05-4.7.15-.26 1-1.94 1.39-2.6.45-.86-.17-1-.25-1.65-.22-1.67-.18-1.7h-.2l-1-.07h-.1l-.95-.16-.93-.29h-.1l-.8-.35-.75-.4-.1-.07-.59-.4-.55-.43-.1-.1-.4-.38-.38-.4-.1-.12-.55-.72-.3-.41-.42-.72-.31-.67-.25-.56-.3-.79-.27-.73-.25-.75-.25-.78-.42-1.47-.36-1.52-.3-1.53-.25-1.53-.2-1.54-.15-1.56-.1-1.55v-4.7l.08-1.59.12-1.56.16-1.59.22-1.58.23-1.58.27-1.59.32-1.56.05-.25-.27-.42-.42-.7-.36-.68-.32-.7-.3-.7-.25-.7-.22-.69-.18-.7-.15-.66-.13-.69-.12-.73-.15-1.23-.08-1.3v-2.54l.07-1.23.12-1.22.15-1.2.18-1.2.22-1.16.23-1.15.25-1.14.27-1.11.26-1.09.3-1.06.3-1.07.6-1.95.6-1.83.57-1.67 1-2.68.36-.95.4-1 .42-1 .47-1 .48-1 .5-1.05.55-1 .57-1.07.58-1.08.62-1.09.63-1.1.67-1.1.68-1.11.72-1.12.73-1.12.75-1.13.78-1.13.8-1.14.82-1.13.83-1.13.87-1.14.88-1.13.9-1.13.92-1.14.93-1.11 1-1.1 1-1.12 1-1.08 1-1.09 1-1.06 1-1.07 1-1 1.06-1 1.09-1 1.1-1 1.11-1 1.14-1 1.15-.94 1.15-.9 1.18-.86 1.18-.85 1.2-.84 1.24-.78 1.23-.77 1.25-.71 1.27-.7 1.28-.65 1.3-.62 1.32-.57 1.33-.53 1.35-.48 1.37-.42 1.4-.38 1.4-.32 1.43-.27 1.38-.2.79-.06.73-.07h3.7l.75.07.73.08.75.1.75.12.75.15.75.16.74.19.75.21.88.27.47.2.81.37.2.1.84.5.16.11.79.62.15.13.71.7.14.15.63.79.12.16.48.77.08.18.39.8.08.19.27.73.18.55.18.88.12.84.05.76v1.52l-.11 1.13-.14.65.24-.15 1-.56.62-.3.6-.27.63-.25.65-.23.7-.22.72-.18.78-.15.82-.12h1.75zm129.63 298.13.09.2.06.2v-.6zm-128.31-72.17.33.25-.1-.31zm-4.72-18.38v2.33h.5l.16-.05-.48-2-.12-.5zm84.25-11.62.4 1.1.33 1.12.3 1.12.25 1.11.24 1.14.2 1.16.06.49.17-.55.2-.79.15-.73.13-.73v-3.09l-.09-.07-.31-.25-.35-.28-.35-.25-.34-.23-.33-.22-.32-.2-.25-.15zm-143.22-.53v.05zm83.1-12.25-.36 1-.34 1-.31 1-.3 1-.29.95-.28.95-.23.95-.24.94-.21.93-.2.92-.07.35.48-.55.89-1.07.1-.53.4-2 .45-2 .45-2 .45-1.85-.27-.17zm-55.83 6.58-.22.7.5.1-.11-1.2v-.2zm235.7-17.1-1.75 1.94-1.2 1.33.05.18.18.77.15.75.12.77.1.73.07.75.05.73v1.4l.05-.06.75-1.45.75-1.4.75-1.35.25-.45v-.07l.18-1.32.19-1.31.16-1.32.14-1.3.06-.55zm.3-19-.38 1.13-.42 1.1-.47 1.1-.35.84.49.21.88.54.8.65.65.66-.07-1.1-.08-1.05-.1-1-.12-1-.15-.95-.16-.91-.19-.87-.06-.22zm-60-41.38.47-.07.71-.08h.42l-.1-.06-.42-.25-.42-.24-.4-.2-.4-.18-.23-.12zm-7.7-26.54.23 1.3.24 1.09.08.36.1.37.42 1.53.73 2.67.15.55h2.73l1 .06 1 .12 1 .13 1 .19.86.2-.06-.2-.19-.5-.18-.47-.2-.47-.2-.43-.22-.42-.21-.38-.24-.38-.23-.35-.23-.34-.25-.33-.25-.3-.24-.27-.23-.25-.33-.28-.42-.35-.52-.4-.6-.43-.7-.47-.76-.48-.84-.52-.91-.52-1-.55-.56-.3zm-105.47 1.85.19.64.31 1 .12.49.43.06 1.1.22-.45-.7-.78-1.23-.38-.65zm25.4-4.35h-2.76l-1.4.08-1.44.1-1.43.13h-.1l.1.12.48.51.49.52.48.5.52.5.5.48.53.47.53.47.54.46.55.45.55.44.4.3.43-.65.45-.64.43-.6.47-.58.48-.57.5-.58.54-.55.56-.57.62-.53.37-.32h-2.04zm48.82-10.11 1.37 1 .28.2.3.2.43.27.55.3.64.33.7.35 1.66.82 1.84.86 2 1 2.05 1 .9.46v-2.85l-1.25-.43-1.61-.55-1.62-.53-1.63-.52-1.65-.52-1.65-.5-1.67-.5-1.57-.45zm-121.77-39-1.35 1.3-1.35 1.34-1.35 1.36-1.35 1.37-1.35 1.36-1.33 1.4-1.32 1.4-1.31 1.42-1.3 1.43-1.3 1.44-1.29 1.45-1.25 1.46-.26.3-.49.92-1.58 3.05-3.22 6.16-.4.75.39-.51.56-.75.74-1 1.85-2.27 5.13-6.25 2-2.5 1.2-1.67 1.4-1.93 1.42-1.92 1.45-1.91 1.5-1.92 1.53-1.92 1.57-1.88.83-1 .82-.95.33-.36.35-.49zm480.9-96.23.8.13.52.13.76.25h.17l.9.4.15.07.55.3.52.35.11.08.57.44.53.5.1.1.39.41.36.45.4.55.55.87.47.9.38 1 .3.93.22 1 .15.94v.25l1.18-.84 1.73-1.23 1.8-1.27 1-.65 1-.63 1-.65 1-.62 1-.6 1.08-.58 1.12-.57 1.16-.51 1.17-.45.68-.25.65-.2.67-.19.67-.16.7-.15.71-.14.78-.13.76-.08h2.37l.8.09.83.13.84.17.81.23.82.27.82.33.8.37.76.43.75.47.72.5.73.56.64.57.63.65.55.67.5.7.45.71.38.72.34.72.28.71.25.7.2.72.17.68.11.69.1.66.09.74.08 1.23v1.28l-.05 1.27-.12 1.25-.16 1.25-.2 1.27-.25 1.26-.29 1.27-.33 1.28-.35 1.3-.38 1.3-.45 1.33-.43 1.33-.25.72h.55l.78-.05h1.57l.8.07.88.11.68.14.77.2.35.1.8.3.33.13.8.38.3.17.8.5.27.2.62.48h.05l.56-.23h.09l.75-.25.75-.18h.1l.91-.1h1l1 .1 1 .23h.09l.93.34.88.43h.09l.73.47.67.55.08.06.52.52.46.55.09.08.31.45.3.47.07.12.42.81.2.44.16.48.24.77.18.68.27 1.53.18 1.44.13 1.45.07 1.46v2.92l-.07 1.48-.1 1.49-.15 1.5-.18 1.5-.23 1.51-.25 1.52-.29 1.53-.31 1.54-.35 1.55-.37 1.56-.4 1.57-.4 1.48-.45 1.58-.46 1.58-.49 1.6-.5 1.6-.53 1.62-.53 1.6-.55 1.62-.59 1.63-1.18 3.23-1.22 3.24-1.3 3.25-1.29 3.23-1.3 3.2-1.31 3.17-1.32 3.13-2.57 6.12-2.46 5.87-1.15 2.8-1.1 2.71-1 2.62-1 2.48-.88 2.39-.38 1.1-.39 1.1-.33 1.05-.32 1-.28.95-.12.4-.16 1.25-.29 2.1-.36 2.7-.47 3.21-.52 3.57-.63 3.8-.34 2-.35 2-.38 2-.38 2-.42 2-.42 1.91-.45 1.87-.43 1.72-.48 1.75-.5 1.65-.27.85-.28.78-.28.78-.32.79-.32.75-.36.76-.39.77-.45.78-.53.8-.42.55-.48.59-.25.25-.53.53-.07.77-.13 1.2-.17 1.2-.2 1.2-.22 1.18-.26 1.2-.29 1.18-.3 1.2-.35 1.19-.35 1.18-.38 1.18-.42 1.19-.43 1.18-.45 1.18-.47 1.19-.5 1.18-.5 1.17-.53 1.18-.55 1.17-.55 1.16-.58 1.17-.59 1.17-.61 1.16-.64 1.17-1.26 2.28-1.32 2.29-1.37 2.26-.61.95-.4 2.07-.24 1.17-.3 1.35-.7 3-1.78 7.28-1 4.14-.52 2.15-.5 2.2-.5 2.23-.5 2.27-.46 2.26-.19.94.6.06.84.12.68.15.77.2.38.12.8.3.35.15.83.41.32.19.82.51.28.22.75.62.25.23.68.72.22.25.57.76.2.29.45.76.16.32.35.75.14.33.25.72.2.68.21 1 .14 1 .06.95v1.75l-.09.83-.11.82-.14.78-.16.78-.19.75-.2.75-.21.72-.25.73-.25.7-.29.75-.56 1.35-.64 1.35-.66 1.32-.7 1.3-.75 1.25-.77 1.23-.8 1.17-.82 1.13-.85 1.09-.86 1-.89 1-.51.51-.5.47-.52.47-.57.45-.61.45-.67.45-.77.43-.55.27-.7.3-.23.08-.9.28-.22.05-.58.12-.57.08h-.21l-.72.05h-.9l-.82-.1-.78-.17h-.18l-.85-.28-.82-.37-.17-.08-.78-.47-.73-.53-.15-.14-.6-.55-.55-.61-.14-.17-.31-.43-.3-.45-.47-.77-.55-1.07-.47-1.06-.38-1.07-.33-1.05-.27-1.07-.23-1.06-.19-1.07-.15-1.07-.11-1.08-.07-.82-1.13.55-1.33.76-1.33.8-1.34.84-1.36.86-1.35.89-1 .66-.07.62-.11.77-.14.75-.16.75-.2.73-.22.72-.23.71-.25.7-.29.69-.3.66-.31.65-.34.65-.35.64-.36.61-.39.62-.41.65-.79 1.12-.88 1.13-.92 1.08-1 1.05-1 1-1.05 1-.67.58-.13.53-.2.69-.25.66-.25.65-.29.62-.3.62-.31.56-.37.64-.67 1-.73 1-.77.92-.8.86-.81.8-.84.77-.83.7-.85.68-.85.64-.85.6-.85.56-.85.54-.83.51-.85.5-1.57.87-1.53.8-1.4.7-1.27.6-1 .47-.37.18-.47.25-1.36.75-1.59.88-.91.5-1 .47-1 .47-1.05.43-.72.23-.75.22-.51.1-.77.13h-.23l-.52.05h-1.47l-.73-.12h-.17l-1-.25-1-.4-.13-.07-.79-.42-.71-.48-.67-.58-.12-.1-.63-.67-.57-.75-.43-.75-.25.23-.8.62-.88.5-.94.4-1 .28-1 .17h-1l-1-.08-1-.2-1-.33-.92-.44-.85-.55-.67-.55-.78 2.35-1 2.9-.51 1.47-.33 1.38-.53 1.43-.55 1.45-.57 1.42-.6 1.4-.63 1.38-.67 1.39-.7 1.33-.75 1.28-.42.69-.41.65-.45.63-.47.63-.48.62-.5.62-.54.6-.63.65-.8.73-.65.52-.4.26-.68.44-.15.06-.47.25-.48.2-.14.05-.7.24-.71.18h-.12l-1 .13h-1.09l-.85-.08-.81-.17-.82-.25h-.07l-.83-.35-.77-.45-.73-.52-.07-.07-.58-.51-.53-.57-.49-.62-.05-.06-.46-.77-.4-.82v-.1l-.23-.61-.18-.64v-.11l-.16-.9v-.15l-.07-1v-1.19l.06-.7.15-1 .19-.88.2-.87.23-.85.25-.88.55-1.75v-.12l-.38-.48-.62-.95-.52-.95-.4-.9-.35-.88-.33-.87-.3-.9-.28-.92-.29-1-.28-1-.53-2.09-.57-2.25-.2-.86-.47-.09.14 1.07.1 1v1.89l-.11.85-.2.83-.29.8-.36.78-.55.87-.65.81-.75.72-.82.62-.9.51-1 .39-1 .28-.8.12-.1.81-.17 1-.2 1-.22 1-.26 1-.32 1-.37 1-.41 1-.5 1-.57 1-.65 1-.77 1-.81.87-.55.52-.52.41-.53.42-.57.38-.6.37-.65.33-1 .47-1 .38-1.05.34-1 .25-1 .18-1.05.12-1 .05h-1l-1-.06-1-.1-1-.14-.95-.18-.92-.23-.9-.25-.88-.29-.87-.31-.85-.34-.83-.35-.82-.38-.8-.4-.78-.43-.77-.44-.77-.45-.75-.48-.75-.48-.73-.49-.72-.51-.73-.54-1.35-1.05-1.49-1.04-1.32-1.14-1.26-1.16-1.22-1.19-.92-.91-.6.28-.66.28-.69.24-.71.2-.74.16-.76.12-.79.07h-1.6l-.8-.08-.8-.15-.76-.19-.77-.25-.73-.28-.67-.32-.75-.38-.68-.4-.67-.43-.65-.47-.63-.47-.6-.5-.57-.51-.55-.55-.53-.55-.5-.57-.49-.58-.45-.59-.43-.61-.42-.62-.38-.62-.37-.63-.35-.65-.33-.65-.1-.22-.37.32-.78.62-.87.51-.91.4-1 .3-1 .19h-1l-1-.07-1-.18-1-.3-.82-.47-.85-.51-.8-.62-.7-.72-.61-.8-.52-.86-.42-.92-.28-1-.18-1-.05-1 .06-1 .19-1 .3-1 .41-.91.54-.85.61-.79.59-.58.1-.13.11-.22.14-.28.16-.33.17-.39.18-.43.19-.45.4-1.1.41-1.22.42-1.33.43-1.4.9-3.12.94-3.3.48-1.71.5-1.74.53-1.73.55-1.73.59-1.74.61-1.71.65-1.67.37-.87.37-.83.38-.83.4-.82.42-.82.43-.8.48-.8.5-.78.54-.78.58-.77.62-.75.68-.75.75-.73.8-.7.9-.67.67-.43.08-.15.82-1.27.86-1.23.9-1.2.94-1.15 1-1.14 1-1 .57-.55.55-.51.56-.5.57-.5.58-.47.6-.47.62-.45.63-.43.64-.4.66-.4.67-.38.68-.37v-.01l.15-1.37.18-1.38.2-1.42.24-1.43.25-1.45.26-1.47.3-1.48.32-1.5.35-1.5.35-1.52.4-1.52.4-1.51.42-1.54.45-1.51.46-1.5.5-1.52.5-1.5.54-1.47.55-1.48.56-1.45.59-1.42.6-1.41.63-1.39.65-1.36.67-1.32.7-1.32.73-1.26.22-.35.45-1 .48-1.05.52-1 .53-1 .55-1 .58-1 .6-1 .65-1 .67-.93.7-.92.73-.9.79-.86.9-.95.51-.47.65-.52.42-.31.42-.27.8-.42.11-.06.52-.22.53-.2h.12l.67-.19.68-.11h.1l.82-.08h.91l.92.1.88.2h.1l.87.3.82.38.08.05.75.45.68.52.07.06.53.5.5.55.07.07.35.47.32.46.4.17.8.37.78.41.75.45.72.49.36.28.29-.25.73-.63.75-.62.77-.58.78-.59.8-.55.82-.55.83-.51.83-.49.87-.46.87-.45.9-.44.9-.4.91-.36.94-.35 1-.32 1-.28 1-.27 1-.23 1-.19 1-.16 1-.15 1-.1 1.05-.07h2.31l-.41-.61-.1-.17-.37-.67-.23-.5-.3-.78-.22-.67-.23-.85-.19-.78-.18-.78-.17-.8-.15-.79-.15-.81-.21-1.55-.15-1.57-.1-1.58v-3.15l.06-1.57.1-1.55.15-1.57.2-1.55.24-1.53.16-1.64.32-1.54.35-1.51.38-1.52.42-1.52.45-1.5.47-1.5.5-1.48.51-1.48.55-1.49.57-1.46.58-1.47.62-1.47.47-1.11v-.09l-.72-3.18-.68-3.2-.63-3.25-.25-1.35-.42.42-.7.75-.73.76-.75.75-.75.74-.79.71-.78.7-.8.69-.8.66-.83.65-.85.62-.87.6-.88.57-.92.55-.93.53-1 .48-1 .45-1 .42-1 .38-.82.24-.87.21-.6.09-.82.15h-1.97l-.55-.08h-.2l-.63-.14-.62-.18-.18-.07-.69-.26-.65-.34-.16-.08-.67-.42-.62-.46-.15-.12-.56-.52-.52-.56-.12-.14-.43-.58-.4-.63-.1-.17-.28-.55-.25-.58-.07-.19-.18-.53-.15-.53v-.22l-.15-.88v-.22l-.06-.77v-1.25l-.16-.56-.27-1.19-.2-1.23-.13-1.23-.07-1.22v-2.4l.1-1.18.14-1.19.18-1.16.22-1.17.25-1.15.28-1.15.32-1.15.33-1.15.37-1.15.4-1.15.41-1.13.12-.32-.18-.22-.42-.53-.4-.53-.38-.57-.37-.57-.35-.58-.33-.58-.3-.6-.27-.6-.27-.6-.23-.62-.23-.68-.35-1.19-.29-1.25-.2-1.25-.13-1.23-.07-1.23v-1.22l.07-1.22.11-1.18.17-1.17.23-1.16.27-1.14.3-1.13.33-1.1.39-1.1.41-1.08.44-1.07.46-1.05.5-1 .52-1 .55-1 .55-1 .6-1 .6-1 .62-1 .65-1 .65-.95.66-.93.69-.92.7-.92.71-.9.72-.88.72-.87.73-.86.75-.84.75-.83.75-.82.77-.81 1.5-1.52 1.53-1.47 1.52-1.4 1.51-1.31 1.5-1.24 1.45-1.13.75-.57.74-.51.71-.5.55-.37.12-1.4.27-3.25.33-3.22.35-3.18.38-3.1.39-3.18.28-2.12.33-2.4.42-2.6.25-1.38.25-1.42.28-1.45.32-1.47.33-1.5.37-1.5.4-1.51.43-1.52.47-1.52.52-1.51.55-1.5.6-1.5.63-1.44.37-.75.36-.73.4-.72.4-.71.42-.7.45-.7.47-.7.5-.67.51-.68.55-.65.59-.65.61-.64.67-.61.68-.59.74-.56.78-.55.82-.5.8-.44 1-.48.94-.42 1-.38.95-.37 1-.31 1-.29 1-.23 1-.22 1-.16 1-.12 1-.08h1l.42-.25.6-.33.61-.33.64-.32.65-.28.66-.29.69-.25.7-.23.71-.22.74-.18.75-.15.76-.13.77-.1.78-.05h1.62l.82.05.81.09.82.11.83.17.82.22.8.23.82.28.78.34.78.35.77.4.75.43.45.3.7-.47 1.52-.95.93-.57 1-.58 1.05-.6 1.13-.62 1.18-.65.97-.79 1.3-.65 1.35-.65 1.39-.63 1.41-.64 1.47-.6 1.48-.56 1.52-.54 1.53-.5 1.54-.43.81-.22.8-.18.82-.17.8-.15.83-.13.82-.1.85-.08.85-.07h2.65l.92.09 1 .15 1 .2 1 .25 1 .35 1 .41 1 .5.95.6.93.69.88.78.55.6.49.55.5.65.66 1 .55 1 .44 1 .31.85.27.76.15.54.3-.09 1-.31 1-.29 1-.26 1-.25 1-.22 1-.2 1-.17 1-.13 1.08-.08h1.08l.75.05zm-149 296.91-.48.89-.5.86-.5.84-.52.81-.15.22-.1.3-.38 1.12-.39 1v1.15l-.07 2.09v1.86l-.12 1-.1.42.33.33 1 .92 1 .88 1 .85 1 .8 1 .77.47.33.47.33.46.34.47.3.47.28.45.27.43.25.42.23.41.2.4.18.37.17.37.13.33.14.32.1.28.08.27.05.23.05h.15l.1-.33.08-.43.1-.49.09-.51.08-.59.07-.61.05-.67v-4.63l-.07-1.77-.1-1.82-.15-1.85-.18-1.9-.2-1.91-.13-1.1-3-.95-3.9-1.2-1.15-.34zm136.2-52.88-.48.6-1.13 1.42-1.22 1.53-1.3 1.65-.78 1 .76-.38 1.45-.68 1.44-.65.56-.25.14-.82.43-2.45.18-1zm-34.2 3.82-1.77 2.2.89-.09h1.23l1.12.05-.12-.65-.15-1.27-.08-1.26v-.34zm-29.5-12.25v.83l-.06.52-.1.5.75.41.45.29.68.5.57.5.55.51.66.74.65.8.55.81.49.8.43.82.38.82.32.8.3.8.25.81.23.8.2.8.1.42 1-1.3 2.62-3.28.75-.95-.45-.1-.72-.19-.71-.21-.72-.24-.7-.28-.7-.3-.7-.33-.67-.37-.66-.4-.64-.43-.63-.45-.62-.49-.6-.5-.56-.53-.84-.83-.78-.85-.75-.9-.27-.35zm-22-24.77-.78.58-.77.59-.75.58-.7.55-1.28 1.1-1.15 1-.93.85-.67.64-.32.31-.31.37-.34.4-.35.43-.35.49-.36.53-.37.57-.38.6-.39.63-.36.67-.39.7-.36.73-.39.77-.36.78-.35.8-.37.85-.35.85-.33.87 1.33-1.62 1.87-2.35 1.86-2.35 1.85-2.37 3.67-4.73 1.82-2.35 1.26-1.6zm17.12 13-.43 1.28-.45 1.3-.15.4.51.22.14.05.51.26.5.3.12.09.17.13-.24-.88-.23-1.07-.17-1.07-.13-1.06v-.37zm40.38-12.53-.45.7-1.48 2.23-1 1.5-1.07 1.68-1.26 1.82-.82 1.16.72-.55.55-.41.3-.39 2.91-3.85 1.59-2.11.26-2v-.18zm-17-4.55-.47.61-.45.64-.45.63-.43.63-.43.62-.4.63-.39.62-.1.17.12-.07 1.14-1.6 1.08-1.59 1-1.51v-.09zm-9.85-14.9h-1.32v.68l.1 1v.31l.37-.45 1.35-1.55zm-18.68-5.7-.5.86-.5.85-.54.84-.13.2h.5l.83.05.82.1v-3.72zm36.23-12.7-.32.95-.31.91-.34.9-.35.9-.35.85.67-.48 1-.73v-.62l.18-2.45.12-1.4zm52.73-36.69-1.6 3.79-.43 1 .43.14.82.31.77.4.55.38v-7.39zm-60.2-23.4-.46.72-.49.7-.45.72-.93 1.5-.88 1.51-.87 1.57-.83 1.58-.82 1.62-.78 1.65-.79 1.68-.73 1.7-.73 1.72-.52 1.27 1.9-2.92.13-.2.49-1.1.7-1.55.4-.85.41-.83.45-.85.49-.85.51-.87.57-.87.62-.86.7-.89.76-.86.57-.57.23-1 .39-1.95.18-1.05v-.2zm-30.83 5.94-.1.13.2 1.65.08.58.2-.38v-2.45zm49.12-40.7-2.52 1.56-2.55 1.59-2.6 1.58-5.18 3.13-2.14 1.29h.09l.86-.26.37-.09.5-.1.53-.08h1.84l.63.05.65.1.28.05.67.15.65.22.27.1.61.25.6.32.25.13.55.33.52.39.23.18.44.37.41.4.2.21.55.64 1-2.72 1.25-3.32 1.27-3.3 1.32-3.26.45-1.07zm76.9-28.07-.8.65-.84.72-.86.75-.89.81-.88.85-.92.92-.91.93-.94 1-.95 1-1 1-.33.37-.27.53-1.35 2.5-1.3 2.4-1.18 2.34-1.18 2.11v1.22l-.05.57-.1.86-.13.95-.32 2.22-.37 2.55-.35 2.6-.15 1.18-.11 1.09-.09.88v.68l-.05 1.12v2.92l.15-.35 1.11-2.69 1.15-2.68 2.29-5.28 2.31-5.25 2.32-5.2 2.32-5.29.36-.75.52-1 .63-1.33.75-1.6.82-1.82.4-.93.42-1 .4-1 .38-1 .23-.61zm-107.42-8.3-1 1.5-1 1.5-1 1.53-1 1.55-1 1.55-.95 1.57-1 1.58-.35.62.08.06.33.35.62-.91 1.45-2.19 1.42-2.21 1.4-2.27.66-1.12.67-1.13.65-1.13.22-.39v-.8zm49.22 6h.06l.42-.47zm48.15-30.5-.62.33-.66.39-.7.43-.74.47-.75.5-.76.51-1.65 1.17-.34.23v.27l.06.92v2.7l-.06.88-.09.88-.11.87-.12.88-.17.87-.16.87-.19.88-.2.87-.23.9-.47 1.7-.53 1.75-.58 1.75-.62 1.75-.61 1.73-.68 1.75-.72 1.75-.72 1.7.14.2.26.45.44-.81 1.3-2.59 1.28-2.61 1.25-2.62 1.22-2.6 1.16-2.55 1.1-2.57.5-1.22.5-1.23.46-1.2.44-1.18.41-1.17.4-1.12.35-1.08.34-1 .3-1 .26-1 .22-.92.2-.85.15-.8.07-.35zm-55.18-10.15-.35.05-.39.07-.4.06-.43.09-.45.11-.43.1-1 .3-1 .34-1.08.38-1.1.43-1.12.45-1.13.5-1.12.5-1.08.54-1.11.53-1 .53-1 .54-.94.51-.86.5-.8.47-.7.42-1.2.75-.15.11.08.37.17.73.15.75.11.75.1.74.07.75v.73l.05.75v.53l.82-.78.91-.87.94-.86.93-.84 1-.83 1-.82 1-.81 1-.79 1-.78 1-.77 1-.75 1-.73 1-.72 1.05-.71 1.06-.69 1.09-.66 1.1-.67 1.02-.65.31-.17v-.23l-.05-.27zm-150.99 344.98 1.34.1 1.33.15 1.37.2.7.14.71.16.7.19.69.21.66.24.67.28.67.28.63.34.62.35.6.38.58.4.57.43.53.45.52.47.48.48.47.5.43.54.42.51.36.54.42.61.58 1 .07.13.43-.33 1.34-.95 1.3-.87.71-.45.69-.4.7-.4.7-.37.73-.35.75-.35.78-.3.82-.3.87-.25.93-.21 1-.15.71-.07h2.09l.33.05.52.1.53.11.3.09.38.11.39.14.38.15.27.13.4.18.38.2.37.24.25.15.36.26.37.27.33.3.24.2.31.3.3.32.29.33.2.23.25.34.23.33.22.35.16.28.19.34.18.35.22.5.3.71.25.72.21.77.17.78.12.78.08.8v1.64l-.08.8-.12.8-.18.76-.23.75-.27.74-.28.68-.34.65-.35.62-.38.6-.38.56-.42.54-.42.5-.48.53-.83.82-.92.8-.95.71-1 .67-1 .6-1 .57-1 .53-1 .5-1.05.47-1.08.45-1.1.41-1.12.39-1.13.38-1.15.35-1.17.35-1.18.32-1.18.3-1.22.3-1.22.26-1.21.27-1.22.23-.33.37-.54.72-1.51 2-.62.8-.3.35-.38.42-.44.42-.43.36-.48.34-.5.3-.52.28-.53.23-.55.19-.55.16-.57.12-.58.07-.59.05h-1.16l-.57-.1-.57-.12-.56-.17-.55-.2-.52-.25-.52-.26-.5-.32-.46-.35-.44-.38-.41-.4-.39-.44-.36-.46-.32-.49-.28-.51-.25-.52-.1-.25h-5.38l-1-.05-1-.07-1-.08-1-.1-1-.12-.95-.15-.94-.16-.93-.2-.93-.25-.95-.3-1-.39-.68-.31-.35-.19-.33-.18-.64-.37-1-.7-.77-.6-.37.33-.4.3-.42.27-.43.27-.43.21-.55.27-.7.3-.72.27-.72.23-.72.39-.72.16-.72.15-.71.14-.7.1-.7.06-.7.05h-2.1l-1.27-.08-1.28-.17-1.25-.21-1.22-.27h-.18l-.45.07-1.07.37-1.08.35-1.12.32-1.11.28-1.14.27-1.16.21-1.19.2-1.2.15-1.21.1-1.24.07h-1.65l-.55-.05-.55-.07-.53-.13-.53-.15-.54-.19-.5-.21-.5-.27-.47-.28-.43-.32-.32.1-.56.14-.59.08-.58.05h-1.15l-.58-.08-.57-.12-.57-.15-.55-.18-.53-.23-.52-.27h-.05l-.58-.07-1.17-.18-1.2-.22-.71-.18-.72-.19-.75-.25-.8-.3-.87-.38-.6-.32-.33-.18-.32-.22-.28-.18-.38-.28-.39-.3-.23-.2-.3-.25-.28-.29-.27-.28-.18-.22-.34-.4-.3-.41-.08-.12-.2-.32-.2-.31-.07-.12-.21-.42-.2-.43-.09-.2-.2-.52-.16-.53-.05-.2-.1-.4-.07-.4-.07-.42v-2.45l.07-.41v-.19l.09-.38.1-.38.11-.39.07-.16.18-.5.22-.49.08-.18.22-.42.25-.4.1-.16.23-.35.25-.34.35-.43.6-.63.57-.54.63-.51.2-.14v-.27l.05-.43.08-.43.1-.44.07-.3.13-.45.17-.43.25-.65.45-.93.48-.82.48-.75.52-.68.42-.49v-.26l.06-1.14.14-1.11.18-1.1.23-1.07.27-1.05.32-1 .36-1 .39-1 .43-1 .47-1 .5-.91.51-.92.55-.9.59-.87.6-.86.61-.84.65-.81.69-.8.68-.79.72-.76.73-.74.75-.73.77-.7.78-.68.82-.67.81-.63.85-.62.85-.6.87-.57.88-.55.92-.51.92-.5.93-.47.95-.43 1-.4 1-.39 1-.33 1-.3 1-.27 1.05-.23 1.07-.18 1.07-.14 1.1-.08h2.4l.41.07.44.08.25.07.5.11.48.17.48.18.22.1.52.24.5.28.46.32.19.11.36.27.34.28.33.3.32.32.15.17.35.41.33.44.3.45.12.2.23.41.22.44.2.45.08.21.13.39.14.36.1.39.05.25.1.5.06.48v1.67l-.05.9v.11h.19l.88.07.92.11.95.17 1 .27.68.23.4.15.39.17.35.16.46.24.45.26.3.2.47.32.43.33.27.22.3.27.28.28.27.28.22.25.25.29.23.31.23.32.19.27.3.5.26.51.15.3.22.49.18.5.1.31.15.47.12.48.07.35.08.44.05.45v1.86l-.08 1.05-.1.69.2-.09 1.07-.41 1.06-.4 1.1-.37 1.14-.35 1.13-.33 1.15-.29 1.18-.26 1.2-.24 1.22-.18 1.25-.17 1.25-.11 1.27-.07h2.6zm-.2 17.3-.45.6-.48.59-.5.53-.35.33 1.75-.11 1.83-.17v-1.57l-.05-.23-.05-.2-.05-.15h-.08l-.79-.11-.33-.05z" fill="#808080"/><path d="m105.75 43.78.9.19 1 .31.92.42.85.53.8.64.7.71v.07l.55.7.46.75.39.8v.13l.2.54.16.55.12.46.1.55.13 1.09v1.08l-.03 1.08-.3 1-.43 1v.1l-.13 1.27-.19 1.92-.3 3.3-.25 2.03-.17 1.9-.16 1.91-.14 1.94-.13 1.91-.12 1.94-.1 2-.08 1.93-.15 3.9-.1 3.88-.07 3.9v9.36l-.05 2.78-.09 2.77-.1 2.76-.11 2.77-.14 2.75-.15 2.77-.33 5.46-.37 5.47-.4 5.43-.44 5.47-.4 5.42-.4 5.38-.35 5.37-.33 5.35-.13 2.65-.14 2.66-.11 2.67-.1 2.65-.07 2.65-.07 2.63v82.92l-.06 15.6v7.8l-.07 7.8-.08 7.82-.1 7.8-.12 7.81-.15 7.8-.17 7.82-.18 7.8-.22 7.8-.25 7.82-.28 7.8-.3 7.8-.35 7.78-.37 7.8-.41 7.78-.45 7.79-.5 7.76-.54 7.77-.58 7.77-.62 7.73-.15 1.07-.3 1.05-.43 1-.57.93-.66.87-.79.75-.88.65-1 .53-1 .4-1.07.27-1.08.13h-1.08l-1.09-.23-1-.29-1-.43-.93-.57-.85-.66-.77-.79-.65-.88-.53-1-.4-1-.27-1.05-.13-1.08v-1.08l.61-7.69.59-7.66.51-7.69.49-7.68.45-7.7.41-7.7.37-7.72.35-7.71.3-7.74.27-7.73.25-7.73.21-7.75.19-7.75.16-7.77.15-7.75.12-7.77.1-7.76.08-7.77.07-7.77.05-7.78.07-15.55v-83.12l.06-2.78.09-2.77.1-2.77.11-2.75.14-2.76.15-2.75.33-5.47.37-5.47.38-5.45.42-5.41.4-5.4.38-5.39.37-5.36.33-5.37.13-2.65.14-2.67.11-2.65.09-2.65.08-2.65.07-2.65v-13.35l.1-4.08.17-4.07.08-2.07.12-2.05.12-2 .13-2 .15-2 .17-2 .18-2 .18-2 .3-3.28.2-2.05.22-2 .12-1 .13-1 .18-1 .15-.69.22-.73v-.15l.37-1 .06-.1.39-.73.45-.69.53-.63.05-.07.8-.76.9-.67 1-.53 1-.39.88-.22.9-.12h.92zm-9.12 10.47.1.35-.1-.37z"/><path d="m619.78 0 1.3.1 1.29.14 1.25.16 1.21.22 1.17.26 1.16.25 1.14.29 1.11.3 1.07.3 1.08.31 2 .64 2 .65 1.88.6 1.83.58.87.25.87.23.85.24.83.2.82.18.81.17.8.13.82.12 2.63.3 2.7.3 2.7.25 2.72.23 2.73.2 2.75.2 2.75.15 2.79.15 2.78.12 2.8.11 2.8.1 2.82.09 5.68.13 5.7.12 11.48.2 5.79.13 5.78.17 2.9.1 2.92.11 2.9.14 2.91.15 2.9.16 2.92.2 2.92.22 2.91.25 1.37.15 1.37.15 1.33.17 1.32.16 1.3.2 1.26.22 1.27.23 1.23.25 1.2.25 1.2.29 1.17.3 1.15.3 1.13.33 1.1.33 1.1.37 1.07.38 1 .39 1 .41 1 .44 1 .43 1 .47 1 .48.94.5.91.52.9.53.87.55.87.57.83.58.82.6.8.62.78.63.75.65.73.67.72.66.7.7.67.72.65.72.63.73.6.75.58.77.57.76.55.79.52.8.5.8.48.81.45.84.43.83.42.83.4.85.38.85.37.87.33.87.34.86.3.89.3.88.26.88.27.89.23.9.24.9.21 1 .39 1.78.31 1.85.29 1.85.23 1.87.2 1.88.15 1.9.12 1.92.08 1.91.05 1.94v6l-.05 2-.07 2-.08 2-.08 2-.24 4.05-.26 4.12-.23 4.06-.3 4.12-.25 4.2-.24 4.23-.1 2.1-.08 2.12-.07 2.11v26.73l.05 6.84.06 6.81.1 6.85.1 6.85.12 6.85.13 6.85.15 6.87.19 6.87.18 6.86.2 6.89.22 6.86.23 6.89.27 6.86.26 6.87.3 6.88.3 6.87.34 6.87.33 6.85.37 6.85.38 6.85.4 6.85.42 6.83.43 6.83.47 6.82.46 6.8.5 6.8.52 6.78.53 6.77.55 6.77.82 9.8.78 9.73.39 4.87.35 4.85.35 4.85.31 4.86.3 4.89.25 4.88.24 4.92.2 4.93.16 5 .12 5 .07 5.05v6.35l.1 1.65.13 1.88.15 2.08.17 2.24.16 2.36.12 2.44.05 1.28v3.87l-.05 1.31-.08 1.32-.12 1.33-.15 1.34-.2 1.33-.27 1.35-.3 1.28-.21.74-.2.66-.24.69-.25.68-.26.67-.3.68-.34.68-.36.67-.4.67-.42.66-.47.65-.5.65-.53.62-.58.6-.54.53-.56.49-.59.45-.6.43-.63.38-.65.37-.65.32-.67.3-.66.25-.67.21-.68.17-.65.15-.67.12-.73.08-1.17.08h-1.2l-1.15-.09-1.08-.15-1.05-.18-1-.23-.95-.25-.9-.29-.86-.28-.84-.32-.81-.3-1.49-.6-1.38-.58-1.27-.52-1.15-.45-.46-.16-.45-.15-.39-.12-.26-.07-.27-.05-.25-.05-1.28-.17-1.42-.17-1.45-.16-1.48-.14-1.54-.11-1.55-.12-1.58-.08-1.62-.09-1.63-.05h-8.4l-1.7.05-1.7.06-1.7.1-1.68.1-1.69.12-1.66.15-1.65.17-1.64.18-1.6.2-1.58.22-1.55.23-1.52.27-1.46.26-1.45.29-1.39.31-1.35.32-1.28.35-1.25.35-2 .62-2 .66-2 .69-2 .73-2 .77-2 .78-2 .82-2 .83-2.05.85-2 .87-4.13 1.78-4.17 1.82-4.2 1.81-2.11.92-2.15.9-2.15.88-2.17.89-2.18.85-2.2.85-2.24.81-2.23.79-2.27.75-2.28.71-2.3.69-2.33.65-2.34.58-1.2.3-1.2.27-1.2.25-1.2.23-1.21.23-1.22.2-1.93.32-2 .28-1.92.25-1.93.22-1.92.2-1.9.17-1.9.13-1.9.13-1.88.09-1.89.08-1.86.05h-9.25l-1.84-.07-1.81-.08-1.82-.08-1.83-.12-3.59-.25-3.58-.3-3.55-.33-3.55-.35-3.52-.4-3.5-.4-7-.84-6.9-.83-3.43-.4-3.42-.37-3.41-.35-3.4-.31-3.42-.27-1.68-.12-1.7-.11-1.7-.1-1.7-.09-1.7-.06-1.69-.05h-10.2l-1.73.04-1.73.08-25.8 1.55-25.8 1.52-12.9.75-12.9.71-12.92.69-12.9.65-6.46.3-6.47.3-6.47.28-6.46.25-6.47.25-6.47.23-6.48.22-6.48.2-6.49.18-6.48.15-6.5.14-6.5.11-6.5.09-6.52.06h-21.2l-2.73-.05-5.43-.14-5.42-.18-5.42-.22-5.38-.25-5.4-.28-5.37-.3-10.71-.62-10.69-.67-5.32-.3-5.31-.28-5.29-.25-5.28-.24-5.27-.2-5.26-.15-2.62-.06h-15.67l-2.6.05-2.6.07-2.58.08-2.6.08-2.58.14-2.57.06-2.58.15-2.58.18-2.57.2-2.58.24-2.57.25-2.57.28-2.55.3-2.56.32-2.55.36-2.57.37-2.55.42-2.55.43-2.53.47-2.55.5-2.6.53-1.9.4-2.84.55-3.63.68-4.27.77-4.78.83-2.57.42-2.63.43-2.7.42-2.75.42-2.78.4-2.8.38-2.8.37-2.8.33-2.75.32-2.74.26-2.66.24-2.59.2-2.51.15-2.4.08h-5.67l-1.07-.07-1-.08-1-.13-1-.15-1-.2-1-.25-1.07-.32-1.23-.45-1.07-.52-.7-.42-.61-.43-.64-.5-.38-.33-.6-.62-.22-.25-.6-.77-.18-.26-.45-.72-.17-.3-.33-.68-.28-.64-.32-.95-.25-.9-.18-.86-.14-.85-.08-.8-.07-.82v-2.33l.05-.82.11-1.52.17-1.56.22-1.57.26-1.6.3-1.62.34-1.63.35-1.65.36-1.65.39-1.65.8-3.27.81-3.21.77-3.07.7-2.88.32-1.32.26-1.25.25-1.13.19-1 .15-.88.1-.73.06-.59v-.45l.15-1.44.42-1.4.63-1.3.85-1.18 1-1 1.22-.82 1.32-.58 1.41-.35 1.45-.1 1.44.17 1.4.4 1.3.63 1.18.85 1 1.05.82 1.22.58 1.31.35 1.42.1 1.45v1.25l-.12 1.27-.18 1.31-.22 1.34-.26 1.36-.29 1.4-.31 1.44-.35 1.48-.74 3-.8 3.11-.78 3.15-.77 3.14-.35 1.51-.35 1.5-.3 1.45-.28 1.4-.25 1.34-.2 1.23-.17 1.17-.08.76h4.03l2.09-.08 2.2-.14 2.35-.16 2.43-.22 2.53-.27 2.6-.28 2.65-.33 2.69-.34 2.68-.38 2.68-.38 2.65-.4 2.62-.4 2.55-.42 2.47-.4 4.67-.74 4.15-.73 3.48-.67 2.7-.53 1.82-.37 2.67-.55 2.73-.53 2.73-.5 2.74-.48 2.73-.44 2.73-.4 2.74-.38 2.73-.35 2.73-.32 2.72-.3 2.73-.26 2.72-.24 2.73-.21 2.72-.19 2.72-.18 2.71-.13 2.72-.14 2.72-.1 2.71-.08 2.72-.07h16.23l2.7.05 2.72.05 5.38.16 5.39.2 5.38.24 5.37.25 5.36.3 5.37.3 10.7.61 10.67.64 5.31.28 5.32.28 5.32.25 5.3.22 5.3.17 5.3.13 2.63.05h20.8l6.45-.07 6.45-.08 6.43-.12 6.44-.13 6.45-.15 6.43-.19 6.42-.18 6.43-.22 6.43-.23 6.44-.25 6.41-.27 6.44-.26 6.43-.3 6.42-.3 12.86-.65 12.85-.69 12.87-.71 12.87-.74 25.8-1.53 25.85-1.53 1.88-.1 1.9-.09 1.88-.05h7.49l1.86.05h1.84l1.85.06 1.81.1 1.84.1 1.81.12 1.82.13 3.6.29 3.57.33 3.56.35 3.54.4 3.5.4 7 .83 6.9.84 3.44.4 3.4.36 3.41.35 3.39.32 3.38.28 3.4.24 1.67.1 1.68.08 1.68.08 1.69.05h10.08l1.68-.06 1.69-.09 1.68-.1 1.68-.13 1.7-.15 1.69-.17 1.7-.2 1.7-.21 1.7-.25 1.7-.27 1-.17 1-.2 1-.2 1-.2 1-.23 1-.23 2-.52 2-.55 2-.6 2-.63 2-.67 2-.72 2-.73 2-.77 2-.8 2-.81 2-.85 2.05-.87 2-.87 4.15-1.8 4.17-1.81 4.2-1.82 2.13-.9 2.15-.9 2.15-.88 2.17-.87 2.18-.85 2.22-.83 2.21-.8 2.25-.79 2.25-.73 2.3-.72 1.59-.45 1.63-.43 1.67-.4 1.7-.38 1.71-.35 1.75-.32 1.77-.3 1.8-.28 1.8-.25 1.83-.22 1.85-.22 1.85-.18 1.87-.15 1.87-.15 1.88-.12 1.88-.1 1.89-.06 1.86-.07h9.3l1.82.06 1.8.09 1.77.1 1.76.11 1.74.15 1.7.15 1.66.19 1.65.2 1.69.21 1 .17 1 .22.93.25.89.26.86.29.85.31 1.5.59 1.44.58 1.33.55 1.25.52.53.2.52.18.48.17.44.13.38.1h.1v-.11l.07-.2.08-.24.07-.23.06-.23.15-.64.14-.66.11-.75.09-.79.08-.86v-5.84l-.1-2.15-.15-2.17.12-2.08-.16-2.12-.14-2.06-.11-2v-6.9l-.07-4.89-.11-4.85-.15-4.83-.2-4.82-.22-4.78-.27-4.78-.28-4.79-.32-4.78-.33-4.78-.35-4.8-.38-4.8-.79-9.69-.81-9.8-.55-6.8-.54-6.81-.51-6.84-.5-6.85-.49-6.85-.45-6.86-.45-6.87-.41-6.88-.4-6.9-.39-6.89-.36-6.9-.35-6.91-.34-6.9-.3-6.92-.3-6.92-.26-6.91-.27-6.92-.23-6.92-.24-6.9-.2-6.91-.18-6.92-.17-6.9-.16-6.92-.14-6.9-.11-6.88-.1-6.88-.09-6.89-.08-6.86v-29.69l.05-2.26v-2.27l.07-2.23.08-2.24.1-2.21.25-4.37.25-4.3.29-4.2.26-4.13.27-4 .22-3.93.08-1.9.08-1.89.07-1.85v-8.78l-.08-1.64-.09-1.6-.13-1.55-.15-1.51-.36-1.47-.22-1.43-.25-1.39-.28-1.35-.15-.61-.17-.64-.17-.61-.16-.62-.19-.6-.2-.58-.2-.59-.2-.55-.21-.55-.24-.55-.23-.51-.25-.52-.25-.5-.25-.5-.27-.48-.28-.47-.28-.47-.3-.45-.3-.45-.32-.43-.33-.42-.3-.43-.35-.4-.36-.4-.39-.4-.38-.38-.4-.39-.42-.38-.43-.37-.45-.36-.45-.35-.48-.37-.5-.35-.52-.33-.55-.34-.55-.33-.57-.32-.6-.31-.6-.32-.63-.3-.67-.3-.68-.3-.72-.28-.73-.27-.77-.27-.78-.26-.82-.25-.83-.25-.87-.24-.9-.21-.92-.22-1-.2-1-.2-1-.18-1-.17-1-.17-1.1-.15-1.1-.13-1.15-.13-1.18-.12-2.78-.2-2.77-.2-2.77-.2-2.78-.17-2.8-.13-2.8-.14-2.82-.16-2.81-.1-5.67-.15-5.7-.14-11.45-.18-5.75-.11-5.76-.15-2.89-.09-2.9-.1-2.88-.1-2.88-.13-2.94-.15-2.89-.17-2.88-.2-2.86-.23-2.89-.25-2.88-.27-2.88-.32-2.9-.35-1.25-.16-1.24-.22-1.21-.23-1.19-.2-1.16-.28-1.14-.3-1.1-.3-1.08-.34-2.05-.63-2-.63-1.89-.62-1.81-.57-.85-.25-.85-.25-.84-.21-.8-.2-.78-.17-.78-.17-.75-.11-.74-.1-.71-.09-.72-.05h-2.07l-.7.05-.68.1-.73.12-1 .23-1.05.25-1 .3-1.07.33-1.06.37-1.09.4-1.08.43-1.08.45-1.1.5-1.12.52-1.12.53-1.11.57-1.14.58-1.11.6-2.32 1.29-2.33 1.31-2.4 1.34-2.39 1.4-2.41 1.4-2.45 1.38-1.25.7-1.25.69-1.29.66-1.28.65-1.28.64-1.3.61-2 .89-1.95.86-2 .85-2 .84-2 .83-2.05.82-2.09.8-2.08.78-2.12.78-2.13.75-2.15.75-2.17.74-2.18.71-2.22.72-2.21.68-2.24.69-2.25.66-2.26.65-2.29.64-2.28.61-2.3.62-2.32.58-2.31.59-2.34.55-2.33.55-2.35.53-2.37.5-2.35.5-2.38.48-2.37.47-2.33.45-2.37.43-2.38.42-2.4.4-2.38.38-2.39.35-2.38.35-2.38.34-2.39.31-2.38.29-2.38.28-2.37.25-2.36.23-2.37.24-2.35.2-2.35.18-2.35.15-2.33.15-2.34.12-2.31.11-2.3.09h-13.59l-2.21-.06-2.2-.09-2.19-.11-2.18-.01-2.15-.17-2.12-.16-2.1-.2-3.68-.47-3.65-.4-3.64-.4-3.61-.43-7.17-.88-7.12-.89-7.06-.86-3.52-.42-3.5-.42-3.5-.38-3.48-.38-3.47-.35-3.47-.32-3.45-.3-3.45-.27-3.43-.2-3.45-.18-3.43-.17-3.45-.1-3.45-.07h-8.57l-1.73.05-1.72.07-1.71.1-1.74.08-1.71.12-1.74.13-1.71.15-1.74.17-1.73.16-1.73.2-1.74.22-1.73.23-1.75.25-1.7.27-1.7.28-3.45.59-3.45.63-3.47.72-3.48.71-3.47.74-3.5.76-3.5.79-7.07 1.63-7.08 1.63-3.57.84-3.58.8-3.6.8-3.6.78-3.63.75-3.64.73-3.65.69-3.66.65-3.67.6-1.85.28-1.85.28-1.87.25-1.85.25-1.86.22-1.87.22-1.87.18-1.88.18-1.87.15-1.88.15-1.9.12-1.88.08-1.9.09h-9.54l-1.91-.05-1.94-.1-1.91-.12-1.94-.08-1.63-.15-1.63-.18-1.64-.2-1.6-.23-1.63-.24-1.6-.29-1.6-.3-1.59-.31-1.58-.34-1.57-.36-1.54-.4-1.52-.4-1.55-.4-1.55-.42-1.53-.43-1.55-.45-3-.92-3-1-3-1-3-1-2.95-1-2.92-1-5.8-2-2.85-1-2.83-1-2.82-.92-2.78-.87-2.87-.69-1.37-.38-1.37-.39-1.35-.36-1.33-.37-1.35-.32-1.35-.32-1.33-.3-1.32-.26-1.31-.25-1.32-.24-1.32-.21-1.28-.2-1.3-.17-1.28-.13-1.29-.12-1.26-.1-1.27-.07h-5l-1.32.07h-1.46l-1.42-.38-1.35-.55-1.22-.77-1.08-1-.9-1.14-.67-1.28-.45-1.38-.2-1.45v-1.45l.3-1.42.55-1.35.82-1.21 1-1.07 1.14-.9 1.28-.68 1.38-.44 1.45-.2 1.52-.08h4.82l1.6.06 1.6.09 1.58.11 1.58.15 1.57.19 1.57.2 1.56.23 1.55.25 1.57.27 1.53.3 1.55.31 1.54.35 1.53.35 1.52.37 1.51.4 1.52.4 1.52.42 1.51.43 3 .88 3 .94 3 1 2.95 1 2.93 1 5.82 2 2.9 1 2.88 1 2.87 1 2.85.94 2.83.9 2.85.85 1.38.4 1.4.4 1.4.38 1.4.37 1.4.33 1.39.33 1.38.32 1.38.3 1.29.15 1.37.25 1.36.24 1.37.21 1.37.2 1.35.17 1.35.15 1.35.12 1.7.13 1.68.1 1.7.08 1.7.07h6.8l1.7-.05 1.7-.07 1.7-.1 1.72-.1 1.7-.13 1.71-.14 1.72-.16 1.72-.19 1.71-.18 1.72-.22 1.72-.21 1.73-.24 1.72-.25 1.71-.26 3.49-.59 3.46-.61 3.47-.65 3.5-.7 3.48-.72 3.5-.77 3.52-.76 3.52-.8 3.53-.82 7.1-1.65 7.1-1.63 3.58-.8 3.6-.79 3.59-.76 3.61-.74 3.62-.71 3.63-.67 3.64-.62 1.83-.3 1.83-.28 1.92-.27 1.9-.26 1.9-.24 1.9-.21 1.88-.19 1.9-.18 1.89-.17 1.86-.13 1.89-.13 1.86-.1 1.87-.1 1.87-.07h11.07l3.65.06 3.66.12 3.64.17 3.63.2 3.62.23 3.61.28 3.6.32 3.59.33 3.61.29 3.58.39 3.57.41 3.57.42 3.55.42 7.11.88 7.1.88 7.12.87 3.55.42 3.57.41 3.56.39 3.55.36 1.94.19 1.93.15 1.95.15 2 .11 2 .1 2 .07 2.05.07h10.55l2.15-.07 2.17-.08 2.17-.09 2.2-.11 2.2-.15 2.21-.15 2.22-.17 2.23-.18 2.24-.22 2.25-.22 2.25-.25 2.25-.26 2.26-.27 2.27-.3 2.27-.32 2.26-.33 2.27-.33 2.27-.37 2.26-.38 2.27-.4 2.27-.4 2.26-.44 2.27-.45 2.25-.45 2.25-.46 2.23-.5 2.24-.5 2.23-.52 2.22-.53 2.2-.55 2.2-.55 2.18-.59 2.17-.58 2.16-.6 2.15-.62 2.12-.63 2.12-.63 2.1-.67 2.08-.67 2-.66 2.05-.7 2-.7 2-.72 2-.72 1.95-.73 1.93-.75 1.9-.77 1.89-.76 1.85-.77 1.83-.78 1.8-.8 1.75-.8 1.07-.52 1.06-.52 1.09-.55 1.1-.58 1.1-.6 1.11-.6 2.29-1.3 2.36-1.37 2.37-1.4 2.43-1.4 2.45-1.42 2.54-1.4 1.3-.7 1.34-.68 1.34-.67 1.33-.65 1.37-.63 1.38-.62 1.4-.58 1.41-.57 1.45-.53 1.47-.5 1.5-.47 1.52-.43 1.57-.35 1.58-.38 1.4-.25 1.42-.19 1.4-.11 1.38-.07h1.35z"/><path d="m201.17 342.78h1.11l.35.07.27.06.28.07.27.08.28.09.35.13.22.1.22.1.21.1.22.12.22.1.28.18.2.12.2.15.2.13.2.15.18.15.25.22.2.18.2.18.19.19.16.2.24.28.15.17.13.2.15.18.12.18.18.3.13.22.12.22.12.23.16.33.1.22.09.22.08.21.07.24.08.21.07.27.06.23.07.24v.23l.05.25v3.48l-.05.29-.07.28-.07.27-.08.28-.08.27-.1.26-.12.27-.1.27-.13.25-.14.25-.15.25-.15.23-.15.23-.16.24-.17.23-.18.22-.2.21-.2.2-.2.2-.2.19-.22.2-.23.16-.22.17-.23.17-.25.15-.24.15-.25.13-.26.13-.25.12-.27.12-.27.1-.26.08-.27.08-.28.09-.27.06-.28.05h-.29l-.2.27-.78 1.08-.8 1.17-.82 1.23-.83 1.3-.83 1.32-.82 1.35-.78 1.32-.74 1.3-.7 1.25-.63 1.18-.37.7v2.43l-.07.29-.06.26-.07.29-.08.26-.1.27-.1.27-.12.26-.12.25-.13.27-.13.23-.15.25-.15.24-.17.23-.17.23-.18.22-.18.22-.2.21-.2.2-.2.2-.47.42-.45.35-.18.17-.22.15-.2.13-.22.15-.2.12-.2.13-.21.12-.22.11-.22.1-.16.09-.25.11-.25.1-.25.1-.27.1-.27.07-.26.08-.18.24-.27.05h-.13l-.28.05h-2.55l-.27-.05-.25-.05-.25-.07-.27-.06-.25-.07-.23-.08-.25-.1-.25-.1-.23-.1-.24-.12-.25-.14-.25-.13-.23-.15-.23-.17-.24-.15-.23-.18-.22-.18-.21-.19-.2-.2-.18-.18-.18-.2-.19-.2-.16-.22-.15-.2-.17-.22-.13-.23-.15-.22-.14-.23v-.05l-.14-.25-.13-.25-.1-.25-.12-.25-.1-.27-.08-.26-.08-.25-.07-.29-.07-.26v-.14l-.05-.26v-2.66l.05-.27.08-.58.2-.84.24-.75.43-1.16.5-1.2.58-1.24.64-1.28.7-1.33.75-1.4.8-1.45.85-1.49.9-1.5.91-1.51.94-1.5 1-1.5 1-1.45 1-1.4 1-1.37 1-1.28 1-1.24.95-1.11.55-.59.53-.55.57-.55.63-.55.73-.56.54-.35.23-.15.23-.14.25-.13.25-.13.2-.12.22-.1.22-.08.21-.1.22-.09.23-.08.25-.08.27-.09.25-.06.27-.07-.2-.05.27-.05h1.87zm16.38 18.75h1.25l.25.05.23.05.25.07.24.06.25.07.23.08.23.1.24.1.23.1.22.1.23.14.22.11.21.14.2.13.22.15.2.15.2.15.18.17.2.16.19.17.16.18.17.19.17.18.16.2.15.2.15.2.15.22.14.2.13.21.12.24.11.21.12.24.1.21.08.24.1.25.09.23.06.23.07.25.05.25.07.24v3.35l-.07.25v.25l-.06.23-.09.25-.08.23-.08.24-.1.23-.1.23-.12.22-.12.23-.13.22-.12.22-.15.2-.13.21-.15.2-.17.2-.15.19-.18.18-.17.18-1.05 1.07-1 1.08-1.12 1.19-1 1.16-2.2 2.52-2.25 2.57-2.26 2.58-1.17 1.3-1.17 1.28-1.2 1.24-1.2 1.21-1.26 1.14-1.15 1-.19.17-.2.15-.18.16-.22.15-.2.14-.21.13-.22.13-.22.12-.21.12-.24.11-.23.1-.23.1-.24.09-.23.08-.25.07-.23.06-.25.07-.25.05-.24.05h-2.51l-.25-.05-.25-.05h-.24l-.25-.05-.25-.08-.23-.07-.23-.08-.24-.1-.23-.08-.23-.12-.24-.1-.21-.12-.22-.13-.22-.13-.21-.14-.2-.15-.2-.15-.2-.15-.2-.16-.19-.17-.18-.17-.17-.18-.18-.18-.17-.19-.15-.2-.16-.2-.15-.2-.14-.2-.13-.21-.13-.22-.12-.22-.12-.23-.11-.22-.1-.23-.1-.23-.09-.24-.08-.23-.07-.25-.06-.23-.07-.25-.05-.25v-3l.05-.25v-.25l.06-.24.07-.25.07-.23.15-.22.1-.23.08-.24.12-.21.1-.24.12-.21.13-.22.13-.22.14-.21.15-.2.15-.2.15-.2.16-.2.17-.19.17-.18.18-.18.18-.17.95-.87.9-.86.95-1 1-1 1-1.1 1-1.16 2.18-2.47 2.23-2.57 2.29-2.6 1.18-1.31 1.18-1.29 1.19-1.28 1.15-1.17.18-.18.18-.17.2-.16.19-.17.2-.15.2-.15.21-.13.22-.14.22-.13.21-.13.22-.12.23-.1.24-.1.23-.1.23-.08.24-.09.23-.08.25-.07h.25l.23-.05.25-.05h1.52zm58.37-103.15h.4l.4.05.38.05.4.08.38.1.39.12.36.13.37.15.37.17.35.18.33.2.33.22.32.23.32.25.3.27.28.27.27.3.25.3.25.31.23.32.2.33.2.35.18.35.15.37.15.37.1.33.32.12 2.73 1 1.5.57.8.33.82.33.82.37.83.42.85.45.88.51.89.6.76.59 1.07.86.92.75 2 1.54 2 1.53 2.09 1.53 2.11 1.55 2.17 1.57 4.4 3.18 2.22 1.62 2.21 1.67 2.22 1.68 2.17 1.72 1.1.88 1.08.9 1.07.9 1.05.92 1.05.93 1 .95 1 1 .95.91.28.29.25.3.25.31.24.32.21.33.2.34.19.35.16.36.17.37.12.37.11.38.1.38.09.4.06.39v1.98l-.07.38-.06.4-.09.39-.11.38-.12.37-.15.38-.17.35-.16.37-.2.33-.22.33-.22.34-.25.31-.25.3-.28.29-.28.28-.3.27-.3.23-.32.23-.33.22-.35.22-.35.18-.35.17-.37.15-.38.13-.41.07-.38.08-.38.08-.4.07h-2.37l-.38-.09-.39-.08-.38-.12-.38-.11-.37-.15-.37-.15-.35-.19-.35-.2-.33-.21-.32-.22-.31-.25-.3-.25-.3-.27-.84-.83-.81-.78-.85-.77-.87-.78-.9-.77-.9-.78-.95-.77-.93-.77-2-1.56-2-1.55-2.07-1.58-2.14-1.55-4.35-3.15-2.2-1.6-2.2-1.6-2.2-1.64-2.18-1.66-2.15-1.69-1.08-.88-.92-.75-.1-.07h-.05l-.15-.1-.27-.13-.35-.17-.4-.18-.48-.22-.52-.2-1.23-.47-1.32-.48-1.43-.52-1.43-.53-.79-.32-.78-.33-.78-.37-.82-.4-.85-.46-.88-.57-.64-.45-.28-.23-.3-.25-.58-.52-.59-.6-.5-.6-.5-.68-.26-.45-.2-.35-.19-.35-.06-.17-.12-.25-.1-.23-.1-.27-.07-.15-.1-.3-.08-.3-.08-.3v-.17l-.06-.3-.07-.3v-3.04l.05-.3.06-.3v-.18l.06-.28.09-.3.08-.29.07-.18.13-.37.15-.35.08-.2.15-.33.19-.33.25-.47.46-.72.34-.43.25-.3.26-.3.29-.28.28-.29.3-.25.32-.25.33-.21.33-.22.34-.2.36-.17.35-.16.39-.15.36-.12.39-.12.38-.08.4-.07.38-.05h.8z"/><path d="m315.58 245.38h.82l.4.07.4.08.4.1.38.12.39.13.38.17.37.18.35.18.35.22.35.23.31.25.32.25.3.29.28.28.29.32.25.31.25.32.21.35.22.35.18.37.19.36.15.39.05.15.1.28.1.28.08.29v.16l.07.27.05.28v.45l.05.37v2.27l-.05.38-.07.38-.08.42v.28l-.09.29-.08.28-.23.77-.42 1-.45.93-.48.89-.5.83-.54.82-.55.8-.58.78-.6.8-.65.82-1.25 1.68-1.43 1.65-1.57 1.7-1.6 1.74-1.65 1.78-3.46 3.63-3.57 3.77-1.72 1.88-1.75 1.9-1.74 1.9-1.68 1.88-1.6 1.85-1.55 1.84-.7.88-.7.88-.68.87-.64.83-.6.84-.56.8-.54.78-.48.75-.45.72-.4.68-.35.65-.32.6-.26.55-.21.5-.15.43-.12.37-.07.27-.05.26v.97l-.07.42-.07.4-.1.4-.11.38-.15.38-.15.39-.17.36-.2.37-.2.35-.23.35-.24.32-.26.31-.27.32-.3.28-.3.29-.32.25-.31.25-.35.23-.35.2-.35.2-.37.17-.38.16-.39.14-.4.13-.38.1-.4.07-.42.06-.4.05h-1.63l-.4-.07-.4-.08-.4-.08-.4-.12-.38-.15-.39-.15-.36-.17-.35-.2-.37-.2-.33-.23-.34-.25-.31-.25-.3-.27-.3-.3-.27-.3-.27-.31-.23-.32-.23-.35-.22-.35-.18-.35-.19-.37-.16-.38-.14-.38-.11-.4-.1-.39-.09-.4-.06-.41v-2.42l.06-.67.1-.71.24-1.2.3-1.22.38-1.18.42-1.15.48-1.12.52-1.1.55-1.08.58-1.09.62-1.05.65-1.05.68-1.05.72-1.05.73-1 .75-1 .78-1.05.8-1 .82-1 .85-1 1.72-2.05 1.76-2 1.82-2 1.83-2 1.85-2 1.85-2 3.6-3.8 3.4-3.6 1.59-1.69 1.48-1.61 1.37-1.5 1.21-1.42 1.07-1.3.45-.55.42-.53.35-.49.3-.43.13-.2v-.72l.07-.4.08-.4.1-.4.12-.38.15-.38.15-.39.18-.36.2-.37.2-.35.23-.33.25-.34.27-.3.27-.3.3-.3.3-.26.31-.27.34-.23.33-.24.35-.2.37-.18.36-.18.39-.15.38-.14.4-.11.4-.1.4-.09h1.22zm-8.16 11 .1.29-.12-.37zm-20.55-118.71h1l.31.05.34.07.31.08.32.08.32.1.31.12.3.13.3.14.3.16.29.15.28.19.27.18.26.2.27.2.25.22.23.23.24.23.23.25.2.25.2.27.2.27.18.28.17.28.15.29.15.3.13.3.14.31.1.32.1.32.08.31.07.32.06.33.05.34v2.43l-.1.52-.22 1.11-.27 1.42-.26 1.52-.22 1.28v3.25l-.05.15-.05.17-.05.15-.05.16-.07.15-.05.15-.06.15-.07.15-.07.15-.39.15-.07.15-.08.15-.08.14-.09.15-.1.13-.08.15-.1.13-.08.14-.1.13-.1.13-.12.14-.1.11-.12.14-.1.11-.11.12-.12.12-.07.06-.11.12-.12.12-.12.1-.13.11-.12.1-.13.1-.13.1-.12.1-.13.09-.14.1-.15.08-.13.08-.13.09-.15.08-.14.08-.15.07-.15.08-.15.07-.15.07-.15.06-.15.07-.15.05-.15.07-.15.05h-.32l-.15.05h-4.33l-.17-.05h-.17l-.15-.06-.15-.05h-.16l-.15-.07-.15-.07-.15-.06-.15-.07-.15-.07-.15-.08-.15-.08-.14-.09-.15-.08-.13-.08-.15-.09-.13-.1-.14-.1-.13-.08-.13-.12-.12-.1-.13-.1-.14-.11-.11-.1-.12-.12-.12-.12-.11-.11-.12-.12-.12-.13-.1-.12-.11-.13-.1-.13-.1-.13-.1-.12-.08-.13-.1-.14-.08-.13-.09-.15-.08-.13-.08-.14-.09-.15-.06-.13-.09-.15-.06-.15-.07-.15-.07-.15-.05-.15-.06-.15-.05-.15-.05-.15v-.15l-.05-.15-.05-.17v-2.88l.06-.92.1-.88.14-.88.26-1.7.32-1.72.28-1.48.2-1-.06.31v.22-1.85l.05-.17v-.15l.07-.17v-.15l.05-.15.07-.16.06-.15.07-.15.08-.15.07-.15.08-.14.09-.15.08-.15.08-.13.09-.15.1-.13.08-.14.1-.13.1-.13.1-.14.12-.11.1-.14.11-.11.1-.14.12-.11.12-.12.11-.12.14-.11.11-.1.14-.12.11-.1.14-.1.13-.1.13-.1.14-.1.15-.08.13-.09.15-.1.13-.08.15-.07.15-.08.14-.08.15-.07.15-.07.16-.06.15-.07.15-.05.15-.07h.17l.15-.05.17-.05h2.45zm17.26-13h1.22l.3.06h.3l.28.09.3.08.29.1.28.1.28.12.29.13.26.13.27.15.27.17.25.17.25.16.23.19.25.2.22.2.23.2.2.23.22.22.18.23.2.23.17.25.16.25.17.27.15.27.15.26.12.27.13.28v.12l.19.2.2.23.18.25.17.25.16.25.17.27.13.27.15.26.12.27.12.28.11.29.09.3.08.28.08.3.07.3.05.3v4.2l-.05.08v.29l-.21.5-.25.46-.05.09v.08l-.05.08-.05.07-.05.08-.05.09v.08l-.05.07-.05.08-.05.08-.05.07-.08.12-.05.08-.07.07-.66.23-.06.08-.07.09v.06l-.07.09-.06.06-.07.09-.07.06-.06.09-.07.06-.07.07-.06.08-.09.07-.06.07-.07.06-.07.07-.06.07-.09.06-.06.07-.09.07-.06.06-.09.07-.06.05-.09.07-.08.06h-.07l-.08.07h-.08l-.09.07-.05.18-.07.05h-.08l-.08.05-.09.06h-.08l-.08.05h-.09l-.08.05h-.1l-.08.05-.09.05h-.18l-.1.05h-6.95l-.09-.05h-.1l-.08-.05h-.25l-.08-.05-.1-.05h-.17l-.08-.05-.1-.05h-.09l-.08-.05-.08-.06h-.09l-.08-.05-.08-.07-.09-.05-.06-.07-.09-.05-.08-.06h-.08l-.07-.07-.08-.07h-.07l-.08-.06-.07-.07-.08-.07-.07-.06-.07-.07-.08-.07-.07-.06-.06-.07-.07-.07-.07-.06-.06-.09-.07-.06-.07-.07-.06-.08-.07-.09-.07-.06-.06-.07-.05-.08-.07-.07-.05-.08-.07-.07-.05-.08-.06-.07-.05-.08-.05-.09v-.06l-.07-.09v-.08l-.05-.08-.12-.2-.05-.09-.05-.08-.05-.08v-.09l-.05-.08-.05-.08v-.09l-.05-.08v-.27l-.26-.56-.3-.82-.2-.68-.19-.65-.23-1-.15-.87-.07-.43v-4.24l.05-.1v-.18l.05-.1v-.18l.05-.09v-.08l.05-.1.05-.08v-.1l.05-.09.05-.08.05-.08.06-.09v-.1l.05-.08.05-.08.07-.09.05-.08.07-.08.06-.09.05-.06.07-.09.07-.08.06-.08.07-.07.07-.08.06-.07.07-.08.07-.07.06-.08.07-.07.08-.08.07-.07.07-.07.08-.06.07-.07.08-.07.08-.06.07-.07.08-.07.09-.06.08-.07.07-.05.08-.07h.08l.09-.06h.08l.08-.07h.17l.1-.07h.35l.08-.05h4zm8.2 7.63v.3-.32zm-14.33-.18-.07.15.05-.1v-.07zm36.07-22.42h1.23l.3.05.3.06.3.07.3.08.3.1.28.12h.12l.37.07.3.06.3.09.3.1.28.1.3.11.28.12.27.15.28.13.27.17.25.17.27.16.25.19.23.2.23.2.24.21.21.22.2.23.22.24.18.23.19.25.18.27.15.26.17.27.13.27.13.28.14.28.1.29.11.3.09.3.08.3.07.3v.3l.05.3v5.03l-.05.08v.27l-.05.07v.06l-.05.07v.13l-.05.07-.05.07-.05.06v.07l-.05.07-.05.06v.07l-.05.07-.05.06-.05.07-.05.05-.05.07-.05.06h-.05l-.05.07h-.05v.07l-.07.05-.05.06h-.16l-.07.05h-.05l-.07.07h-.05l-.06.05h-.3l-.05.05h-.92l-.08.05h-11.31l-.07-.05h-.25l-.06-.05h-.32l-.05-.05h-.18l-.07-.05h-.13l-.05-.05-.05-.07h-.12l-.1-.1-.05-.06h-.1l-.05-.07-.05-.07h-.05l-.05-.06-.05-.05v-.07h-.05l-.05-.07-.05-.06-.05-.07v-.07l-.05-.06v-.07l-.31-.47-.05-.06v-.2l-.05-.07v-.07l-.05-.06v-.14l-.05-.06v-7.98l.05-.07v-.13l.05-.07v-.13l.05-.07v-.06l.05-.07v-.07l.05-.06h.05v-.14l.05-.06h.05l.05-.07v-.07h.05l.05-.06.05-.07.05-.07h.05l.05-.06h.05l.07-.07h.05l.05-.07.06-.05h.1l.07-.06h.05l.07-.05h.18l.07-.05h.55l.06-.05h.4l.07-.05h4.13zm6.73 3.53.1.12-.1-.13zm54.28-11.66h.94l.46.06.45.1.47.12.43.15.44.17.43.2.42.21.4.25.38.25.37.29.36.31.34.32.31.35.3.35.29.38.25.4.23.4.22.42.18.43.17.44.13.45.12.45.08.46.07.47v2.75h-12.44v-1.11.36-3.03h.3-1.18 3.64l.5-.05h.85zm-5.66 15.1.2.15h-.1zm10.4-13 .2.18-.22-.23-.3-.22zm36.78 11.73h1.32l.31.06.32.07.33.08.3.1.32.12.3.13.3.14.3.15.28.16.29.17.28.18.27.19.26.21.25.22.24.22.23.23.23.23.22.27.2.25.18.27.19.28.18.28.2.34.15.3.15.28.12.3.1.23.11.32.1.32.1.31.07.32.07.33.06.32v5.4l-.05.07v.13l-.05.08v.07l-.05.07v.06l-.05.07-.05.07v.06l-.06.1v.14l-.05.06-.05.07-.05.05v.07l-.05.06-.05.07-.05.07-.05.06v.05l-.05.07-.05.07-.06.05-.05.06v.07l-.05.05-.07.07-.05.05h-.07l-.05.06-.06.05v.06l-.05.07v.07l-.05.06-.05.07-.05.07-.05.06v.07l-.05.05-.05.07-.07.06-.05.07-.05.05-.05.07-.07.06h-.05v.07l-.06.07h-.05l-.07.06-.05.05-.07.05-.06.07h-.05l-1.61.41h-.07l-.05.05h-.06l-.07.05-.07.06-.06.05h-.07l-.07.05h-.06l-.07.05h-.07l-.06.05h-.07l-.07.05-.06.05h-.14l-.08.05h-.42l-.08.05h-.37l-.08.05h-7l-.07-.05h-.37l-.06-.05h-.09l-.06-.05h-.14l-.08-.05h-.07l-.06-.05h-.07l-.07-.05h-.13l-.07-.05-.06-.05h-.07l-.07-.05h-.06l-.07-.07-.07-.05h-.06l-.07-.05v-.07l-.07-.05-.06-.06h-.05l-.07-.05-.05-.07-.07-.07-.05-.05-.06-.06-.05-.05-.05-.07-.07-.07-.05-.05v-.06l-.05-.07-.23-.14-.05-.07-.07-.05-.05-.07v-.06l-.05-.07-.05-.07v-.08l-.05-.07-.05-.06v-.07l-.05-.07-.05-.06v-.09l-.05-.06v-.07l-.05-.07v-.15l-.05-.06v-6.33l.07-.22v-1.55l.09-.18.05-.07v-.22l.05-.06v-.07l.05-.08v-.2l.05-.07v-.07l.05-.06.05-.07.05-.07v-.06l.05-.07.05-.07.05-.06.05-.06v-.24l.05-.06v-.22l.05-.07v-.06l.05-.09v-.13l.05-.07.05-.06.05-.07v-.13l.05-.07.05-.07.05-.06.05-.07v-.07l.06-.06.05-.07h.05l.05-.07v-.06h.07v-.07l.07-.07.05-.06.06-.05.05-.07h.07l.07-.07h.11l.07-.06h.12l.06-.05h.07l.07-.07h.06l.05-.05h.35l.07-.05h.2l.07-.05h.36l.07-.05h4.61zm-7.53 12.12.23.41v-.51zm14.7-1v.63l.05-.13v-.52zm18.36 20.83h1.42l.28.07.29.07.26.06.29.09.26.1.27.1.27.11.25.12.25.13.25.14.25.15.25.16.23.15.22.19.23.18.22.18.2.2.2.2.2.2.18.22.18.22.19.23.16.23.15.24.15.25.14.25.13.25.13.26.12.25.1.27.1.28.08.27.07.27.08.28.05.28v3.82l-.05.15v.13l-.05.14-.05.13-.05.13-.05.14v.13l-.05.13-.06.14v.21l.05.72.07.73v3.09l-.05.13v.28l-.05.14-.05.13-.05.13v.14l-.05.13-.05.13-.05.14-.06.13-.07.12-.05.13-.07.13-.06.12-.09.13-.06.12-.07.13-.08.12-.09.12-.06.11-.09.12-.1.12-.08.11-.08.12-.09.1-.1.12-.1.1-.08.11-.1.1-.1.1-.1.1-.1.1-.12.1-.1.1-.11.09-.1.1-.12.08-.12.1-.1.08-.11.09-.12.08-.12.08-.13.07-.12.08-.11.07-.14.08-.11.07-.14.07-.11.06-.14.07h-.13l-.13.07h-.14l-.11.05-.14.06h-.41l-.14.05h-4.93l-.13-.05h-.14l-.13-.05h-.13l-.14-.07-.13-.05-.13-.05-.14-.06-.11-.07-.14-.07-.13-.06-.12-.07-.13-.07-.12-.06-.11-.09-.14-.08-.11-.07-.12-.08-.12-.08-.11-.09-.1-.1-.12-.08-.12-.08-.1-.1-.11-.1-.1-.1-.1-.09-.1-.1-.1-.11-.1-.1-.1-.1-.1-.12-.09-.1-.1-.12-.08-.1-.08-.11-.09-.12-.08-.12-.08-.11-.09-.12-.08-.13-.07-.12-.08-.12-.07-.13-.06-.12-.07-.13-.07-.12-.06-.13-.05-.13-.07-.14-.05-.13-.05-.13-.05-.14v-.13l-.05-.13-.05-.14v-.28l-.05-.13v-1.89l-.05-.68-.09-1.05v-3.05l.09-1 .18-1.08.18-.75v-.72l.15-.45.33-.78.27-.49.07-.11.06-.12.07-.13.08-.12.07-.12.08-.11.1-.15.07-.1.08-.1.07-.1.08-.1.07-.1.08-.1.09-.1.08-.1.1-.12.1-.1.08-.1.09-.1.1-.08.08-.1.1-.09.1-.1.1-.08.1-.08.12-.1.1-.1.11-.09.1-.08.12-.1.12-.08.11-.09.12-.06.13-.09.12-.08.12-.07.11-.08.14-.07.13-.06.12-.07.13-.07.13-.05.12-.06h.13l.14-.07h.13l.13-.05h.27l.15-.05h.13l.14-.05h.98-.57 1.15zm5.77 14.27-.1.1-.1.08-.12.1-.1.1.34-.28.1-.12zm6.32 23.13h.96l.32.05.32.06.31.07.3.08.32.1.3.12.3.12.3.13.28.13.29.17.26.15.29.18.25.19.26.2.25.2.24.21.23.22.22.23.21.25.2.25.2.25.12.19.17.21.15.19.2.2.78.73.87.83.21.24.24.23.2.23.2.27.2.25.16.27.19.28.15.27.15.3.13.28.13.3.12.3.1.3.08.32.09.3.06.31.05.32.05.33v3.9l-.05.1v.29l-.05.1v.1l-.05.1-.05.1v.08l-.05.1-.05.1-.05.08-.06.1v.09l-.05.1-.07.08-.05.1-.07.08-.05.09-.06.1-.07.08-.07.08-.06.09-.07.08-.07.08-.06.09-.07.08-.07.08-.08.09-.07.06-.06.09-.09.08-.06.07-.09.08-.08.07-.07.08-.08.07-.08.06-.09.07-.08.07-.08.08-.09.07h-.08l-.08.06-.09.07-.08.07-.1.06h-.08l-.09.07h-.1l-.08.07-.1.05-.08.05h-.1l-.1.05h-.09l-.1.05-.1.05h-.1l-.08.05h-.2l-.1.05h-.2l-.1.05h-5.98l-.1-.05h-.1l-.1-.05h-.19l-.1-.05-.1-.05h-.1l-.08-.05h-.1l-.1-.05-.08-.05-.1-.06h-.09l-.1-.05-.08-.07-.08-.05-.1-.07-.09-.06-.08-.07-.08-.05-.09-.07-.08-.06-.08-.07-.09-.08-.08-.07-.08-.07-.09-.06-.08-.09-.07-.06-.85-.82-1-.92-.64-.65-.68-.75-.72-.88-.5-.73-.06-.09-.05-.1-.07-.08-.05-.1-.05-.08-.07-.1-.05-.09-.05-.1v-.1l-.05-.08-.05-.1-.05-.1v-.1l-.05-.1-.05-.08v-.1l-.05-.1v-.2l-.05-.1v-1.79.05-3.82l.05-.1v-.2l.05-.1v-.2l.05-.08v-.1l.05-.1.05-.1.05-.08.05-.1v-.09l.07-.1v-.1l.05-.08.06-.08.05-.1.07-.09.07-.08.06-.1.05-.08.07-.09.07-.08.06-.08.07-.09.08-.08.07-.08.07-.07.06-.08.09-.09.06-.06.09-.09.06-.08.09-.07.08-.06.08-.09.07-.06.08-.07.09-.07.08-.06.08-.07.09-.07.08-.06.1-.07.08-.07.09-.06.08-.05.1-.07h.08l.1-.07h.09l.1-.05h.08l.1-.06.1-.05.08-.05h.2l.1-.05.1-.05h.29l.1-.05h3.15zm14.66 34.8h1.22l.25.05.23.05h.24l.23.06.23.07.24.08.23.09.23.1.22.1.22.1.21.11.22.12.22.12.2.13.2.13.2.15.2.15.18.15.2.17.17.17.18.16.17.17.16.18.17.19.15.2.15.18.13.2.55.23.77.37.22.12.21.11.2.12.22.13.2.14.2.13.2.15.2.15.18.15.19.17.16.16.19.19.16.16.17.19.15.2.15.18.15.2.13.2.14.2.13.22.12.2.11.21.12.24.1.21.1.22.08.23.09.24.08.23.07.23.05.24.06.23.05.25v3.87l-.05.11v.24l-.05.11v.24l-.05.11v.22l-.05.12-.05.1-.07.11-.05.12-.05.1-.06.12-.07.1-.05.1-.07.11-.06.1-.07.1-.07.1-.06.1-.07.1-.08.1-.07.1-.08.1-.07.09-.08.1-.09.1-.08.08-.07.1-.08.08-.1.09-.08.08-.09.1-.08.08-.1.09-.08.08-.1.07-.09.08-.1.08-.1.07-.08.08-.1.07-.1.08-.1.07-.1.07-.1.06-.1.07-.12.07-.1.06-.1.05-.11.07-.1.07-.12.05h-.1l-.12.06-.1.05-.11.05h-.24l-.1.05-.11.05h-6.32l-.12-.05-.11-.05h-.22l-.12-.06-.11-.05-.52-.25-.32-.14-.25-.1-.21-.08-.62-.22-.55-.2-.43-.18-.12-.05-.1-.05h-.12l-.11-.07-.1-.05-.12-.06-.1-.05-.18-.1-.1-.07-.1-.05-.1-.07-.1-.06-.1-.07-.1-.07-.1-.06-.1-.07-.1-.07-.09-.06-.16-.14-.1-.06-.09-.09-.1-.06-.08-.09-.08-.06-.1-.09-.09-.08-.08-.08-.08-.09-.09-.08-.08-.08-.15-.17-.08-.08-.07-.09-.08-.08-.07-.08-.08-.09-.07-.08-.07-.1-.06-.08-.09-.09-.06-.1-.14-.2-.06-.1-.07-.1-.07-.1-.06-.1-.07-.1-.07-.1-.06-.1-.29-.5-.36-.75-.45-1.06-.05-.1v-.12l-.05-.12v-.11l-.05-.12v-4.98l.05-.11v-.24l.05-.11v-.12l.05-.12.05-.11.05-.1v-.12l.05-.12.05-.1.07-.11.05-.1.05-.12.06-.1.07-.1.07-.12.05-.1.06-.1.07-.1.08-.1.07-.1.07-.1.08-.1.07-.1.08-.1.07-.08.08-.1.08-.08.09-.1.08-.09.08-.1.09-.08.08-.08.08-.09.1-.08.09-.08.1-.09.08-.08.1-.07.1-.08.08-.07.1-.08.1-.07.1-.06.1-.09.1-.06.12-.07.1-.07.1-.05.1-.06.12-.07h.1l.11-.07h.1l.12-.05h.1l.12-.05.11-.05h.12l.1-.05h.23l.12-.35h2.88zm22 25.07h1.35l.49.08h.23l.23.05h.22l.23.07.22.06.22.09.23.08.22.08.2.1.21.1.2.1.22.12.25.15.5.15h.38l.24.05h.23l.22.05.23.07.22.08.21.07.22.08.22.1.21.1.22.1.2.1.2.12.22.12.18.13.2.13.18.14.2.13.17.15.18.15.19.15.16.17.17.16.15.17.17.18.15.19.13.18.15.18.13.19.12.2.13.2.12.2.12.2.1.21.1.2.1.22.08.22.08.21.09.24.06.21.07.22v.47l.05.23v4.38l-.05.12v.22l-.05.1v.21l-.05.12v.1l-.05.12v.2l-.05.1v.11l-.06.1v.1l-.07.1v.1l-.07.1-.06.1-.07.1-.07.09-.06.1-.07.1-.07.08-.06.1-.09.1-.06.08-.07.09-.08.1-.09.08-.75.08-.09.09-.08.08-.08.08-.09.09-.08.08-.08.08-.1.07-.09.08-.08.09-.1.06-.08.07-.1.08-.09.07-.1.07-.1.06-.08.07-.1.07-.1.06-.1.07-.1.05-.1.07-.1.05-.1.06-.1.05-.1.05-.12.07-.1.05h-.21l-.1.05h-.12l-.1.05h-.22l-.11.05h-4.55l-.5-.1-1.1-.29-1.1-.35-1.05-.35-1.05-.38-.69-.3-.1-.05h-.11l-.1-.05-.1-.05-.1-.05-.1-.05-.12-.07-.1-.05-.1-.06-.1-.05-.1-.07-.1-.07-.1-.06-.08-.05-.1-.07-.1-.07-.09-.06-.1-.07-.08-.08-.1-.07-.08-.07-.09-.08-.1-.07-.08-.08-.08-.07-.09-.08-.06.35-.08-.09-.09-.06-.06-.09-.09-.08-.08-.08-.07-.1-.08-.09-.07-.08-.06-.08-.09-.1-.06-.09-.07-.1-.07-.08-.06-.1-.07-.1-.07-.08-.06-.1v-.1l-.07-.1-.05-.1-.06-.12v-.1l-.05-.1-.07-.1-.05-.1-.05-.11-.05-.1-.05-.1v-.12l-.05-.1-.22-.15v-.21l-.05-.12v-5.25l.05-.1v-.34l.05-.11v-.1l.05-.12.05-.1v-.1l.05-.12.05-.1.05-.1.06-.1v-.1l.05-.11.07-.1.07-.1v-.09l.06-.1.07-.1.07-.1.06-.1.07-.08.08-.1.07-.08.07-.1.08-.09.07-.1.08-.08.08-.08.07-.09.08-.08.09-.08.35-.17.09-.08.08-.09.1-.08.1-.08.08-.07.09-.08.1-.07.08-.07.1-.06.08-.07.1-.07.1-.06.09-.07.1-.07.1-.06.1-.05.1-.07.1-.05h.1l.1-.07.1-.05.1-.05h.1l.1-.05h.21l.1-.05.12-.05h3.19zm-.68 16.66h-.35zm5.57-15.28h.23-.2zm27 17.12h.95l.25.05h.23l.23.05.22.05.23.06.24.07.21.08.24.07.21.1.22.08.22.1.21.12.22.1.2.13.2.12.2.13.2.14.22.15.31.05h.24l.23.05.23.05.24.07.21.06.24.09.21.06.24.1.21.09.22.1.22.1.2.11.21.12.2.13.2.12.2.13.19.15.18.14.18.15.19.16.18.17.17.15.16.18.17.17.15.18.15.19.15.18.13.2.14.2.13.2.12.2.11.2.12.22.1.21.1.22.1.22.08.21.09.24.06.21.07.24.07.23.05.23v4.35l-.05.1v.24l-.05.11v.22l-.05.1v.22l-.05.11v.1l-.07.1v.12l-.06.1v.1l-.07.1-.07.1-.05.1-.06.1-.07.1-.07.1-.08.1-.07.1-.06.08-.07.1-.08.1-.09.09-.06.08-.09.1-.08.08-.08.09-.09.08-.08.1-.08.08-.09.09-.08.06-.08.09-.1.08-.09.08-.1.07-.08.08-.1.07-.08.07-.1.06-.1.09-.1.06-.1.07-.1.07-.1.05-.1.06-.1.07-.1.05-.12.07-.1.05h-.1l-.12.06-.1.05-.1.05-.11.05h-.12l-.1.05-.12.05h-.1l-.11.05h-.24l-.1.05h-3.2l-.75-.07-1.8.52-.72-.12-.66-.15-.7-.16-.74-.2-.81-.29-.57-.23h-.2l-.1-.05-.1-.05-.1-.05-.1-.05h-.12l-.25-.14-.1-.05-.1-.06-.1-.05-.1-.05-.08-.07-.1-.07-.1-.05-.1-.06-.08-.07-.1-.07-.09-.06-.2-.15-.08-.07-.08-.07-.1-.06-.09-.07-.08-.07-.08-.08-.09-.07-.08-.08-.08-.07-.09-.08-.08-.08-.08-.09-.07-.06-.07-.09-.08-.08-.08-.08-.09-.1-.06-.09-.09-.08-.06-.1-.09-.08-.06-.1-.07-.1-.07-.09-.06-.1-.07-.1v-.08l-.07-.08-.06-.1v-.1l-.07-.1-.07-.1v-.2l-.06-.1v-.12l-.05-.1v-.42l-.05-.11v-6.59l.05-.1v-.2l.05-.11v-.1l.05-.1v-.19l.05-.1v-.1l.05-.1.07-.1.05-.1.06-.08v-.1l.07-.1.07-.1.06-.08.07-.1.07-.09.06-.1.07-.08.07-.08.08-.1.07-.07.06-.1.09-.08.06-.09.09-.08.08-.08.08-.09.09-.08.08-.08.08-.09.09-.08.08-.07.08-.08.1-.08.1-.07.09-.08.1-.07.08-.08.1-.07.1-.07.1-.06.1-.07.1-.07.1-.06.1-.07.1-.07h.1l.1-.06.1-.05.12-.07.1-.05.1-.05.11-.05h.1l.12-.05.1-.05h.12l.11-.05.1-.05h.24l.11-.05h2.62zm5.78 14.16-.08.09-.09.08-.08.08-.1.09-.08.08-.09.08.44-.38.15-.18zm.83-1 .06-.07v-.05zm36.42-31.73h1.23l.3.07.3.06.3.09.3.08.3.1.29.12.28.11.28.14.27.15.27.15.26.16.27.17.25.18.23.19.24.2.23.21.22.22.21.22.2.23.2.25.19.25.18.25.17.27.15.26.15.27.13.28.13.29.12.28.1.28.1.3.08.3.07.3.07.3v4.22l-.05.15v.15l-.05.13-.07.15-.07.13v.15l-.06.14-.09.15-.06.13-.07.13-.08.14-.09.13-.08.13-.08.14-.09.11-.08.14-.1.13-.08.12-.1.11-.1.12-.1.13-.1.12-.1.1-.12.12-.1.11-.12.1-.11.12-.1.1-.12.1-.13.1-.12.1-.12.1-.13.08-.12.1-.13.09-.12.08-.13.08-.5.09-.14.08h-.08l-.11.1-.15.13-.47.45-.53.54-.55.6-.57.63-.53.62-1 1.21-.81 1-.32.35-.1.1-.1.1-.1.12-.12.1-.1.1-.11.1-.12.1-.12.1-.11.1-.12.08-.12.1-.13.09-.12.08-.13.08-.12.09-.13.08-.13.08-.14.07-.13.07-.13.06-.14.07-.13.07-.15.06-.13.07h-.14l-.15.05-.13.05-.15.05-.15.05h-.15l-.15.05h-4.28l-.15-.05h-.3l-.15-.05-.15-.05-.14-.05-.15-.07-.13-.05-.15-.06-.13-.07-.15-.07-.14-.06-.13-.07-.13-.08-.15-.07-.12-.08-.13-.09-.14-.08-.13-.08-.12-.1-.13-.09-.12-.1-.13-.1-.12-.1-.11-.1-.12-.1-.12-.1-.1-.11-.11-.1-.1-.12-.12-.12-.1-.1-.1-.11-.1-.14-.1-.11-.08-.12-.1-.13-.09-.12-.1-.13-.08-.14-.08-.11-.09-.14-.06-.13-.09-.13-.06-.15-.07-.14-.07-.13-.06-.15-.05-.15-.07-.13-.05-.15-.06-.15v-.15l-.05-.14v-4.67l.05-.15v-.3l.05-.15v-.14l.07-.15v-.15l.07-.13.06-.15.07-.13.07-.17.06-.12.07-.13.07-.12.06-.11.07-.14.07-.11.25-.39.08-.13.08-.13.09-.12.08-.13.1-.12.1-.13.08-.12.1-.12.1-.11.1-.12.12-.12.1-.11.12-.1.1-.12.11-.1.12-.1.12-.1.11-.1.64-.75.68-.8.75-.84.82-.86.85-.89.88-.83.53-.48.52-.44.57-.45.63-.45.72-.46.51-.29.14-.06.15-.09.13-.06.13-.07.15-.07h.14l.15-.06.15-.05h.13l.15-.05.15-.05h.3l.15-.05h2.03zm24.52-21.67h1.63l.23.05h.22l.23.06.22.07.22.08.23.09.22.08.2.1.21.1.22.12.2.11.2.12.2.12.2.13.18.13.2.15.19.14.16.16.19.15.16.17.17.17.17.16.15.17.15.18.15.19.13.18.13.2.14.2.13.2.12.2.11.2.1.22.1.2.1.21.09.22.08.23.08.22.07.22.07.23.05.22v5.25l-.05.12v.22l-.05.1v.21l-.05.1v.1l-.05.07v2.75l-.05.11v.54l-.05.11v.1l-.05.1v.22l-.06.1v.1l-.07.1v.1l-.07.1-.06.1-.07.1-.07.1-.06.1-.07.1-.07.08-.06.1-.09.09-.06.1-.07.08-.08.1-.09.08-.06.09-.09.08-.08.08-.08.09-.09.08-.08.08-.08.09-.1.08-.09.07-.08.08-.1.07-.08.08-.1.07-.09.08-.1.07-.1.06-.08.07-.1.07-.1.06-.1.05-.12.09-.1.06h-.1l-.1.07h-.11l-.1.07-.1.05-.1.05h-.1l-.12.05h-.1l-.1.05h-.12l-.1.05h-.2l-.11.05h-7.51l-.1-.05h-.22l-.1-.05-.12-.05h-.1l-.1-.05h-.1l-.1-.05-.11-.05-.1-.07h-.1l-.09-.05-.1-.07-.1-.06h-.05l-.1-.06-.1-.05-.08-.07-.1-.07-.1-.06-.08-.09-.09-.06-.1-.07-.08-.07-.08-.08-.09-.07-.1-.08-.08-.07-.08-.08-.09-.08-.06-.09-.09-.08-.08-.08-.08-.09-.07-.08-.08-.08-.07-.09-.07-.08-.08-.1-.07-.08-.06-.1-.07-.09-.07-.1-.06-.08-.07-.1-.07-.1-.07-.1v-.1l-.06-.1-.05-.1-.07-.1-.05-.1v-.1l-.05-.1v-.22l-.05-.1v-.1l-.05-.11v-5.17l.12-.62.23-.85.24-.73.23-.67.28-.7.47-1.08.32-.63.35-.64.25-.4.05-.1.06-.08v-.08l.07-.1v-.09l.07-.08.06-.08.07-.09.07-.08.1-.15.08-.08.07-.09.08-.1.07-.08.08-.08.08-.1.09-.09.06-.08.09-.08.08-.09.1-.06.08-.09.09-.08.08-.08.1-.07.08-.08.1-.07.09-.07.1-.06.1-.09.08-.06.1-.07.1-.07h.1l.1-.06.1-.07.1-.05.1-.07.1-.05h.12l.1-.06.1-.05.11-.05h.1l.1-.05h.12l.1-.05h.22l.11-.05h1.49-.6 1.29zm6.58 13.3-.07.09-.06.1.18-.24zm-11.73-8.25-.37.24.1-.07h.1l.1-.07h.1l.1-.06zm1.26-.56h-.06.09zm26.22-33.62h.88l.44.05.43.08.42.12.38.1.82.26.41.17.4.17.4.2.39.21.36.24.37.26.33.27.34.3.31.3.3.33.29.34.25.36.25.37.21.38.2.39.19.4.16.41.14.42.11.43.09.44.06.43v4.77h-9.72l-1.86 4.05h-.7v-13.1h.85-.15 2.38z"/><path d="m677.68 113.33 1.27.17 1.25.25 1.22.35 1.21.42 1.19.51 1.15.57 1.13.67 1.08.71 1.07.79 1 .85.51.45.49.48.45.5.43.5.4.52.43.6.62 1 .58 1.1.5 1.12.4 1.12.34 1.11.26 1.14.2 1.11.17 1.12.1 1.12.05 1.1v2.21l-.07 1.12-.1 1.1-.11 1.12-.17 1.1-.18 1.11-.22 1.1-.23 1.1-.27 1.1-.28 1.1-.32 1.1-.35 1.1-.35 1.09-.38 1.08-.42 1.08-.42 1.07-.45 1.07-.46 1.06-.49 1-.5 1.05-.53 1-.55 1-.57 1-.56 1-.6 1-.64 1-.63.93-.65.92-.68.88-.7.89-.72.85-.75.83-.77.8-.8.78-.81.75-.85.72-.9.7-.92.65-1 .62-1 .56-1.06.54-1.1.46-1.15.4-1.22.34-1.17.23-.73.08-.65.07h-2.02l-.68-.05-.68-.1-.69-.12-.66-.15-.69-.18-.65-.22-.63-.25-.63-.26-.6-.32-.6-.33-.57-.37-.53-.38-.6-.49-.6-.55-.19-.18-.18-.18-.18-.2-.34-.37-.25-.28-.21-.3-.52-.69-.63-1-.54-1-.45-1-.36-1-.32-1-.23-1-.2-1-.14-1-.11-1-.05-1v-3l.07-1 .1-1 .08-.61v-.24l-.22-1-.16-1-.14-1-.1-1v-4l.07-1 .08-1 .12-1 .15-1 .18-1 .18-1 .24-1 .23-1 .27-1 .3-1 .31-1 .34-1 .36-1 .39-.95.4-1 .43-.94.47-.91.46-.92.5-.9.54-.88.55-.89.58-.85.62-.85.63-.81.67-.8.68-.79.73-.76.77-.74.8-.7.85-.68.88-.65.92-.6 1-.57 1-.51 1.06-.47 1.09-.42 1.15-.33 1.16-.27 1.22-.2 1.23-.1h1.25zm-3.53 35.54v-.65zm-.13-5-.2.19-.24.23-.25.25-.26.3-.27.33-.27.35-.28.4-.27.42-.28.43-.15.29.35-.44.48-.58 1-1.37.65-.83z" fill="#fff"/><path d="m684.42 115.93h2.15l.38-.05h2.5l.35.07.35.08h.1l.37.1.33.12.5-.18.69-.24.7-.2.71-.18.74-.13.75-.1.75-.07h2.3l.76.08.77.12.75.15.75.2.73.21.74.27.7.28.7.34.68.35.67.36.65.4.63.44.62.45.56.43.54.43.51.47.52.48.48.5.47.52.43.53.44.54.4.55.38.56.37.59.33.6.32.58.28.62.27.61.25.62.21.62.22.68.32 1.2.23 1.25.15 1.27.08 1.23v1.23l-.05 1.22-.06.6.15.37.28.93.18.87.14.81.1.79v3.41l-.11 1.22-.15 1.12-.17 1-.18 1-.32 1.48-.22 1-.36 1.52-.25.9-.25.92-.29.95-.31 1-.35 1-.37 1-.4 1-.43 1-.47 1.06-.5 1.07-.55 1.07-.58 1.06-.64 1.07-.68 1-.73 1.05-.8 1-.84 1-.5.55-.48.48-.5.49-.53.46-.55.47-.59.45-.64.7-.64.41-.66.4-.69.37-.73.33-.75.32-.77.27-.81.25-.82.18-.85.17-.87.1-.86.06h-1.77l-.88-.08-.87-.14-.88-.18-.85-.23-.85-.27-.84-.3-.7-.3-.7-.33-.66-.37-.65-.38-.64-.4-.61-.44-.59-.45-.55-.46-.51-.53-.52-.52-.5-.52-.46-.53-.44-.55-.41-.57-.4-.56-.14-.19-.65-.11-.71-.17-.64-.17-.65-.18-.65-.22-.63-.21-.63-.27-.64-.27-.65-.31-.83-.45-.85-.5-.8-.54-.77-.56-.75-.62-.7-.65-.66-.67-.62-.7-.58-.73-.54-.75-.5-.75-.45-.78-.41-.79-.37-.8-.33-.8-.3-.8-.25-.8-.24-.81-.2-.8-.15-.8-.15-.8-.1-.79-.08-.8-.07-.78v-3.91l.07-.78.15-1.45.2-1.47.26-1.45.32-1.42.35-1.4.38-1.36.42-1.34.45-1.31.47-1.27.5-1.25.51-1.2.54-1.15.53-1.13.57-1.07.56-1 .6-1 .6-1 .55-.8.64-.82.68-.8.78-.78.6-.5.2-.17.2-.15.22-.15.33-.23.24-.15.21-.15.24-.13.35-.2.25-.14.23-.11.25-.12.37-.15.23-.1.25-.1.25-.08.72-.24 1-.25 1-.15.9-.08.82-.05h2.01zm-570.8 299.49h.53l.42.07.41.06.42.1.42.12.4.13.4.15.38.19h.07l.4.22.38.21.37.25.36.29.34.28.33.3.32.33.05.05.28.34.27.35.25.35.23.36.2.39.18.38v.08l.19.44.15.45.13.45.12.45v.11l.07.4.07.4v2.15l-.08 1.1-.15 1.09-.2 1.06-.23 1-.3 1-.34 1-.35.95-.4.93-.43.9-.45.89-.48.85-.5.83-.52.82-.12.16.07.22.1.37.1.38v.07l.06.41.07.4v2.12l-.05.37v.25l-.1.45-.12.46-.16.6-.34.87-.33.77-.35.73-.38.73-.42.74-.47.8-1 1.63-1.24 1.9-1.06 1.57.08.13.1.13.23.4.24.4.18.4.08.15.15.4.15.4.12.4.07.22.38-.25.77-.42.86-.4.6-.21.4-.14.4-.11.29-.07.45-.12.48-.06h3.04l.42.08.42.09.4.1.26.08.4.13.4.15.39.17.25.13.36.19.37.2.35.21.25.17.3.22.3.23.28.23.24.22.28.25.27.27.25.28.23.28.1.12.23.33.24.34.2.33.2.37.16.35.07.15.17.4.15.4.13.41.1.44v.15l.09.38v2.71l.08.5-.08.45v.22l-.1.36-.1.35-.17.5v.09l.25.28.29.4.28.4.25.42.22.45.2.45.16.45.15.46.12.49.08.48.05.48v1.47l-.07.48-.08.49-.12.48-.13.47-.17.46-.2.45-.21.44-.25.43v.08l-.24.34-.23.33-.25.3-.27.32-.35.36-.56.54-.57.48-1.13 1-1.39 1.08-1.6 1.24-1.78 1.33-1.92 1.4-2 1.45-2.07 1.45-2.18 1.4-2 1.35-2 1.25-.95.6-.92.55-.9.52-.86.5-.89.45-.91.42-1 .43-.75.22-.42.11-.43.1h-.17l-.43.08h-2.17l-.4.22-2.63 1.43-2.48 1.29-2.28 1.13-1.1.52-1 .46-1 .42-1 .38-1 .37-1 .3-.51.12-.37.06-.38.05h-1.93l-.47-.05-.43-.08-.45-.1-.43-.14h-.09l-.45-.15-.43-.18-.42-.2-.4-.24-.4-.25-.38-.26-.37-.3-.33-.3-.33-.34v-.05l-.32-.36-.3-.37-.27-.4-.25-.4-.23-.43-.2-.44-.17-.43-.16-.45-.12-.47-.07-.33h-2.05l-.4-.07-.4-.06h-.16l-.44-.1-.43-.11-.43-.15-.42-.19-.12-.05-.38-.18-.38-.2-.39-.23-.35-.25-.35-.27-.33-.28-.07-.07-.33-.32-.32-.33-.3-.35-.28-.37-.25-.38-.23-.4-.22-.4v-.08l-.18-.4-.15-.42-.14-.42-.11-.41-.1-.44-.07-.43v-2.3l.06-.43v-.12l.06-.38.1-.39.12-.36.13-.37.05-.13.12-.32.15-.3.15-.3.25-.47.48-.76.69-.89.66-.73.64-.67 1.08-1 1-.93.39-.37.26-.27.1-.11.07-.09 1.35-1.75 1.39-1.94 1.49-1.82 1.51-1.78 1.54-1.84.85-1-.12-.15-.25-.4v-.1l-.47-.09-.48-.11-.47-.14-.45-.15-.44-.19-.43-.21-.42-.24-.4-.26-.46-.29-.37-.3-.35-.33-.31-.34-.32-.36-.3-.37-.27-.4-.23-.4-.23-.42-.19-.43-.18-.45-.13-.45-.14-.47-.08-.45-.07-.48v-1.93l.08-.49.08-.46.12-.45.13-.41.15-.4.18-.4.2-.4.22-.39.23-.36.25-.35.29-.35v-.05l.26-.3.3-.3.32-.29.38-.33.64-.5 1.15-.8 1.46-1 1.75-1.17 2-1.3 1.3-.83.85-.79.93-.81.92-.79 1.73-1.48.72-.63.6-.57.2-.18.15-.17.08-.08v-.07l1.49-1.92 1.13-1.51.87-1.2.76-1.12.82-1.2 1-1.43 1.27-1.8 1.65-2.27 1.25-1.68 1.28-1.72 1.35-1.7.72-.9.68-.8 1.18-1.42.8-.93.49-.55.51-.53.59-.59.7-.63.83-.63.43-.29.34-.2.31-.18.14-.05.31-.17.32-.13.33-.13h.1l.37-.11.35-.12.37-.08.38-.07h.08l.45-.06h1.34z" fill="#fff"/><path d="m161.32 358.78.75.05.75.09.75.1.71.13.74.15.7.17.7.18.7.22.66.23.72.25 1.27.52 1.3.6 1.25.63 1.25.7 1.21.73 1.2.79 1.17.8 1.17.86 1.15.87 1.13.92 1.13 1 1.1 1 1.1 1 1.09 1 1.06 1 1.07 1 1 1.09 1 1.08 1 1.1 1 1.12 1 1.11 1 1.12 1 1.13.91 1.14.92 1.11.88 1.14.87 1.11.83 1.12.82 1.12.82 1.11 1.5 2.14 1.4 2.08 1.26 2 .62 1 .57.95.53.94.52.9.46.88.45.85.42.83.38.84.35.81.32.85.3.87.27 1 .13.69.08.46.05.47v1.92l-.06.58-.12.55-.07.33-.11.44-.12.43-.23.68-.42 1-.45.85-.45.78-.48.74-.5.7-.52.68-.53.67-.55.66-.6.69-1.19 1.3-1.3 1.33-1.38 1.35-1.45 1.38-1.52 1.4-1.56 1.4-1.64 1.44-1.65 1.43-1.71 1.34-1.72 1.43-3.4 2.8-3.33 2.77-3.18 2.55-2.94 2.33-2.56 2.07-2.14 1.71-.83.69-.67.56-.43.39-.27.23-2.73 2.69-2.8 2.78-2.83 2.78-2.85 2.75-2.85 2.75-2.85 2.72-5.72 5.44-5.75 5.41-5.75 5.39-11.5 10.76-11.48 10.69-5.72 5.31-5.68 5.37-5.65 5.38-2.82 2.7-2.8 2.7-2.8 2.72-2.78 2.71-2.77 2.74-2.73 2.73-.54.55-.5.52-1 1.13-1 1.17-1 1.2-1 1.23-1 1.25-2 2.62-2 2.61-1 1.34-1 1.31-1.08 1.32-1.12 1.3-1.15 1.25-.62.65-.63.62-.63.61-.65.6-.69.59-.7.58-.71.57-.75.55-.77.53-.8.5-.83.5-.85.45-.89.43-.91.4-.94.35-1 .34-1 .28-1 .23-1 .19-1 .13-1.06.1h-2.35l-1.08-.05-1.09-.12-1.1-.17-1.1-.21-1.1-.27-1.08-.3-1.1-.37-1.05-.36-1.1-.45-1.1-.48-1.1-.54-.72-.36-.7-.4-.68-.4-.69-.44-.65-.41-.66-.49-1.22-.88-1.18-1-1.15-1-1.12-1-1.07-1-1-1-1-1-.95-1-.94-1-1.7-1.89-1.55-1.78-1.31-1.52-1.25-1.5-1.2-1.46-1.16-1.38-1.07-1.42-1-1.38-1-1.37-.83-1.35-.82-1.3-.76-1.34-.7-1.31-.62-1.35-.59-1.3-.53-1.3-.47-1.3-.4-1.3-.36-1.3-.27-1.3-.2-1.32-.13-1.31v-1.32l-.05-1.25.11-1.28.19-1.32.25-1.25.32-1.22.38-1.18.45-1.13.5-1.1.53-1.07.59-1 .61-1 .65-.95.67-.92.7-.86.72-.85.75-.84.75-.81.76-.79.79-.76.8-.77.83-.77 1.65-1.46 1.7-1.47 1.71-1.48 1.75-1.49 1.77-1.51 1.78-1.57 1.82-1.63.88-.8.9-.85.9-.87.9-.88.9-.9.9-.92.89-.95.91-1 7.19-8 3.63-4 3.65-4 3.67-4 3.71-3.95 3.74-3.93 3.76-3.9 1.94-1.85 1.92-1.94 1.93-1.93 2-1.92 2-1.9 2-1.9 2-1.88 2-1.88 2-1.85 2-1.85 2-1.85 1.95-1.82 2.08-1.82 2.1-1.8 2.12-1.76 2.1-1.74 2.13-1.78 2.09-1.78 2-1.8 2-1.82 2-1.85 2-1.85 2-1.88 2-1.9 4-3.84 4.09-3.86 2.08-1.95 2.1-1.95 2.13-1.94 2.2-2 1.55-1.33 2.32-1.94 2.8-2.3 3-2.45 5.27-4.28 1.71-1.37.7-.53.34-.23.68-.42.72-.35.75-.28.51-.14-.06-.79v-.8l.08-.78.15-.78.22-.77.3-.73.35-.7.43-.67.49-.63.55-.57.48-.47.63-.55.67-.53.67-.5.71-.45.74-.43.73-.39.77-.35.76-.31.79-.27.78-.23.8-.2.8-.15.78-.12.8-.08h2.34zm-.95 16.65h-.22l-.06.05-.07.06-.2.2-.6.52-.65.47-.68.4-.72.31-.75.27-.35.08.08.7v.8l-.06.8-.14.79-.21.76-.29.74-.36.71-.42.69-.48.63-.55.58-.59.52-.53.38.07-.07-.19.15-1.56 1.25-5.2 4.22-2.94 2.4-2.73 2.27-2.22 1.83-1.31 1.13-2 1.8-2 1.85-2 1.89-2 1.88-4.05 3.83-4.39 4.01-2 1.94-2.08 1.93-2.1 1.95-2.13 1.93-2.17 1.92-2.2 1.91-2.25 1.92-2.25 1.87-2 1.7-2 1.68-2 1.7-2 1.73-2 1.74-2 1.75-1.95 1.76-1.87 1.81-1.92 1.8-1.9 1.8-1.88 1.83-1.88 1.83-1.89 1.85-1.85 1.87-1.86 1.87-1.82 1.88-3.68 3.8-3.65 3.83-3.67 3.89-3.62 3.9-3.6 3.91-3.58 3.95-7.2 8-1 1.11-1 1.12-1 1.1-1.17 1.09-1 1-1 1-1 1-1 .95-2 1.76-1.91 1.69-1.92 1.5-1.75 1.5-1.67 1.42-1.58 1.33-1.44 1.28-.56.57-.62.59-.58.56-.53.55-.5.54-.45.51-.42.49-.37.46-.33.45-.28.42-.25.4-.22.37-.17.35-.15.31-.11.3-.1.3-.07.29-.07.26v1.65l.06.42.1.48.14.52.18.58.23.64.27.68.33.73.4.8.45.85.52.9.58 1 .65 1 .74 1 .78 1.1.87 1.15.95 1.2 1 1.25 1.09 1.32 1.18 1.37 1.43 1.63 1.55 1.72.72.86.78.82.8.81.8.79.8.73.79.72.76.65.75.6.77.56.32.22.33.22.33.21.32.19.3.16.28.15.64.3.6.27.58.23.53.2.5.15.47.14.42.1.4.08.36.05h1.75l.24-.05h.25l.23-.07.25-.08.25-.1.25-.1.27-.13.28-.15.28-.17.32-.2.3-.22.33-.25.35-.25.34-.3.36-.31.37-.34.38-.36.39-.39.38-.4.83-.91.85-1 .89-1 .9-1.13.91-1.2 2-2.57 2.08-2.7 1.1-1.41 1.14-1.56 1.2-1.43 1.25-1.45 1.3-1.42.7-.73.7-.7 2.82-2.82 2.81-2.78 2.84-2.77 2.83-2.75 2.85-2.75 2.85-2.73 5.72-5.43 5.73-5.4 5.73-5.39 11.5-10.7 11.5-10.7 5.7-5.35 5.7-5.36 5.67-5.34 2.82-2.7 2.8-2.71 2.8-2.72 2.8-2.73 2.76-2.74 2.87-2.85.63-.6.79-.68.85-.73 1-.8 2.22-1.8 2.61-2.09 2.92-2.33 3.13-2.52 3.27-2.63 3.28-2.72 1.62-1.35 1.6-1.35 1.55-1.33 1.5-1.32 1.42-1.28 1.35-1.25 1.25-1.18 1.13-1.12 1-1 .88-1 .23-.27-.08-.15-.33-.61-.39-.69-.41-.71-.47-.77-.47-.78-1.1-1.72-1.21-1.8-1.34-1.9-.68-.95-.72-1-.75-1-.76-1-.77-1-.8-1-.82-1-.83-1-.83-1-.85-1-.87-1-.87-.95-.88-.92-.87-.9-.88-.88-.88-.87-.89-.82-.88-.8-.87-.76-.86-.72-.85-.68-.84-.65-.81-.6-.82-.55-.77-.5-.75-.47-.71-.4-.69-.33-.63-.3-.63-.25-.24-.09-.25-.1-.25-.06-.21-.07-.22-.05h-.98z"/><path d="m336.5 188.15 1.07.1 1 .13 1 .19 1 .2.95.21.94.24.9.25.9.26 1.65.54 1.58.55 1.52.53 1.38.48 1 .19 2.13.43 1 .17 1.27.21 2.93.47 1.34.23.66.14.82.18.53.17.69.25.63.3.62.36.6.42.56.48.52.52.47.56.41.6.1.19h.12l.2.05.68.19.67.23.2.08.53.25.52.27.2.12.42.26.4.29.2.13.3.25.3.27.43.38.58.62.5.6.42.56.4.59.27.43.25.17 4.2 2.81 1.63 1.12.77.57.45.36.58.52.52.57.1.13.43.57.38.6.34.63.28.67.22.66.15.71.07.4.52.29 1.25.71.68.42.68.42.7.46.7.5.74.55.75.64.75.73.51.58.49.6.46.62.42.67.37.68.18.42.18.43.15.43.05.12.15.52.1.53.09.53v.09l.05.76v.75l-.09.77-.15.73v.07l-.2.65-.24.63-.3.62-.35.58-.4.55-.43.54-.47.48h-.05l-.35.3.2.64.24.9.2.9.18.88.15.88.12.87.1.85.1.88.11 1.6v1.19l.27 1 .35 1.43.18 1.12.29 1.78.35 2.37.36 2.65.17 1.38.15 1.35.13 1.32.1 1.25.05 1.18v1.45l-.05.53-.07.47-.08.45-.05.18-.17.67-.23.65-.27.62-.07.11.05.07.3.5.24.41.4.84.3.73.26.75.24.75.2.75.18.73.13.74.12.73.08.73.07.72v2.87l-.08 1.33-.14 1.37-.2 1.35-.23 1.35-.27 1.31-.31 1.3-.35 1.3-.39 1.27-.4 1.27-.41 1.25-.45 1.21-.47 1.2-.23.55v2.94l-.05.76-.1.77-.19.75-.25.72-.31.7-.37.68-.43.63-.5.59-.55.53-.59.5-.65.43-.66.37-.57.25-.1.17-.83 1.36-.39.65-.65 1.14-.85 1.48-.5.85-.55.87-.58.9-.63.9-.7.93-.17.2-.85 1.6-1 1.68-.83 1.42-.8 1.25-.77 1.13-.82 1.19-1 1.41-.32.45-.28 1.1-.37 1.1-.4 1-.45 1-.47 1-.51 1-.54 1-.36.68-.17.53v.12l-.22.6-.27.57-.08.15-.23.41-.25.4-.42.64-.65.83-.63.73v.05l-.35.55-.66 1-.67 1-.67.95-.65.91-.66.89-.67.83-.68.8-.72.78-.82.8-.9.77-.73.52-.45.26-.42.24-.41.2-.14.06-.61.25h-.05l-1.59 1.59-3.25 3.13-.13.13-.27.54-.41.63-.47.6-.52.55-.83.83-.95.9-1.18 1.12-1.32 1.23-1.4 1.27-1.4 1.2-.73.62-.65.51-2.55 2-1.5 1.15-1.5 1.39-1.73 1.28-1.84 1.35-1.9 1.3-1 .66-1 .65-1 .65-1 .64-1 .61-1.05.6-1.05.59-1.08.55-1.07.53-1.1.5-1.11.48-1.14.44-1.15.4-1.18.35-1.22.3-1.2.21-.71.1-.69.07h-1.95l-.76-.08-.74-.15-.73-.23-.37-.15-.26.11-1.97.87-2 .81-2 .79-1.07.38-1.05.37-1 .33-1.05.33-1.05.29-1.06.26-1.07.24-1.1.2-1.13.15-1.19.1h-1.33l-.78-.05-.74-.09-.76-.15-.84-.2-.51-.18-.72-.27-.2-.1-.35-.21-.23.07-.45.07-1 .11-1 .05-1.15.05h-1.94l-.78-.08-.93-.13-1-.24-1.31-.43-1.12-.4-1.08-.43-1-.44-.23-.11h-4.35l-.76-.1-.74-.18-.73-.23-.7-.32-.67-.37-.63-.43-.6-.48-.53-.54-.5-.6-.44-.61-.25-.45-.53-.17-2.53-.85-1.55-.5-.92-.28-.12.06-1 .54-1 .43-1 .33-1 .27-1 .17-1 .1h-1.88l-.88-.09-.87-.13-.83-.17-.8-.2-.77-.23-.75-.25-.73-.27-.7-.3-.69-.31-.68-.34-.65-.33-.65-.37-.67-.38-1.18-.75-1.18-.82-1.17-.83-1.12-.87-1.08-.9-1.07-.9-1-.91-1-.92-.8-.78-.14-.07-.43-.28-.27-.19-.36-.25-.35-.28-.52-.45-.68-.67-.6-.65-.55-.63-.54-.65-.53-.7-1-1.35-1-1.45-.89-1.28-1.88-2.59-1.25-1.73-1.23-1.72-1.07-1.55-.5-.75-.29-.59-.37-.66-.13-.27-.3-.68-.24-.72-.16-.73v-.07l-.1-.7v-1.4l.07-.68.13-.7.2-.67.25-.65.1-.21-.36-.7-1-1.9-.93-1.9-.45-1-.45-1-.42-1-.42-1-.4-1-.38-1-.37-1.05-.35-1.06-.36-1.22-.34-1.22-.3-1.2-.28-1.2-.27-1.16-.23-1.19-.43-2.26-.75-4.32-.39-2.05-.18-1-.2-.91-.3-1.37-.42-1.83-.18-1-.1-.63-.05-.44v-1.21l.05-.74.11-.73.19-.7.13-.38-.27-.4-.4-.75-.33-.74-.27-.73-.21-.7-.15-.68-.14-.67-.1-.72-.08-1.1v-1.15l.05-1.08.1-1.05.15-1 .18-1 .2-1 .24-.95.25-.92.26-.91.29-.9.3-.89.3-.88.61-1.63.62-1.57.62-1.43.56-1.32.54-1.15.8-1.65.36-.7.3-.55v-.07l.07-.51v-.15l.17-.77v-.17l.12-.4.15-.38.27-.7.45-1 .41-.75.39-.65.36-.58.54-.82.13-.48.22-.74.23-.73.27-.73.51-1.32.57-1.3.57-1.23.58-1.19.58-1.13.57-1.08.43-.82.57-1.27.78-1.66.25-.55.15-.47.44-1.27.48-1.25.53-1.21.55-1.19.59-1.16.6-1.15.63-1.14.63-1.11.65-1.09.67-1.06.67-1.05.68-1 .27-.4v-.08l.2-.38.12-.72.13-.7.17-.68.18-.67.2-.65.23-.63.25-.67.5-1.13.57-1.15.6-1.1.65-1 .67-1 .68-1 .73-1 .74-1 .75-.92.76-.9.77-.88.78-.85.79-.87 1.53-1.56 1.52-1.52 1.46-1.4 2.57-2.45 1.07-1 1.1-1.08 1.63-1.42 3-2.58 3.11-2.64 1.24-1 .91-.73.72-.48.63-.4 1.22-.72 1.3-.7.75-.38.73-.34.79-.33.58-.23.35-.25.72-.54.71-.48.72-.48.75-.47.75-.45.77-.43.78-.42.8-.38.83-.39.87-.33.88-.32.94-.28 1-.22 1-.18 1.08-.12h1.12l1.16.07.82.1.38.06.39.09.45.1.4.11.38.12.43.15.4.15.39.17.41.18.34.17 1-.17 1.07-.52v-.15l.1-.7.15-.68.2-.67.24-.58.28-.58.33-.54.37-.53.43-.5.45-.49.5-.43.52-.38.56-.35h.07l.58-.32.62-.25.62-.22.63-.16h.13l.69-.12.7-.06h1.6l.75.1 1 .18 1 .22.92.25 1.68.48 1.62.47.68.2.55.13.34.09h.16l.77.1.95.09 1.07.06 1.15.09 2.51.13 1.35.08 1.4.12 1.45.13 1.49.17 1.48.22.8.15.77.15.8.16.78.2.8.22.8.25.82.27.81.31.82.35.67.3.68.37.17.1.5.32.46.35.45.38v.05l.53.53.48.59.1.15h.6l.3-.27.62-.46.65-.4.7-.35.72-.29.75-.2.75-.15.78-.06h1.7zm-35.93 17-2.14.33-2.13.3-2 .29-1.89.25-1.68.2-1.43.15-1.19.11-.81.05-1.54.78-3.11 1.6-1.65.79h-.08l-.07.05-.73.41-.75.44-1.4.73-1.42.7-1.35.63-1.26.55-1.15.49-1 .4-1 .35-.62.18-.38.1-.38.08-.54.1-.73.12-1.32.17h-.25l-.6.12-.91.15h-.27l-1.38 1-1.49 1-1.4 1-1 .65-.65.58-1 .87-1 .83-.64.48-.4.69-.76 1.16-.77 1.15-.78 1.12-.79 1.08-.8 1.07-.8 1-.8 1-1.55 1.92-1.43 1.73-.28.35-.34.43-.76 1.07-.17.4-.32.77-.35.76-.66 1.44-.7 1.38-.7 1.35-.7 1.28-1.29 2.34-.55 1-.48.93-.38.79-.3.65-.2.51-.29.79-.73 2.11-.82 2.42-.45 1.27-.46 1.26-.49 1.25-.51 1.19-.35.7-.37.68-.45.75-.37.5-.28.37-.3.36-.17.19-.53.53-.58.5-.17.12-.48.35-.5.3-.54.26h-.06l-.4.16v.17l.12.57.16 1.33.1 1.18v3.4l.12.33.2.73.13.77.05.77v1.26l-.07.55-.1.55-.13.55v.09l-.2.63-.26.62-.3.58-.37.57-.2.26-.2 1-.45 1.88-.9 3.54-.42 1.68-.38 1.6-.33 1.57-.1.53.53.47.53.56.47.6.42.65.36.67.3.72.22.73.15.75.1.77v1.45l-.08.9-.14 1-.15.63-.08.38-.12.39-.1.26-.16.45-.19.45-.1.22-.28.55-.32.52-.11.18-.45.6-.49.57-.13.13-.43.42-.45.38-.49.35-.13.1-.58.35h-.07l.43 1.45.3.92.3.88.3.84.35.91.27.74.33.9.62 1.9.62 2 .28 1 .28 1 .24 1 .21 1 .2 1 .09.71v1.55l-.05.54v.13l-.1.62-.14.6-.05.16.77 1.44.9 1.63.93 1.63 1 1.67 2 3.38 1 1.7 1 1.74 1 1.76.87 1.59.05.08.13.2.25.32.7.86.44.59.5.7.16.23.57-.08h2.35l1.1.09 1.06.13 1 .15 1 .2 1 .23 1 .27 1 .28 1 .3 1 .32.95.33.95.35.94.39.93.38 1.78.77 1.75.8 1.69.81 1.63.8 1.55.79 2.83 1.43 1.25.63 2.07 1 .93.47 1.59.82.78.2.92.21.93.22.72.15h.18l1.82-.35 1.91-.37 1.94-.35 1.71-.28 1.19-.19 1.23-.15.8-.06h2l.5.07.27.05.68.13.67.2h.08l.72.29.66.33h.07l.52.3.23.17 2.5-.34 1.5-.2 1.53-.16 1.57-.17 1.62-.12 1.65-.06h1.46l2.6-1.2 1.9-.86.12-.05.39-.22.5-.31.65-.4 1.53-1 .87-.55.93-.57.95-.55.62-.3.6-.3.68-.28.78-.27.55-.15.39-.1.38-.08.25-.05.48.17.51-.05h.92l.7.05h.2l.6.08.6.15.57.17.18.06.52.2.65-.46 1.55-1.2 1.5-1.13 1.42-1.09 2.45-1.88.43-.35.45-.37 1.12-1 1.18-1.07.87-.82.25-.45.38-.6.45-.55.27-.31 1.88-1.87 1.64-1.6 3.21-3.12 1.55-1.51 1.14-1.15.35-.69.35-.65.38-.6.4-.61.73-1.05.8-1 .84-1 .85-1 .85-.94.86-.88.85-.83.35-.34v-.26l.1-.69.13-.75.17-.83.23-.9.27-1 .38-1.09.45-1.06.37-.7.38-.67.48-.72.37-.45.5-.56.17-.19.31-.31.35-.3.17-.15.42-.34.45-.3.18-.11.53-.3.1-.05.69-.81.76-1.12.34-.46-.07-.32-.07-.48v-1.57l.05-.5v-.32l.06-.48.1-.47.17-.71.32-1 .35-.85.35-.78.36-.72.39-.68.4-.7.75-1.22.8-1.18.8-1.12.73-1 .7-.9 1.05-1.32.42-.52.5-.56.55-.52.61-.47.64-.4.68-.35.7-.28.22-.07.41-.86.17-.35v-8.3l.05-.9.09-.92.05-.5.05-4.3v-13.1l-.05-.17-.24-.7-.35-1.28-.33-1.35-.28-1.38-.25-1.4-.24-1.42-.2-1.45-.18-1.47-.17-1.46-.15-1.47-.11-1.45-.12-1.45-.2-2.75-.13-2.57v-.11l-.37-.79-1-1.93-1-1.92-1.07-2-1.1-2-2.25-4-1.13-2-.37-.67-.51-.32-1.64-.91-1.65-.89-1.68-.86-1.73-.89-1.77-.86-3.63-1.8-1.87-.94-1.88-1-1.9-1-1.93-.94-1-.57-1-.56-1-.6-1-.62-.94-.63-.88-.64-.8-.61-.68-.59-.44-.38h-4.6l-2.48.05h-11.6l-1.57-.07-1.58-.08-1.6-.12-1.62-.15-1.61-.17-1.62-.21-1.63-.25-1.64-.3-1.61-.34-1.59-.38z" fill="#fff"/><path d="m318.07 198.68h2.53l1.27.05 1.26.07 1.27.08 1.25.1 1.27.12 1.25.15 1.25.15 1.23.17 1.25.18 1.23.22 1.24.21 1.21.25 1.22.25 1.2.32 1.2.3 1.2.33 1.2.33 1.18.37 1.18.37 1.17.4 1.17.43 1.15.43 1.13.47 1.13.48 1.12.52 1.17.57 1.1.55 1.08.59 1.08.6 1.07.61 1.05.65 1 .67 1 .7 1 .72 1 .75 1 .76 1 .8.94.82.91.83.9.87.89.9.86.92.84.95.81 1 .8 1 .77 1 .75 1 .72 1.07.7 1.08.68 1.12.63 1.15.64 1.16.58 1.19.57 1.21.53 1.24.52 1.25.46 1.28.45 1.3.44 1.32.38 1.35.37 1.36.31 1.39.3 1.41.32 1.65.27 1.69.25 1.68.2 1.7.16 1.7.12 1.7.1 1.72.07 1.71v5.2l-.07 1.74-.1 1.73-.13 1.75-.17 1.73-.25 1.73-.22 1.75-.25 1.74-.28 1.75-.3 1.73-.32 1.75-.36 1.73-.37 1.74-.42 1.73-.41 1.73-.47 1.74-.47 1.71-.51 1.72-.52 1.7-.55 1.7-.57 1.7-.6 1.68-.6 1.69-.63 1.66-.67 1.65-.66 1.65-.7 1.64-.7 1.63-.74 1.62-.75 1.6-.78 1.6-.78 1.56-.8 1.57-.84 1.55-.83 1.53-.8 1.55-.88 1.5-.89 1.47-.9 1.46-.91 1.45-.94 1.44-.95 1.4-1 1.4-1 1.36-1 1.34-1 1.33-1 1.3-1 1.28-1 1.25-1.07 1.24-1.06 1.2-1.09 1.18-1.1 1.15-1.21 1.15-1.08 1-1.17 1-1.2 1-1.25 1-1.3 1-1.32.9-1.35.87-1.38.83-1.4.8-1.44.77-1.46.75-1.49.71-1.5.7-1.5.65-1.53.65-1.53.6-1.55.57-1.57.55-1.55.52-1.57.48-1.56.45-1.55.42-1.55.38-1.55.35-1.55.32-1.52.28-1.52.23-1.51.2-1.49.17-1.48.12-1.45.06h-3.78l-2.4-.06-2.45-.12-2.49-.18-2.53-.22-2.57-.28-2.56-.34-1.35-.23-1.3-.2-1.31-.23-1.32-.24-1.33-.25-1.32-.25-1.33-.28-1.34-.3-1.31-.32-1.34-.33-1.33-.33-1.33-.37-1.32-.38-1.32-.4-1.33-.42-1.32-.43-1.3-.47-1.31-.47-1.3-.5-1.29-.51-1.28-.54-1.28-.55-1.27-.58-1.27-.6-1.25-.62-1.23-.65-1.23-.66-1.22-.69-1.2-.71-1.18-.74-1.17-.76-1.17-.79-1.13-.81-1.12-.84-1.1-.86-1.08-.9-1.07-.92-1-.95-1-1-1-1-1-1-.95-1.06-.9-1.1-.9-1.12-.85-1.15-.82-1.2-.78-1.2-.75-1.25-.72-1.27-.7-1.35-.57-1.18-.5-1.25-.46-1.28-.4-1.29-.35-1.3-.3-1.31-.27-1.34-.23-1.33-.19-1.37-.15-1.36-.11-1.39-.09-1.4-.06-1.41v-5.77l.08-1.47.09-1.48.11-1.48.14-1.49.15-1.5.18-1.5.18-1.51.22-1.52.22-1.52.25-1.5.25-1.51.26-1.52.29-1.53.6-3 .65-3 .68-2.95.73-2.91.75-2.87.77-2.8.78-2.72.82-2.65.8-2.55.82-2.43.8-2.33.8-2.22.8-2.08.76-1.95.77-1.82.75-1.65.65-1.38.28-.6.25-.57.25-.68.29-.77.28-.83.3-.9.62-2 .63-2.15.68-2.22.35-1.15.39-1.15.38-1.15.42-1.15.45-1.17.46-1.15.52-1.15.58-1.15.62-1.08.38-.63.4-.57.42-.58.45-.59.5-.58.55-.57.62-.56.66-.55.74-.54.83-.5.88-.45.62-.25.4-.14.35-.12.3-.08.38-.12.39-.08h.28l.4-.08.4-.05h2.88l.37.07.68.11.27.07.27-.17 1-.63 1-.62 1-.6 1-.58 1-.58 1-.57 1-.57 1-.53 1.07-.55 1.07-.52 1.08-.51 1.1-.5 1.1-.5 1.12-.49 1.13-.46 1.13-.45 1.14-.45 1.15-.44 1.16-.43 1.17-.42 1.18-.4 1.19-.38 1.24-.37 1.22-.37 2.4-.68 2.41-.65 1.25-.3 1.24-.3 1.23-.29 1.25-.26 1.23-.25 1.25-.24 1.27-.23 1.25-.22 1.27-.2 1.26-.18 1.25-.17 1.29-.16 1.26-.15 1.27-.12 1.27-.12 1.28-.1 1.27-.1 1.28-.06 1.27-.07h5.1zm-2.3 16.67h-2.15l-1.07.05-1.08.05-1.09.08-1.08.08-1.08.1-1.09.12-1.08.12-1.1.13-1.08.15-1.09.17-1.08.16-1.07.19-1.08.2-1.08.2-1.07.21-1.07.24-1.06.23-1.07.27-1 .25-2.12.56-2.08.6-1 .3-1 .34-1 .33-1 .33-1 .35-1 .37-1 .37-1 .38-1 .38-.95.4-.93.4-.93.42-.9.42-.92.43-.88.43-.89.45-.85.45-.85.45-.85.47-.81.47-.8.46-.8.49-.79.5-.75.48-.75.5-.71.5-.64.62-.7.5-.67.51-.66.52-.64.52-.61.53-.6.52-.59.53-.56.53-.6.59-.5.46-.55.42-.59.37-.61.31-.64.29-.65.21-.48.12-.58 1.93-.65 2.19-.69 2.18-.36 1.13-.37 1.1-.4 1.1-.43 1.1-.47 1.1-.45 1-.58 1.22-.57 1.28-.63 1.5-.67 1.67-.7 1.83-.72 2-.73 2.12-.75 2.23-.73 2.35-.75 2.44-.74 2.53-.71 2.58-.69 2.65-.66 2.69-.64 2.71-.6 2.74-.55 2.76-.25 1.35-.28 1.29-.21 1.37-.22 1.35-.2 1.35-.18 1.33-.17 1.33-.17 1.3-.13 1.3-.1 1.29-.1 1.25-.08 1.23v1.22l-.05 1.18v4.47l.06 1 .09 1 .11.95.12.9.15.87.15.82.18.75.19.7.21.65.2.6.22.51.25.52.4.8.47.8.48.8.5.78.53.77.55.75.59.73.6.74.63.7.65.7.68.7.7.66.72.67.75.65.78.63.79.62.81.62.84.6.86.58.89.57.88.56.92.54 1 .53 1 .52 1 .5 1 .5 1 .46 1 .47 1 .45 1 .43 1.05.42 1.06.4 1.09.4 1.08.38 1.1.37 1.1.35 1.12.33 1.11.32 1.14.32 1.13.28 1.13.28 1.14.27 1.13.27 1.15.23 1.15.23 1.13.22 1.15.2 1.14.18 1.13.19 1.12.15 2.28.3 2.23.25 2.2.18 2.17.15 2.12.12 2.06.05h3.85l1-.08 1.05-.12 1.09-.15 1.13-.16 1.17-.22 1.18-.25 1.22-.27 1.23-.3 1.25-.35 1.25-.35 1.27-.4 1.26-.41 1.27-.44 1.27-.46 1.25-.5 1.23-.52 1.22-.52 1.18-.56 1.17-.57 1.15-.58 1.1-.6 1.06-.6 1-.62 1-.63.93-.64.87-.61.82-.64.76-.63.69-.6.66-.63.87-.89.9-.95.9-1 .88-1 .89-1 .88-1.05.87-1.09.86-1.11.87-1.12.85-1.17.83-1.16.84-1.2.83-1.22.8-1.25.8-1.25.8-1.28.77-1.3.76-1.32.75-1.32.74-1.35.73-1.36.7-1.37.7-1.4.68-1.4.65-1.42.65-1.41.64-1.44.61-1.45.59-1.45.58-1.46.57-1.47.53-1.48.52-1.49.5-1.48.48-1.5.47-1.5.43-1.5.42-1.5.4-1.5.36-1.5.35-1.5.34-1.5.3-1.5.28-1.5.27-1.5.23-1.48.2-1.49.18-1.48.17-1.48.13-1.45.12-1.47.08-1.45.05-1.43v-5.66l-.08-1.37-.1-1.37-.14-1.35-.15-1.33-.18-1.32-.22-1.3-.23-1.28-.22-1-.25-1-.25-1-.26-1-.3-.92-.32-.9-.32-.88-.35-.87-.36-.83-.39-.82-.38-.78-.42-.79-.43-.75-.45-.73-.45-.73-.48-.7-.49-.69-.51-.66-.52-.65-.53-.64-.55-.63-.57-.6-.58-.6-.6-.57-.62-.56-.63-.55-.64-.54-.66-.51-.67-.52-.68-.48-.72-.49-.72-.46-.73-.45-.75-.44-.75-.43-.78-.4-.79-.4-.81-.38-.82-.39-.83-.35-.84-.35-.86-.33-.87-.32-.88-.3-.9-.28-.9-.28-.94-.25-.91-.25-.95-.24-.95-.23-.95-.2-1-.2-1-.17-1-.16-1-.15-1-.15-1-.12-1-.12-1-.08-1-.08-1-.09h-1.05l-1.05-.05h-4.4z"/><path d="m296.1 170.57 2 .05 2 .08 2 .13 2 .15 2 .19 1.95.2 1.95.23 1.92.25 1.91.27 1.92.26 3.75.59 7.4 1.21 3.67.59 1.78.26 1.9.29 1.53.25 1.22.21 1.38.27 1.55.32 1.69.36 1.78.42 1.82.45 1.81.48.94.29.9.28.9.28.9.32.88.35.88.37.9.4.9.46 1 .59.92.65.61.51h.17l1.25.12 1.25.13 1.23.15 1.22.19 1.22.21 1.18.24 1.18.25 1.17.26 1.15.3 1.13.34 1.14.33 1.1.38 1.1.39 1.08.41 1.07.44 1.05.45 1 .46 1 .5 1 .52 1 .53 1 .55 1 .59.93.58.94.62.9.63.9.63.86.67.87.68.85.7.82.7.81.74.8.73.79.77.75.76.75.79.73.8.72.8.7.83.68.83.67.85.65.85.63.87.62.88.6.89.6.9.56.91.57.92.55.93.52.94.51.93.5 1 .5.95.47 1 .47 1 .43 1 .43 1 .42 1 .42 1 .38 1 .38 1 .37 1 .35 1.05.67 2 .61 2.09.57 2.11.52 2.12.48 2.13.42 2.15.38 2.15.33 2.17.3 2.18.24 2.17.21 2.18.17 2.19.12 2.2.06 2.18.05 2.18v2.17l-.05 2.18-.08 2.17-.12 2.15-.15 2.15-.2 2.13-.23 2.12-.27 2.1-.3 2.08-.35 2.07-.36 2.05-.42 2-.45 2-.48 2-.52 2-.55 1.9-.53 1.68-.54 1.68-.55 1.67-.58 1.65-.6 1.67-.62 1.65-.65 1.63-.65 1.65-.68 1.63-.7 1.62-.73 1.62-.74 1.61-.88 1.62-.79 1.58-.8 1.6-.81 1.59-.84 1.56-.85 1.57-.86 1.57-.9 1.55-.92 1.53-.92 1.53-.95 1.52-1 1.5-1 1.5-1 1.5-1 1.48-1 1.47-1 1.45-1.05 1.45-1.08 1.43-1.1 1.42-1.13 1.4-1.12 1.4-1.15 1.38-1.15 1.37-1.16 1.35-1.2 1.33-1.2 1.33-1.22 1.34-1.23 1.3-1.24 1.28-1.26 1.27-1.27 1.27-1.3 1.23-1.3 1.23-1.3 1.2-1.33 1.2-1.35 1.17-1.35 1.15-1.37 1.15-1.37 1.12-1.4 1.11-1.4 1.09-1.41 1.06-1.44 1.05-1.43 1-1.45 1-1.47 1-1.48 1-1.48.95-1.5.94-1.5.91-1.52.89-1.53.86-1.54.85-1.55.82-1.56.8-1.57.78-1.58.75-1.59.74-1.6.71-1.61.69-1.62.66-1.63.64-1.64.6-1.63.58-1.65.57-1.67.53-1.66.5-1.69.48-1.68.45-1.65.42-1.7.38-1.7.38-1.72.34-1.72.31-1.71.29-1.74.25-1.73.21-1.75.2-1.75.15-1.75.14-1.75.1-1.77.06h-5.3l-1.78-.07-1.77-.1-1.78-.13-1.78-.17-1.79-.2-1.81-.14-1.8-.27-1.78-.3-1.79-.33-1.8-.38-1.78-.4-1.8-.45-1.78-.49-1.79-.51-1.78-.55-1.8-.6-1.78-.64-1.77-.66-1.78-.7-1.79-.75-1.76-.79-1.77-.81-1.77-.87-1.76-.88-1.75-.95-1.77-1-1.75-1-1.73-1.05-1.74-1.1-1.75-1.13-1.7-1.17-1.66-1.2-1.62-1.23-1.58-1.25-1.54-1.3-1.5-1.32-1.45-1.35-1.41-1.38-1.39-1.4-1.31-1.43-1.3-1.45-1.25-1.49-1.2-1.51-1.17-1.52-1.13-1.57-1.09-1.56-1-1.6-1-1.62-.95-1.63-.93-1.65-.88-1.69-.85-1.68-.8-1.72-.77-1.71-.73-1.74-.69-1.75-.65-1.78-.61-1.77-.59-1.8-.53-1.8-.5-1.81-.47-1.84-.43-1.83-.4-1.85-.37-1.85-.33-1.87-.28-1.88-.27-1.88-.23-1.89-.19-1.88-.16-1.9-.14-1.92-.08-1.9-.07-1.91v-5.77l.06-1.93.09-1.92.11-1.93.14-1.94.18-1.93.2-1.93.23-1.94.27-1.93.28-1.93.32-1.92.33-1.93.39-1.94.38-1.91.43-1.92.45-1.92.47-1.9.5-1.9.52-1.9.55-1.9.58-1.88.6-1.88.62-1.89.65-1.86.66-1.85.7-1.85.72-1.85.73-1.82.77-1.83.78-1.8.82-1.82.82-1.78.86-1.79.87-1.76.9-1.75.92-1.74.93-1.73 1-1.72 1-1.7 1-1.68 1-1.67 1-1.65 1.07-1.63 1.07-1.62 1.1-1.6 1.11-1.58 1.14-1.58 1.16-1.54 1.09-1.57 1.18-1.52 1.22-1.48 1.22-1.47 1.25-1.45 1.26-1.41 1.29-1.4 1.3-1.39 1.31-1.36 1.34-1.34 1.35-1.3 1.35-1.28 1.38-1.27 1.4-1.23 1.42-1.2 1.43-1.18 1.45-1.15 1.47-1.12 1.48-1.1 1.48-1.07 1.52-1 1.53-1 1.54-1 1.56-.94 1.57-.91 1.58-.89 1.6-.83 1.62-.82 1.63-.76 1.64-.74 1.65-.7 1.68-.66 1.68-.64 1.67-.58 1.08-.35 1.07-.32 1.07-.31 1.05-.29 1.06-.26 1.07-.25 1.05-.24 1.05-.21 1.07-.2 1.05-.19 1.05-.16 1-.14 1-.15 1.05-.11 1-.1 1.07-.09 2-.15 2-.08h2.05zm-3.55 16.7-1.65.06-1.67.12-.8.07-.81.08-.82.08-.8.1-.82.12-.8.13-.81.14-.8.16-.8.15-.82.19-.8.18-.8.22-.8.21-.8.22-.8.25-.8.27-1.35.46-1.32.49-1.33.53-1.32.55-1.31.6-1.32.62-1.3.65-1.3.68-1.3.72-1.28.75-1.29.78-1.26.8-1.27.83-1.27.87-1.25.88-1.23.92-1.23.95-1.24 1-1.2 1-1.21 1-1.19 1.05-1.18 1.08-1.18 1.1-1.17 1.14-1.15 1.15-1.13 1.16-1.14 1.2-1.1 1.22-1.11 1.25-1.09 1.27-1.06 1.28-1.07 1.3-1 1.33-1 1.35-1 1.37-1 1.38-1 1.4-1 1.42-.95 1.43-.93 1.47-.93 1.47-.9 1.48-.9 1.5-.87 1.52-.85 1.51-.83 1.55-.82 1.55-.8 1.57-.78 1.58-.77 1.59-.73 1.6-.74 1.61-.7 1.62-.68 1.63-.67 1.64-.63 1.65-.62 1.65-.6 1.66-.58 1.67-.55 1.67-.53 1.68-.52 1.68-.48 1.69-.47 1.68-.45 1.7-.42 1.7-.5 1.7-.38 1.7-.35 1.7-.32 1.7-.3 1.7-.28 1.7-.25 1.7-.23 1.68-.2 1.7-.19 1.69-.15 1.7-.13 1.68-.1 1.67-.07 1.68-.05 1.67v4.96l.07 1.64.08 1.63.1 1.62.15 1.61.15 1.62.2 1.58.22 1.59.25 1.56.27 1.57.3 1.55.33 1.53.37 1.52.38 1.52.42 1.48.43 1.48.48 1.47.5 1.45.54 1.43.55 1.44.58 1.4.62 1.38.65 1.37.68 1.35.7 1.35.73 1.31.77 1.3.8 1.29.82 1.26.86 1.24.89 1.23.93 1.2 1 1.2 1 1.17 1 1.15 1 1.13 1.08 1.1 1.14 1.1 1.15 1.07 1.18 1.05 1.22 1 1.26 1 1.3 1 1.34 1 1.38.93 1.48 1 1.49.95 1.48.88 1.5.87 1.48.83 1.49.8 1.48.75 1.5.74 1.48.68 1.49.65 1.48.63 1.5.59 1.48.56 1.49.52 1.48.5 1.48.45 1.49.43 1.48.4 1.47.37 1.48.35 1.48.3 1.47.28 1.48.25 1.47.22 1.48.2 1.47.15 1.47.15 1.46.1 1.47.08 1.47.05h4.38l1.47-.05 1.45-.09 1.45-.1 1.45-.13 1.45-.17 1.45-.18 1.45-.22 1.43-.23 1.43-.25 1.45-.3 1.44-.3 1.41-.33 1.44-.37 1.41-.38 1.42-.4 1.42-.44 1.41-.45 1.4-.46 1.4-.5 1.4-.54 1.39-.53 1.38-.57 1.38-.58 1.39-.62 1.36-.63 1.37-.65 1.43-.76 1.35-.7 1.35-.71 1.33-.74 1.34-.75 1.33-.78 1.32-.8 1.3-.8 1.3-.83 1.3-.87 1.28-.87 1.28-.88 1.27-.92 1.25-.91 1.25-1 1.25-.95 1.23-1 1.22-1 1.22-1 1.2-1 1.18-1.05 1.18-1.05 1.17-1.08 1.17-1.09 1.15-1.1 1.13-1.13 1.12-1.13 1.11-1.15 1.1-1.15 1.09-1.19 1.08-1.18 1.07-1.2 1.05-1.22 1-1.23 1-1.23 1-1.25 1-1.27 1-1.27 1-1.28 1-1.3.94-1.32.91-1.3.92-1.33.88-1.33.89-1.35.86-1.35.85-1.37.82-1.37.82-1.36.8-1.4.78-1.39.77-1.4.75-1.4.73-1.41.7-1.42.7-1.43.68-1.44.65-1.43.65-1.43.62-1.45.62-1.45.58-1.45.57-1.47.55-1.47.53-1.45.5-1.46.5-1.49.47-1.46.45-1.45.46-1.62.44-1.62.4-1.66.38-1.69.35-1.71.32-1.74.3-1.76.25-1.79.23-1.8.2-1.81.17-1.84.13-1.85.1-1.85.08-1.86v-5.62l-.06-1.88-.1-1.87-.15-1.87-.17-1.86-.22-1.85-.25-1.84-.32-1.72-.32-1.82-.35-1.8-.4-1.77-.41-1.75-.52-1.76-.5-1.7-.55-1.7-.28-.8-.29-.82-.31-.8-.3-.81-.32-.79-.33-.78-.35-.78-.34-.77-.36-.75-.37-.75-.37-.75-.38-.72-.4-.71-.4-.72-.4-.7-.42-.68-.43-.69-.43-.66-.45-.65-.45-.64-.47-.63-.47-.63-.48-.6-.48-.6-.5-.59-.52-.56-.52-.57-.51-.55-.54-.53-.53-.54-.55-.51-.57-.5-.56-.49-.59-.48-.58-.45-.6-.45-.6-.45-.62-.42-.61-.41-.65-.4-.64-.39-.66-.38-.67-.35-.68-.35-.69-.33-.7-.34-.71-.3-.72-.3-.75-.28-.75-.27-.75-.25-.78-.23-.79-.23-.81-.2-.82-.2-.83-.19-.85-.15-.85-.15-.89-.13-.9-.12-.9-.1-.93-.08-.93-.07h-3.83l-.8-.12-.8-.21-.77-.29-.73-.35-.7-.43-.65-.48-.6-.55-.55-.62-.48-.67-.35-.61-.58-.2-.65-.19-.65-.2-1.49-.4-1.51-.38-1.48-.48-1.48-.32-1.37-.28-1.22-.23-1-.17-1.25-.22-1.8-.26-1.9-.29-3.73-.6-7.37-1.2-3.61-.56-1.79-.25-1.76-.25-1.77-.24-1.75-.2-1.75-.18-1.72-.17-1.71-.13-1.72-.1-1.68-.07-1.69-.05h-1.66zm393.75-86.22 1.53.08 1.54.14 1.55.16 1.55.24.75.15.75.15.73.18.75.2.72.22.71.23.72.25.7.27.68.28.69.3.68.32.7.35 1.28.68 1.27.77 1.23.81 1.22.85 1.18.92 1.14 1 1.11 1 1.09 1 1 1.05 1 1.1 1 1.13 1 1.17.94 1.18.9 1.23.86 1.24.85 1.28.82 1.28.78 1.32.75 1.35.72 1.35.68 1.38.67 1.39.62 1.41.6 1.44.56 1.43.52 1.45.5 1.47.45 1.46.42 1.49.38 1.5.35 1.5.3 1.5.27 1.5.23 1.51.18 1.52.14 1.52.1 1.51.05 1.52v1.52l-.05 1.5-.1 1.51-.15 1.5-.22 1.5-.27 1.49-.31 1.43-.2.78-.22.74-.22.73-.23.72-.25.71-.28.72-.29.72-.31.7-.32.7-.35.7-.37.68-.38.68-.4.67-.42.67-.45.65-.45.63-.48.63-.5.62-.52.6-.53.6-.57.58-.56.57-.6.55-.62.53-.63.52-.65.52-.92.65-.92.63-.93.58-.95.57-1 .53-1 .5-1 .45-1 .45-1 .4-1 .37-1 .35-1 .33-1 .29-1 .28-1 .23-1 .24-1 .2-1 .16-1 .17-1 .13-1 .12-1 .1-1 .08-1 .09-1.93.08-2 .05h-1.66l-1.92-.05-1.91-.08-1.89-.1-1.88-.14-1.85-.15-3.62-.33-3.51-.35-3.4-.32-1.64-.15-1.6-.13-1.55-.1-1.5-.08h-3.45l-.48-.05-.5-.08-.48-.1-.47-.13-.47-.17-.45-.18-.45-.22-.43-.25-.42-.27-.4-.3-.36-.31-.37-.34-.33-.36-.22-.24-.17.07-.46.15-.49.13-.48.1-.48.07h-1.97l-.48-.08-.49-.1-.48-.13-.47-.17-.45-.18-.45-.22-.43-.25-.42-.27-.43-.28-.62-.5-.56-.52-.54-.53-.46-.53-.49-.6-.66-1-.59-1.05-.5-1-.4-1-.35-1-.28-1-.23-1-.22-1-.17-1-.15-1-.13-.95-.1-.93-.08-1-.14-1.8-.08-1.8v-10.7l.06-1.3.12-1.3.15-1.3.17-1.28.2-1.28.23-1.29.27-1.28.28-1.28.32-1.27.35-1.27.38-1.25.4-1.25.43-1.25.47-1.23.48-1.22.52-1.21.53-1.22.59-1.18.6-1.19.61-1.16.65-1.15.69-1.15.7-1.12.73-1.12.75-1.1.78-1.06.82-1.07.83-1 .87-1 .88-1 .92-1 1-1 1-.94 1-.9 1-.88 1-.87 1.07-.81 1.1-.8 1.12-.77 1.15-.73 1.18-.7 1.2-.69 1.22-.63 1.25-.6 1.26-.57 1.3-.51 1.32-.49 1.33-.45 1.37-.4 1.38-.35 1.4-.31 1.42-.27 1.43-.22 1.45-.18 1.49-.12 1.48-.08h1.5zm-2.43 16.67h-.94l-.9.06-.9.12-.86.13-.87.17-.87.18-.83.22-.83.25-.82.27-.82.3-.8.31-.78.35-.78.39-.77.4-.75.41-.75.45-.73.47-.72.5-.72.52-.7.53-.68.57-.68.58-.67.6-.65.63-.63.64-.62.66-.62.69-.6.71-.58.72-.57.73-.53.75-.53.79-.52.78-.5.8-.48.8-.47.83-.45.84-.43.85-.4.85-.4.86-.37.89-.35.88-.33.88-.32.9-.28.9-.29.9-.25.92-.21.9-.22.92-.18.91-.17.9-.13.92-.14.9-.1.9-.06.9-.07.9v9.35l.06 1.4.09 1.4.06.62.07.63.08.59.09.55.08.51.1.45.1.4.1.32v.07l.23.21.33.35.24.29.2-.09.46-.15.49-.13.48-.1.5-.07h2.65l1.78.05 1.79.1 1.78.11 1.77.14 1.78.16 3.5.34 3.48.35 3.46.3 1.69.14 1.66.11 1.65.1 1.64.07h4.68l1.53-.07h.7l.72-.06.72-.09.7-.08.7-.08.66-.12.67-.12.65-.13.65-.15.63-.15.62-.17.6-.18.6-.18.58-.22.59-.22.55-.23.55-.23.55-.27.51-.27.54-.28.5-.32.51-.31.49-.34.5-.36.26-.2.25-.2.25-.22.24-.22.21-.23.24-.22.2-.23.21-.25.2-.25.2-.25.19-.27.21-.25.18-.27.17-.28.17-.3.16-.3.15-.32.15-.31.15-.34.14-.33.13-.35.12-.35.11-.37.12-.38.12-.37.08-.35.18-.85.15-.85.14-.86.08-.9.07-.92v-3l-.07-1-.08-1-.14-1.05-.16-1.07-.19-1.07-.21-1.08-.25-1.08-.29-1.1-.31-1.09-.34-1.1-.36-1.08-.39-1.08-.43-1.09-.43-1.06-.52-1.05-.5-1.05-.52-1-.53-1-.55-1-.58-1-.6-.94-.6-.93-.64-.88-.63-.87-.65-.83-.67-.82-.68-.77-.67-.73-.7-.68-.68-.67-.68-.62-.7-.56-.69-.54-.7-.48-.68-.45-.67-.4-.7-.38-.28-.14-.33-.16-.32-.14-.32-.13-.31-.12-.3-.11-.32-.1-.3-.09-.3-.08-.3-.07-.28-.06h-.29l-1-.15-1-.12-1-.08h-2zm-30.65 50.76h-.05z"/></g></svg>
assets/img/no-products.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg viewBox="0 0 923.65 1082.82" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd"><path d="m296.42 899.72h6.81l3.44.07 3.45.1h.2l.18-.1 1.48-.68 1.49-.63 1.53-.48 1.5-.5 1.5-.5 1.5-.43 1.52-.37 1.51-.35 1.52-.31 1.53-.27 1.54-.25 1.55-.23 1.53-.19 1.57-.18 1.55-.15 1.56-.12 1.57-.11 1.55-.04 1.59-.08h7.93l3.18.05 3.19.09 3.11-.06 3.15.17 3.12.18 3.07.2 3.05.22 5.83.47 5.57.46 5.15.42 2.38.18 2.23.15 2.09.14 1.88.1h11.98l8.87-.07 8.87-.12 8.86-.15 8.9-.18 8.89-.2 17.85-.45 16.88-.42 1-.08 2-.13 2.58-.15 3.05-.15 3.39-.14h11.56l2 .08h3.55l.15-.15 1.22-1 1.06-.73.95-.57 1-.53 1.24-.55 1.23-.45 1.12-.35 1.05-.27 1-.22 1-.18.93-.15 1-.15 1.75-.2 1.86-.15 1.9-.12 2-.08h12.53l4.3.13 4.27.17 4.11.2 3.85.2 3.52.21 5.53.34 1.77.1h1l3 .08 3.15.13 3.13.14 3.12.16 6.15.35 6.08.39 6 .38 6 .37 3 .15h.18l1.45-.05 6.08-.2 6.09-.2 6.1-.16 6.11-.15 6.14-.14 6.13-.1 6.15-.05h6.62l3-.2 2-.12 2.25-.08 2.41-.07h5.4l1.4.05 1.44.08 1.45.1 1.46.13 1.49.19 1.5.21 1.53.27 1.57.33 1.5.39.9.26.83.29.87.3.86.33.89.4.91.43.94.5 1 .57 1 .65 1.2.9.57.52.93-.2 1.92-.39 1.91-.35 2-.35 2-.31 2.05-.27 2-.23 1.1-.1 1.08-.07 1.08-.07h4.47l1.15.05 1.17.08 1.16.12 1.19.13 1.2.19 1.2.21 1.21.27 1.22.3 1.23.35 1.24.4 1.23.45 1.23.52 1.24.55 1.21.61 1.2.67 1.19.73 1.16.79 1.14.83 1.11.9 1.07.95 1.1 1.05.8.83.85 1.05.87 1.24.85 1.5.76 1.75.6 2 .35 2.28v2.43l-.37 2.45-.7 2.29-1 2-1.1 1.72-1.15 1.4-1.13 1.13-1.08.9-1.19.85-1.6.94-1.58.73-1.38.53-1.27.4-1.17.34-1.1.25-1.06.21-1 .19-1 .16-1 .15-1.85.24-1.82.18-1.72.17-3 .25-1.14.11-.91.1-3.54.45-3.53.42-3.42.38-3.33.35-3.27.32-3.2.3-3.18.25-3.17.23-3.16.2-3.19.19-3.23.16-3.3.14-3.37.13-3.48.1-3.6.1-3.68.08h-2.15l-2.44.14-2.6.15-2.81.2-3 .25-3.15.26-6.75.6-7.19.64-3.75.31-3.81.32-3.89.28-3.91.29-4 .25-4 .2-4 .16-2 .09-2 .05h-12l-2-.07-2-.08-1.95-.1-1.93-.14-1.93-.15-1.92-.18-1.92-.22-1.88-.23-1.88-.27-1.87-.3-1.85-.33-1.4-.28h-4.05l-2.72.12-2.71.1-5.29.17-10.11.3-4.79.16-2.28.1-2.27.12-8.5.43-8.56.42-8.59.4-3.13.13.4.05 1.27.24 1.41.33 1.5.48 1.17.49 1.2.58 1.4.87 1.62 1.26 1.8 1.9.81 1.29.82 1.5.63 1.6v.1l.48 1.83.23 1.88v1.95l-.25 1.84-.35 1.66-1.21 2.74-1.34 2-1.26 1.4-1.12 1-1 .77-.88.61-.77.45-.88.5-.87.45-1.56.79-1.64.71-1.63.67-1.64.83-1.64.52-1.6.47-1.61.41-1.59.37-1.58.32-1.55.26-1.55.24-1.52.21-1.5.17-1.48.15-1.47.13-1.43.1-1.45.09-2.75.15-2.68.1-2.59.1-2.48.1-2.42.11-1.1.07-1.11.08-1.07.09-1.13.11-4.15.44-4.24.41-4.23.4-4.22.37-4.23.37-4.22.31-4.23.32-4.22.28-4.21.29-4.22.23-4.22.23-4.21.2-4.24.19-4.21.16-4.22.15-4.22.12-4.21.18-4.22.08-4.22.07h-21.11l-4.22-.05-4.23-.1-4.24-.1-4-.1-.76.16-4.19 1-4.2.9-4.18.85-4.2.84-4.2.78-4.2.75-4.22.72-4.2.68-4.21.65-4.22.6-4.22.58-4.21.55-4.22.54-4.22.48-4.21.47-4.22.45-4.22.4-4.23.38-4.22.37-4.21.33-4.22.32-4.22.3-4.21.26-4.22.25-4.22.24-4.2.2-4.21.2-4.2.18-2.3.08-2.54.44-2.56.41-2.57.4-2.58.4-2.59.37-2.58.37-2.58.33-2.59.33-2.54.32-2.67.32-3 .4-3.25.43-3.45.45-3.61.44-1.9.21-1.9.19-2 .18-2 .17h-.47l-.63.19-1.07.26-1.08.24-1.08.2-1.09.16-1.08.14-1.08.1-1.1.06h-3.3l-1.12-.06-1.13-.1-1.14-.15-1.13-.2-1.17-.24-1.16-.3-1.17-.35-.52-.16-1-.13-1-.15h-.07l-2.38.18-2.4.15-2.42.1h-6.1l-1.21-.05h-1.24l-1.23-.08-1.23-.1-1.24-.12-1.23-.13-1.23-.17-1.24-.18-1.23-.22-1.23-.23-1.24-.27-1.23-.28-1.23-.34-1.24-.35-1.23-.4-1.22-.43-1.23-.47-1.22-.5-1.2-.56-1.21-.59-1.19-.65-1.18-.7-1.37-.86-1.48-1.12-2-2-.94-1.47-.78-1.43-.6-1.5-.45-1.3-.45-2.91.17-2.9.7-2.71 1.1-2.3 1.48-2.14 2-2 2-1.33 1.55-.77 1.25-.5 1-.33 1-.27 1.45-.32 1.43-.23 1.33-.18 1.27-.14 1.22-.11 1.16-.09 2-.13 1.5-.1 3.81-.25 3.84-.28 2.86-.22.92-.92 1.95-1.36 2.15-1 2.3-.63 2.37-.24h2.68l.63-.47.94-.67 1-.63 1-.6 1-.58 1-.55 1-.54 1-.5 1-.5 1-.46 1.05-.45 1.07-.44 1.07-.41 1.08-.4 1.1-.37 1.12-.37 1.11-.33 1.12-.32 1.13-.3 1.15-.28 1.15-.25 1.17-.23 1.18-.2 1.17-.2 1.2-.15 1.2-.14.55-.05-.37-.08-1.16-.28-1.15-.32-1.17-.32-1.15-.35-1.15-.36-1.15-.4-1.15-.42-1.23-.47-.95-.41-1.54-.79-.91-.66-1.87-1.55-1.57-1.85-1.11-1.9-.87-2-.55-2.1-.21-2.17-9.42 3.27-3.75 1.3-2.12.7-4.6 1.38-4.61 1.37-4.79 1.37-2.5.7-2.5.68-2.55.68-2.58.67-2.63.65-2.64.63-2.68.62-2.7.6-2.72.57-2.73.55-2.77.51-2.76.49-2.79.43-2.8.4-2.81.37-2.8.31-2.79.25h-.16l-1.29.08-1.41.07-1.42.07-1.42.05h-7.06l-1.4-.07-1.42-.06-1.4-.1-1.4-.17-1.4-.13-1.4-.15-1.4-.19-1.4-.2-2.08-.33-1.83-.5-1.49-.6-1-.46-1-.47-1.69-.88-1.73-1-1.73-1-1.34-.84-1.41-.16-1.2-.12h-4.95l-1.77-.08-1.77-.09-1.76-.13-1.75-.13-1.75-.17-1.74-.2-1.76-.27-1.73-.25-1.72-.29-1.72-.31-1.7-.37-1.68-.38-1.68-.44-1.67-.46-1.67-.5-1.63-.57-1.63-.6-1.64-.65-1.6-.7-1.58-.8-1.57-.81-1.75-1-1.45-1-2.06-1.87-1-1.4-1.17-2.08-.85-2.27v-.08l-.42-2-.13-2 .17-2v-.17l.4-1.86.65-1.79.89-1.68.05-.08 1.18-1.65 1.38-1.47 1.07-1 2-1.25 1.48-.68 1.32-.48 1.51-.42 1.34-.27 1.15-.16 1-.12 1-.1h.94l1-.05h3.35l3.08.22 2.69.2 2.38.22 2.15.23 1.95.23 1.78.24 1.65.23 1.52.23 2.88.45 1.45.22 1.57.23 1.72.22 2 .23 2.25.25h.6l.13-.56.58-1.32.85-1.65 1.05-1.52.1-.11 1.14-1.38 1.47-1.23 1.2-.89 2.18-1.06 1.7-.59 1.35-.33 1.12-.18 1.06-.15 1.49-.1h3.96l2.12.1 1.75.1h30.46l1.85.05 1.89.09 1.93.11 2 .15 2 .19 2.1.23 2.15.28 2 .3.86.14 1 .11 3 .29 4.48-.09 6-.15 6-.16 6-.22 6-.23h.95l-.28-.63-.6-2-.3-2.08v-2.58l.48-2.53.9-2.42 1.32-2.22 1.66-2 2-1.65 1.85-1.08 2-.82 2.07-.52 2.13-.21 1.47-.05 2 .3 1.05.23 1.21.32 1.24.36 2.56.79 2.87.86 1.42.42 1.35.4 1.21.33 1 .25.77.17h.16l1.69.22 1.76.18 1.8.17 1.82.15 1.85.12 1.87.1 1.9.08 1.68.07h51.2l.83-.08 1.09-.05h4.66l1.54.05 1.23.07 1.07.06 2.51.4 2.42.8 2.23 1.2 2 1.59 1.7 1.88 1.37 2.15.13.33h10.04zm-87.32 57.86h.17-.34z" fill="#808080"/><path d="m419.77 413.53 1.43.19 1.37.26 1.3.35 1.4.44 1.45.58 1.53.77 1.45.93 1.35 1 1.22 1.14 1.08 1.21.93 1.24.79 1.25.65 1.23.53 1.22.43 1.18.34 1.13.25 1.1.2 1.07.13 1 .08 1v1.98l-.09 1.6-.2 1.67-.26 1.58-.37 1.52-.42 1.48-.48 1.44-.55 1.41-.5 1.17-.1.22-.68 1.36-.75 1.34-.82 1.31-.9 1.32-1 1.28-1 1.19-.67.71-.63.64-.69.61-.71.62-.79.6-.81.6-.89.57-.95.55-1 .51-1.09.47-1.15.43-1.23.37-1.3.28-1.35.2-1.42.1h-1.43l-1.45-.13-1.38-.23-1.22-.3-1.15-.37-1.13-.45-1.12-.47-1.07-.6-1-.69-.93-.71-.9-.8-.82-.83-.75-.87-.67-.88-.6-.9-.51-.92-.55-1.07-.64-1.61-.51-1.74-.32-1.7-.17-1.61v-1.57l.09-1.52.16-1.46.09-.39.21-1 .4-1.38.5-1.35.25-.59v-1.81l.05-1 .12-1 .15-1 .2-1 .26-1 .32-1.07.27-.77.11-.31.49-1.1.56-1.1.67-1.12.75-1.1.87-1.12 1-1.06 1.08-1 1.22-1 1.32-.9 1.41-.8 1.49-.68 1.53-.55 1.57-.42 1.58-.28 1.57-.14h1.51zm3.38 29.8-.28.15 1.18-.61v-.22.22l.05-.64v-.48l.05.52-.09-1.07.09.5-.19-1.15.12.47-.27-1-6.35 4.41h1.14-.35l1.18-.08-.35.05 1.23-.17-.31.07 1.25-.29-.32.1 1.27-.4-.3.12zm.65-.3.25-.15zm.05-3.08.1.3zm-6.33-15.72h-.75l.48.15.9.3.58.26 1.52 2.19 5.55.13-.37-.33.19.16-1.05-.8.2.17-1.2-.75.21.13-1.31-.65.21.1-1.45-.55.24.1-1.54-.41.25.06-1.58-.26.25.05-1.6-.1z" fill="#fff"/><path d="m463.47 357.9 1.9.33 1.83.57 1.73.83h.09l1.45.93 1.33 1.1 1.2 1.34 1 1.23 1.22 2.27.55 1.45.37 1.2.28 1 .25 1 .25 1.06.45 2.12.43 2.35.44 2.55.43 2.75.42 2.93.25 1.94.43.71.73 1.45.64 1.5.48 1.4.4 1.34.33 1.31.3 1.3.25 1.3.22 1.3.2 1.34.17 1.36.15 1.39.15 1.41.11 1.44.1 1.46.1 1.5.07 1.54.07 1.55.05 1.58v6.53l-.05 3.39-.1 3.41-.15 3.44-.2 3.41-.13 1.75-.13 1.72-.14 1.72-.16 1.7-.17 1.68-.2 1.67-.2 1.66-.22 1.64-.21 1.61-.07.35-.08 1.12-.17 1.6-.18 1.58-.22 1.55-.12.79.42.8.45 1.05.42 1.1.35 1.16.26 1.2.2 1.24.14 1.25v2.51l-.12 1.24-.18 1.21-.07.3-.23.85-.39 1.12-.51 1.23-.87 1.72-.98 1.67-1.13 1.49-1.15 1.26-1.15 1.12-1.16 1-1.14.87-1.13.78-1.12.69-1.11.63-1.1.57-1.1.53-1.09.48-1.1.45-1.08.42-1.1.38-1.1.37-1.1.33-1.12.32-1.11.3-1.12.28-1.12.27-1.13.23-1.12.24-1.15.2-1.13.18-1.13.18-1.15.17-1.14.13-1.15.14-1.13.11-1.15.09-1.15.08-1.13.07-1.14.05h-5.65l-1.13-.07-1.12-.08-1.13-.12-1.12-.14-1.13-.17-1.13-.18-1.15-.24-1.15-.26-1.19-.32-1.2-.37-1.25-.46-1.27-.52-1.53-.71-1.58-.94-1.7-1.31-1.52-1.52-4.93 1.55-2.69.83-2.71.85-2.77.82-2.8.82-2.82.8-2.83.75-2.83.7-1.45.35-1.44.33-1.43.3-1.43.3-1.44.27-1.45.26-1.43.24-1.43.21-1.45.2-1.44.17-1.45.15-1.45.12-1.45.08h-4.38l-1.48-.06-1.49-.12-1.5-.17h-.28l-1.23-.17-1.52-.28-1.55-.35-1.53-.43-1.57-.5-1.45-.59-.88-.38-1.3-.62-2.1-1.31-1.19-1.12-1.11-1.25-1-1.35-.93-1.45-1.07-3-.4-2.71v-2.27l.28-1.82.43-1.7.72-1.85.8-1.55.15-.21-.32-.32-1.41-2.07-1.05-2.2-.64-2.18-.28-2-.05-1.8.13-1.58.24-1.37.3-1.18.33-1.05.35-.93.37-.84.4-.86.48-.89v-.06l-.72-1-.66-1.08-.59-1.17-.5-1.2-.4-1.23-.3-1.25-.21-1.24-.12-1.21v-1.19l.06-1.35.24-1.86.46-1.89.59-1.65.65-1.46.7-1.3.71-1.19.74-1.06.73-1 .77-.91.75-.87.76-.83.79-.79.8-.76.78-.75.82-.72.81-.7.84-.7.88-.7 1.67-1.3 1.73-1.28 1.78-1.27 1.79-1.23 1.8-1.2 1.8-1.15 1.78-1.14 1.77-1.08 1.71-1.05 1.7-1 3.12-1.81 2.8-1.6 2.32-1.3 1.68-.94.92-.53 1.65-1 .23-.14 2.55-1.48 1.45-.82 1.5-.81 1.55-.8 1.58-.79 1.59-.73.95-.38.56-.22 2.44-2 2.66-2.07 2.42-1.85 2.1-1.36 2.32-1 1.8-.42 1.36-.83 1.39-.82 1.4-.78 1.4-.77 1.4-.73 1.41-.7 1.42-.7 1.42-.67 1.41-.63 1.42-.63 1.42-.6 1.4-.59 1.41-.58 2.72-1.05 2.7-1 2.62-.92 2.51-.85 2.4-.76 2.29-.7 2.11-.64.43-1.07.65-1.33 1.18-1.85.94-1 1.6-1.48 1.8-1.24h.08l2.12-1 2.26-.65 2.35-.25h.07z" fill="#808080"/><path d="m69 892.63 12.82.17 6.5.07h19.62l3.25-.06 3.25-.09 3.23-.11 3.22-.14 3.2-.16 3.16-.19 3.15-.23 3.14-.27 3.1-.28 3.05-.33 3-.39 3-.41 1.47-.22 1.46-.23 1.47-.24 1.45-.26 1.46-.26 1.42-.28 1.4-.29 1.4-.3 1.95-.45 2-.45 2-.48 1.95-.5 4-1 4-1.06 4-1.07 4.08-1 2.07-.52 2.07-.5 2.1-.5 2.1-.48 2.11-.45 2.12-.43 2.15-.42 2.15-.38 2.17-.35 2.18-.32 2.2-.28 2.22-.24 2.23-.2 2.25-.15 2.23-.1h5.77l1.15.05 1.17.06 1.15.07 1.18.1 1.13.1 4 .4 4 .37 4 .35 4 .35 4 .31 4 .3 4 .3 4 .27 4 .27 4 .23 3.95.23 4 .2 4 .2 3.95.19 4 .16 3.95.15 3.95.14 3.95.13 3.95.12 4 .08 3.95.08 3.93.09h3.95l3.95.05h23.7l7.9-.1 7.92-.14 7.92-.18 7.93-.22 7.93-.26 7.95-.3 7.95-.34 8-.38 8-.4 8-.43 8-.47 8.05-.5 8.05-.53 8.08-.55 8.1-.57 8.13-.6 8.19-.62 1.63-.11 1.68-.09h8.35l1.67.08 1.65.08 1.67.12 1.65.13 1.63.15 1.65.17 1.63.18 1.64.2 1.65.2 3.23.47 3.23.5 3.22.53 3.2.55 3.17.57 3.16.58 5.81 1.13 3.1.55 3.08.53 3 .52 3 .47 3 .43 1.47.18 1.5.19 1.46.16 1.49.15 1.46.14 1.45.11 1.45.1 1.45.09 1.44.06h7.05l1.38-.06 1.37-.09 1.36-.11 1.37-.15 1.35-.17 1.35-.2 1.33-.22 1.4-.26 2.14-.42 2.23-.4 2.23-.4 2.25-.37 2.27-.35 2.27-.35 2.3-.31 2.28-.3 2.32-.27 2.3-.27 2.33-.25 2.33-.23 2.34-.22 2.35-.2 2.36-.18 2.37-.17 2.37-.16 2.36-.14 2.39-.13 2.4-.12 2.38-.1 2.42-.08 4.78-.13 4.83-.09 4.82-.05h9.67l4.83.08 4.83.1 4.82.15 4.82.17 4.78.2 4.77.21 4.75.25 4.71.27 4.7.28 4.65.3 4.62.32 4.57.32 9 .66 8.76.67 2.92.2 2.88.2 2.89.17 2.88.13 2.88.13 2.89.1 2.9.09 2.88.08 2.9.05h14.47l2.9-.05 2.9-.07 2.9-.06 2.9-.09 5.81-.2 5.82-.25 5.83-.3 5.82-.31 5.83-.35 5.85-.37 5.84-.4 11.71-.83 11.74-.85 11.75-.82 5.9-.4 5.9-.38 5.9-.34 5.9-.33 5.91-.28 5.94-.24 5.91-.2 3-.08 3-.07 3-.05h8.95l1.62.17 1.56.46 1.45.77 1.27 1 1 1.27.79 1.43.46 1.57.17 1.62-.15 1.63-.48 1.54-.76 1.43-1 1.27-1.26 1-1.44.78-1.54.52-1.62.15h-5.8l-2.9.05h-2.88l-2.9.07-2.89.06-5.8.2-5.8.24-5.81.28-5.82.32-5.82.35-5.83.36-5.83.39-11.72.83-11.72.85-11.76.82-5.89.4-5.91.38-5.9.35-5.92.33-5.93.3-5.94.25-5.93.22-3 .08-3 .07-3 .07h-18l-3-.07-3-.07-3-.08-3-.12-3-.13-3-.15-3-.17-3-.2-3-.21-8.77-.67-8.95-.67-4.53-.31-4.57-.3-4.58-.3-4.63-.29-4.65-.25-4.67-.25-4.68-.21-4.7-.2-4.7-.17-4.72-.13-4.72-.12-4.7-.07h-14.08l-4.65.1-4.65.14-2.3.08-2.3.08-2.28.12-2.29.12-2.28.13-2.27.15-2.25.17-2.25.18-2.23.18-2.23.2-2.22.24-2.2.23-2.18.25-2.17.27-2.17.26-2.15.3-2.13.32-2.12.33-2.1.35-2.08.37-2.07.38-2.11.4-1.62.32-1.68.28-1.7.24-1.67.21-1.68.17-1.69.15-1.68.12-1.67.06-1.68.07h-5l-1.65-.05-1.67-.06-1.65-.1-1.65-.1-1.65-.14-1.63-.16-1.65-.17-1.63-.18-1.64-.2-1.46-.09-3.23-.47-3.22-.5-3.22-.53-3.2-.55-3.16-.59-6.3-1.15-3.14-.58-3.1-.55-3.08-.55-3-.5-3-.47-3-.43-1.48-.18-1.48-.19-1.49-.16-1.48-.15-1.47-.14-1.45-.11-1.45-.1-1.45-.09-1.43-.05h-7.08l-1.39.07-1.41.1-8.15.62-8.17.6-8.15.58-8.12.55-8.11.53-8.1.5-8.07.47-8.07.45-8.06.4-8 .38-8 .34-8 .3-8 .26-8 .24-8 .18-8 .13-8 .1h-24l-4-.05-4-.06-4-.07-4-.08-4-.1-4-.1-4-.14-4-.13-4-.17-4-.16-4-.19-4-.2-4-.21-4-.24-4-.23-4-.27-4-.28-4-.3-4-.3-4-.33-4.05-.35-4-.35-4-.39-4-.4-1-.08-.94-.07-.93-.06h-7.22l-1.9.09-1.89.13-1.88.17-1.9.2-1.9.25-1.9.26-1.92.32-1.91.33-1.92.39-1.93.38-1.95.43-1.94.44-2 .46-2 .49-2 .48-4 1-4 1.05-4.05 1.07-4.07 1.05-2.06.53-2.07.5-2.08.49-2.1.48-1.55.33-1.59.34-1.58.3-1.58.3-1.59.28-1.6.27-1.61.25-1.64.25-3.21.45-3.27.4-3.3.36-3.3.32-3.32.27-3.33.23-3.35.22-3.35.16-3.37.15-3.36.12-3.37.08-3.37.07h-13.31l-6.61-.05-6.57-.06-12.82-.17-6.2-.07h-40.4l-.28.06-.28.07-.89.25-1 .32-1.1.35-1.2.4-1.25.36-.72.2-.73.19-.77.16-.82.15-.86.14-1 .06h-1.07l-.75-.07-.9-.11-.35-.07-1.06-.27-.32-.11-.88-.32-.48-.21-.45-.27-.63-.4-.14-.08-.6-.47-.13-.1-.57-.47-.1-.1-.54-.58-.1-.14-.46-.63-.09-.13-.4-.64-.25-.46-.36-.82-.27-.78-.2-.77-.1-.5-.13-1.68.17-1.64.48-1.55.78-1.43 1.05-1.27 1.27-1 1.45-.77 1.57-.47 1.61-.15 1.64.17 1.55.48 1.11.6.82-.26 1.17-.37 1.25-.4 1.33-.38.77-.2.76-.17.82-.17.87-.11 1-.1h41.28zm-52.51 7.62v-.08l-.1-.39-.13-.4z"/><path d="m365.47 647.05.85.15.85.23.8.32.76.42.74.48.66.55.62.63.53.69.47.73.38.78.3.82.22.85.12.87v1.73l-.05 1-.07 1-.08 1-.1 1-.13 1-.15.94-.19 1-.18.93-.2.93-.23.92-.24.93-.26.92-.27.93-.57 1.79-.63 1.81-.68 1.79-.72 1.76-.75 1.75-.78 1.75-.82 1.72-.83 1.72-.84 1.41-.87 1.68-.88 1.65-.88 1.64-.9 1.61-1.77 3.12-1.7 3.1-1.73 2.9-1.59 2.82-.73 1.33-.7 1.3-.67 1.27-.58 1.28-1.45 2.95-1.44 3-1.4 3-1.39 3.05-1.32 3.05-1.34 3.12-1.3 3.13-1.3 3.15-1.26 3.18-1.27 3.19-1.28 3.18-1.25 3.27-2.47 6.51-2.43 6.55-2.45 6.59-2.45 6.6-2.5 6.6-1.27 3.31-1.27 3.3-1.3 3.29-1.31 3.3-1.34 3.26-1.36 3.29-1.39 3.25-1.41 3.25-1.45 3.23-1.45 3.15-.79 1.73-.73 1.67-.72 1.7-.7 1.72-.66 1.71-.65 1.72-.63 1.75-.62 1.76-.6 1.77-.6 1.78-.57 1.8-.56 1.79-1.1 3.65-1.09 3.7-1.05 3.7-1 3.75-2.15 7.55-1.08 3.82-1.13 3.82-.59 1.91-.6 1.92-.61 1.93-.6 1.84-.07.18v.08l-.1.44-.08.45-.07.56-.06.65-.05.72v10.78l-.07 1.12-.12 1.17-.15 1.18-.21 1.22-.34 1.21-.2.72-.22.63-.25.68-.28.67-.32.68-.38.69-.43.7-.49.7-.53.68-.62.65-.68.63-.73.6-.79.54-.83.48-.87.43-.9.35-.91.27-.92.22-.9.15-.67.05h-1.73l-.87-.15-.83-.23-.82-.32-.76-.42-.74-.48-.66-.55-.6-.63-.55-.69-.47-.73-.38-.78-.3-.82-.22-.85-.15-.87v-.88l.07-.87.13-.85.24-.85.33-.8.4-.78.48-.72.57-.68.62-.6.68-.55.73-.47.79-.38.05-.57.05-.7v-9.7l.05-1.13.07-1.17.12-1.18.16-1.22.22-1.23.27-1.22.2-.7.18-.56.62-1.89.56-1.8.57-1.8.55-1.81 1.08-3.67 1.07-3.7 2.14-7.52 1.07-3.79 1.07-3.8 1.11-3.81 1.15-3.8.62-1.94.62-1.91.63-1.92.65-1.93.68-1.92.7-1.92.72-1.91.75-1.92.78-1.92.8-1.91.84-1.9.85-1.87 1.43-3.1 1.37-3.07 1.36-3.11 1.32-3.12 1.32-3.15 1.3-3.18 1.26-3.19 1.27-3.21 1.25-3.24 1.25-3.23 2.45-6.53 2.45-6.55 2.43-6.6 2.47-6.6 2.48-6.59 1.27-3.3 1.28-3.28 1.3-3.28 1.3-3.29 1.35-3.25 1.35-3.26 1.39-3.24 1.41-3.21 1.44-3.22 1.48-3.18 1.52-3.17 1.55-3.15.71-1.42.75-1.43.79-1.45.8-1.47 1.65-2.91 1.71-3 1.72-3 1.72-3.05.83-1.52.83-1.52.8-1.51.8-1.52.75-1.52.74-1.5.71-1.48.65-1.48.64-1.45.58-1.44.53-1.41.49-1.39.45-1.4.18-.63.18-.65.17-.65.17-.63.13-.64.12-.61.11-.6.1-.6.1-.65v-.56l.05-.55.05-.55v-1.14l.07-.87.15-.85.23-.85.32-.8.42-.78.48-.72.57-.66.61-.62.69-.53.73-.47.78-.38.84-.3.83-.22.87-.13h.86zm27.53 6.95.83.1.82.18.8.27.77.35.73.42.68.5.64.55.56.63.52.67.43.73.35.77.29.8.2.81.1.84v1.93l-.06 1.23-.1 1.22-.15 1.22-.19 1.2-.21 1.2-.25 1.18-.29 1.17-.31 1.16-.34 1.15-.36 1.15-.4 1.14-.42 1.13-.43 1.12-.45 1.1-.49 1.1-.48 1.1-.52 1.08-.51 1.08-.55 1.09-.55 1.06-.59 1.07-1.15 2.08-1.2 2.09-1.23 2.06-1.27 2-1.26 2-1.29 2-1.28 2-2.53 3.88-1.24 1.9-1.2 1.89-1.16 1.85-1.14 1.81-1.06 1.79-1 1.75-.95 1.71-.43.82-.42.83-.42.82-.38.8-.35.78-.35.77-.32.75-.28.75-.27.72-.26.76-1.22 3.64-1.25 3.68-2.53 7.32-2.55 7.3-2.57 7.25-5.15 14.48-2.56 7.22-2.52 7.21-2.48 7.22-1.23 3.6-1.2 3.62-1.2 3.61-1.17 3.64-1.16 3.62-1.14 3.63-1.13 3.65-1.1 3.63-1.07 3.65-1.05 3.67-1 3.67-1 3.68-1 3.68-1 3.84-.32 1.13-.41 1.3-.49 1.37-.53 1.43-.58 1.52-.65 1.61-1.37 3.42-1.55 3.68-1.67 3.92-1.66 3.95-1.65 4-1.59 3.88-.73 1.88-.72 1.82-.65 1.75-.6 1.67-.53 1.56-.48 1.45-.39 1.3-.31 1.17-.12.47-.08.43-.09.37v.11l.13.49.12.83v.85l-.05.85-.13.83-.23.8-.3.8-.39.75-.45.7-.53.67-.58.6-.65.55-.7.47-.75.4-.79.31-.8.25-.83.15-.83.09h-.85l-.84-.1-.83-.18-.8-.27-.77-.33-.73-.44-.68-.48-.64-.57-.58-.61-.5-.67-.43-.73-.14-.24-.28-.6-.25-.63-.1-.35-.15-.5-.13-.54-.07-.31-.12-.8-.06-.69v-1.91l.06-.85.12-.84.13-.81.15-.82.19-.82.2-.83.43-1.63.52-1.7.56-1.77.64-1.83.68-1.87.72-1.93.75-1.95.8-2 1.63-4 1.7-4.07 1.68-4 1.64-3.83 1.51-3.62 1.34-3.27.58-1.45.52-1.35.45-1.18.35-1 .25-.78.18-.65.95-3.72 1-3.82 1-3.8 1.07-3.78 1.08-3.78 1.1-3.75 1.14-3.74 1.15-3.73 1.16-3.72 1.19-3.7 1.21-3.7 1.22-3.68 1.23-3.67 1.24-3.68 2.51-7.28 2.55-7.29 2.57-7.25 5.15-14.48 2.55-7.22 2.53-7.23 2.5-7.25 1.22-3.62 1.23-3.68.35-1 .4-1.05.42-1 .43-1 .47-1.05.47-1 .5-1 .5-1 .53-1 .55-1 1.1-2 1.15-2 1.2-2 1.23-2 1.24-2 1.26-2 1.27-2 2.53-3.88 1.25-1.92 1.22-1.92 1.2-1.88 1.15-1.88 1.12-1.85 1.06-1.85 1-1.84.47-.86.46-.9.44-.87.43-.88.4-.87.38-.85.37-.85.35-.83.32-.82.3-.82.26-.8.27-.78.22-.78.2-.75.18-.75.17-.74.11-.71.12-.7.08-.69v-2.11l.07-.85.13-.84.24-.81.3-.79.38-.75.47-.7.53-.66.58-.6.65-.54.7-.46.75-.4.79-.32.81-.25.82-.15.85-.07zm-78.3 232.38-.05-.18-.2-.35z"/><path d="m395.53 658.87h.22l.63.09.64.13.23.07.53.15.52.2.25.08.4.18.4.2.25.14.65.38.55.35.73.58.5.42.6.6.55.63.49.7.4.74.33.78.25.8.17.83.08.84v.85l-.08.83-.18.83-.25.8-.34.79-.41.73-.49.68-.55.64-.61.58-.69.52-.13.08v.67l.05 1.11.06 1.17.17 2.52.22 2.58.23 2.63.22 2.59.18 2.48.08 1.23.07 1.17v5.5l-.05 1.62-.07 1.61-.08 1.6-.1 1.6-.22 3.15-.28 3.14-.3 3.11-.32 3.09-.33 3.05-.32 3-.31 3-.29 3-.25 3-.21 3-.1 1.45-.07 1.47-.07 1.45v13.27l-.08 4.45-.09 4.45-.11 4.43-.15 4.45-.17 4.43-.17 4.44-.2 4.43-.2 4.43-.45 8.85-.46 8.84-.5 8.85-.49 8.81-.46 8.84-.45 8.81-.2 4.4-.19 4.42-.18 4.4-.15 4.4-.15 4.42-.12 4.4-.08 4.4-.08 4.4v9.68l-.14.83-.2.82-.3.78-.38.77-.45.72-.52.66-.58.6-.63.55-.7.49-.74.4-.78.33-.8.25-.83.17-.84.08h-1.06l-.83-.08-.83-.19-.8-.25-.79-.33-.73-.42-.68-.48-.65-.55-.59-.62-.5-.66-.45-.72-.36-.77-.3-.78-.2-.82-.14-.83v-5.33l.05-4.52.06-4.5.1-4.48.12-4.49.13-4.48.17-4.48.17-4.47.2-4.45.2-4.47.45-8.88.48-8.87.48-8.85.49-8.81.48-8.8.43-8.79.2-4.38.2-4.38.17-4.37.17-4.37.13-4.36.12-4.37.1-4.35.06-4.35v-12l.05-1.65.07-1.63.08-1.62.1-1.63.24-3.17.26-3.17.3-3.13.32-3.1.33-3 .32-3 .32-3 .28-3 .27-2.93.21-2.93.09-1.44.06-1.43.07-1.43.05-1.44v-4.45l-.05-1-.07-1-.18-2.3-.22-2.52-.21-2.65-.24-2.73-.18-2.72-.08-1.37-.05-1.35v-5.2l.1-1.28.16-1.23.12-.72.15-.68.18-.74.24-.75.31-.81.42-.87.32-.53.25-.4.26-.39.14-.18.35-.43.38-.42.15-.17.47-.43.5-.4.16-.12.64-.43.65-.35.18-.1.72-.3.73-.25.2-.05.77-.18.8-.1h.93zm28.79-8.37.83.08.83.17.8.27.77.33.75.42.68.48.64.55.58.62.52.66.45.72.36.77.29.78.21.82.12.83v6.07l-.05 5.26-.1 5.25-.14 5.25-.15 5.25-.2 5.25-.2 5.25-.25 5.25-.25 5.24-.26 5.25-.3 5.25-.3 5.25-.64 10.46-.65 10.49-.66 10.48-.63 10.47-.3 5.23-.28 5.23-.27 5.25-.27 5.22-.23 5.23-.2 5.24-.18 5.23-.17 5.23-.12 5.24-.1 5.21-.06 5.24v6.78l-.07 2.35-.28 6.88-.35 9-.37 9.94-.15 5-.13 4.77-.1 4.42-.07 3.93v6.14l.17.83.1.83v.86l-.08.84-.15.83-.25.8-.34.78-.4.74-.48.7-.53.65-.62.58-.67.52-.7.45-.76.38-.79.3-.81.22-.84.13-.85.05h-.83l-.83-.12-.82-.22-.8-.28-.77-.37-.71-.43-.53-.4-.52-.45-.46-.49-.44-.51-.4-.55-.34-.6-.3-.62-.05-.13-.23-.6-.18-.64-.12-.5-.15-.86-.13-1.2-.07-1.27-.05-1.38v-5.09l.07-4.08.1-4.53.13-4.85.17-5 .37-10 .35-9 .26-6.85.09-2.2v-6.45l.05-5.33.1-5.33.13-5.34.15-5.33.18-5.32.22-5.3.23-5.3.27-5.3.27-5.28.3-5.28.3-5.27.63-10.52.65-10.5.65-10.46.63-10.44.3-5.21.29-5.2.26-5.19.27-5.18.23-5.18.2-5.17.19-5.17.16-5.16.12-5.15.1-5.14.05-5.13v-5.17l.05-.83.13-.85.22-.82.3-.78.36-.75.53-.92.52-.66.58-.62.65-.55.7-.47.74-.41.81-.29.8-.25.83-.16.84-.07zm-1.55 227.65.35.62-.19-.4-.45-.62z"/><path d="m436 653.85.83.12.82.21.78.3.77.37.71.45.67.52.6.58.55.63.48.7.42.74.33.78.25.8.17.83.08.84v.85l-.08.83-.18.83-.17.55.12.47.15.57.18.58.42 1.33.46 1.39.5 1.38.5 1.35.5 1.27.87 2.16.55 1.35.8 2 .82 1.9.83 1.9.88 1.92.9 1.9.92 1.9.95 1.92 1 1.91 2 3.87 2 3.9 2.05 3.93 2 4 1 2 1 2 1 2.05 1 2.09.95 2.1.93 2.11.92 2.14.86 2.18.85 2.18.82 2.24.77 2.25.71 2.26.35 1.19.34 1.15.33 1.16.3 1.19.3 1.18.28 1.2.27 1.2.23 1.18.59 2.82.6 2.92.63 3 .67 3.13.71 3.22.75 3.32.79 3.38.81 3.47.85 3.51.89 3.55.91 3.6.95 3.64 1 3.66 1 3.65 1.05 3.67 1.16 3.73 1.1 3.63 1.13 3.62 1.15 3.56 1.2 3.54 1.2 3.48 1.25 3.42.62 1.65.65 1.66.63 1.64.65 1.6.65 1.58.65 1.57.67 1.53.67 1.5.66 1.48.67 1.45.68 1.4.69 1.39.68 1.35.68 1.3.7 1.28.69 1.22.7 1.2.68 1.15.7 1.1.75 1.15.3.46.35.6.57 1 .53 1.1.48 1.1.47 1.12.43 1.13.42 1.14.4 1.16.8 2.32.78 2.32.79 2.3.38 1.08.4 1.07.4 1 .4 1 .38.9.4.85.39.75.38.7.15.26.17.27.15.23.15.2.11.17.55.1.8.25.79.32.73.4.7.48.65.53.58.62.54.65.45.72.38.75.3.8.22.81.13.84.07.83v.85l-.13.83-.2.82-.28.8-.37.75-.43.73-.52.67-.57.62-.63.56-.68.49-.74.41-.78.34-.8.26-.82.19-.85.1h-1.56l-1-.11-1-.22-1-.28-1-.34-.89-.41-.83-.45-.78-.49-.72-.51-.68-.55-.64-.55-.58-.57-.53-.6-.52-.58-.48-.6-.45-.6-.42-.6-.42-.62-.38-.62-.38-.65-.67-1.2-.62-1.26-.6-1.27-.55-1.27-.51-1.28-.5-1.27-.56-1.3-.45-1.29-.85-2.43-.78-2.35-.75-2.2-.35-1-.35-.94-.32-.85-.32-.75-.26-.63-.25-.5-.22-.4v-.07l-.12-.16-.78-1.22-.85-1.35-.84-1.38-.83-1.42-.82-1.45-.8-1.47-.78-1.5-.78-1.53-.77-1.57-.75-1.56-.75-1.62-.75-1.63-.73-1.65-.72-1.67-.72-1.7-.7-1.72-.7-1.73-.68-1.75-.67-1.77-.68-1.8-1.32-3.6-1.26-3.65-1.28-3.69-1.22-3.74-1.18-3.76-1.12-3.77-1.1-3.8-1.09-3.78-1-3.78-1-3.77-1-3.75-.95-3.7-.9-3.67-.88-3.6-.84-3.53-.8-3.48-.76-3.39-.74-3.3-.74-3.18-.65-3.1-.62-3-.56-2.83-.22-1-.22-1-.23-1-.25-1-.25-1-.27-1-.28-1-.28-.95-.64-2-.65-1.93-.7-1.94-.75-1.91-.76-1.92-.82-1.92-.85-1.9-.87-1.91-.9-1.92-.91-1.92-.95-1.91-1-1.92-2-3.87-2-3.9-2.05-3.93-2-4-1-2-1-2-1-2.05-1-2.07-1-2.08-.94-2.1-.91-2.13-.85-2.09-.59-1.41-.91-2.3-.55-1.44-.59-1.55-.58-1.61-.57-1.69-.53-1.66-.25-.89-.25-.85-.22-.86-.2-.89-.16-.86-.15-.92-.12-1-.07-1v-1.63l.05-.38.07-.45.1-.45v-.17l.2-.73.05-.15.15-.42.18-.42.07-.13.23-.48.29-.49.06-.11.37-.54.42-.5.08-.1.5-.53.55-.48.1-.09.63-.45.67-.4.12-.06.7-.34.73-.26h.12l.81-.21.85-.14h.84zm2.41 15.95-.8.28.64-.2.35-.18zm17.67-36.8.49.07.86.13.35.09.52.13.52.15.35.13.45.17.41.2.37.18.7.39.68.41.89.65.8.69.7.7.66.7.6.71.55.72.54.75.51.75.49.77.46.78.45.8.45.8.45.87.82 1.66.82 1.77.78 1.82.77 1.86.75 1.92.73 1.93.7 1.95.68 2 .67 2 .65 2 .62 1.95 1.16 3.73 1.07 3.52 1.75 5.93.65 2.2.48 1.53.7 2.07.74 2.13.75 2.14.76 2.13.79 2.13.81 2.15.82 2.15.82 2.14 1.71 4.33 1.75 4.33 1.8 4.35 1.84 4.37 1.88 4.37 1.9 4.4 1.93 4.41 2 4.42 3.93 8.92 4 9 2 4.5 2 4.51 1.95 4.54 1.92 4.53 1.77 4.47 1.87 4.58 1.81 4.58 1.79 4.6.86 2.34.87 2.3.85 2.31.83 2.34.82 2.31.8 2.34.78 2.33.77 2.35.75 2.33.73 2.35.7 2.35.7 2.37.67 2.35.65 2.37.63 2.38.59 2.32.3 1.1.28 1.05.33 1.08.35 1.1.37 1.12.4 1.11.42 1.15.43 1.14.47 1.16.48 1.15.5 1.19.53 1.16.54 1.17.55 1.17.58 1.18.58 1.17.6 1.16.62 1.17.63 1.15.64 1.15.65 1.13.66 1.14.67 1.11.67 1.1.68 1.09.68 1.08.7 1.05.7 1 .7 1 .7 1 .7 1 .79 1 .35.5.38.61.35.62.35.65.5 1.1.43 1.13.37 1.12.3 1.08.25 1.07.22 1 .2 1 .16 1 .29 1.86.23 1.77.25 1.76.6.3.73.48.67.55.62.62.55.66.48.74.38.78.32.82.22.83.15.87v1.75l-.13.85-.22.85-.32.81-.4.77-.46.73-.55.69-.64.61-.66.55-.74.47-.78.4-.55.25-.87.3-.56.17-.74.16h-.25l-.81.11h-2.5l-.54-.12-.48-.12-.2-.05-.47-.15-.46-.17-.19-.06-.45-.2-.41-.22-.19-.08-.76-.47-.19-.13-.66-.5-.17-.15-.58-.54-.39-.4-.56-.66-.47-.67-.4-.63-.35-.64-.32-.66-.43-1.05-.35-1.07-.28-1-.24-1-.2-1-.16-1-.15-.94-.27-1.78-.22-1.66-.25-1.63-.12-.73-.13-.69-.14-.61-.13-.55-.12-.49-.13-.36-.08-.25-.07-.15-.72-.95-.81-1.14-.82-1.15-.8-1.16-.8-1.19-.78-1.2-.79-1.23-.78-1.23-.77-1.25-.75-1.27-.75-1.27-.73-1.3-.73-1.3-.7-1.31-.7-1.32-.69-1.32-.68-1.35-.65-1.33-.63-1.35-.62-1.35-.62-1.37-.58-1.35-.57-1.35-.53-1.36-.53-1.37-.5-1.37-.49-1.35-.45-1.36-.43-1.35-.4-1.37-.38-1.35-.34-1.28-.58-2.29-.58-2.21-.62-2.22-.63-2.22-.65-2.23-.67-2.22-.7-2.23-.72-2.22-.71-2.21-.75-2.24-.77-2.21-.78-2.24-.8-2.23-.82-2.22-.82-2.23-.83-2.22-1.73-4.46-1.77-4.45-1.82-4.45-1.85-4.47-1.88-4.45-1.92-4.47-1.91-4.47-1.95-4.48-3.95-8.93-4-8.9-2-4.47-1.95-4.45-1.93-4.46-1.92-4.45-1.88-4.47-1.83-4.45-1.74-4.42-1.75-4.45-.87-2.25-.85-2.21-.83-2.24-.83-2.23-.8-2.25-.79-2.23-.76-2.24-.79-2.28-.56-1.83-.7-2.34-1.75-5.9-1-3.4-1.12-3.6-.58-1.81-.6-1.82-.62-1.83-.63-1.8-.65-1.79-.65-1.71-.65-1.69-.65-1.58-.65-1.5-.63-1.4-.65-1.28-.29-.57-.3-.53-.28-.5-.27-.45-.25-.4-.23-.34-.22-.3-.2-.06-.8-.34-.76-.43-.72-.5-.65-.57-.6-.65-.52-.68-.45-.75-.36-.8-.29-.82-.2-.85-.1-.86v-.94l.08-.86.17-.85.25-.84.35-.8.41-.76.52-.72.57-.65.63-.6.7-.52.75-.45.8-.36.82-.29.85-.2.86-.1h1.35zm-1.21 16.64h.13-.43zm-77.97-37.57h1l.33.05.34.07.31.08.32.1.33.1.3.12.32.13.3.15.3.15.28.17.29.18.28.2.27.2.25.22.25.21.25.24.23.25.22.25.21.26.2.27.19.27.18.28.17.3.15.3.15.3.11.3.14.32.1.31.08.34.08.31.07.34.05.33.05.33v2.25l-.07.7-.1.74-.23 1.23-.32 1.27-.37 1.26-.4 1.24-.51 1.31-.48 1.25-.52 1.25-.55 1.25-.58 1.27-.6 1.26-.62 1.27-.66 1.3-1.32 2.52-1.37 2.53-1.4 2.5-1.36 2.42-1.34 2.31-2.43 4.25-1 1.84-.92 1.66-.17.3-.16.29-.2.26-.2.29-.2.25-.24.25-.21.25-.25.23-.25.22-.27.21-.27.2-.26.2-.29.19-.28.16-.3.15-.3.15-.32.14-.31.11-.32.1-.32.1-.33.09-.32.06h-3l-.32-.07-.33-.08-.32-.08-.32-.12-.31-.12-.32-.13-.3-.13-.3-.15-.28-.17-.29-.18-.28-.19-.27-.21-.26-.2-.25-.24-.25-.21-.24-.25-.21-.25-.22-.25-.2-.27-.18-.28-.19-.29-.16-.28-.17-.3-.15-.3-.13-.32-.12-.31-.1-.32-.1-.32-.08-.33-.07-.32-.05-.33-.05-.33v-2.01l.05-.33.07-.32.08-.33.1-.32.1-.32.12-.31.13-.32.14-.3.16-.3 1-1.77 1.12-2 2.46-4.3 1.3-2.28 1.34-2.34 1.3-2.35 1.27-2.35 1.22-2.31.57-1.1.53-1.1.5-1 .47-1 .43-1 .4-.93.33-.87.29-.8.23-.72.18-.63.14-.5.08-.45v-1.37l.05-.33.08-.32.07-.33.1-.32.12-.31.11-.32.14-.3.13-.32.17-.28.16-.3.19-.28.18-.27.22-.27.2-.26.23-.25.23-.24.24-.23.25-.23.26-.2.27-.2.28-.2.29-.17.28-.17.3-.16.3-.14.32-.13.31-.12.32-.1.32-.1.33-.08.33-.07h1.34z"/><path d="m444.32 609.3 1.1.07 1.11.11 1.12.15 1.12.22 1.15.27 1.13.35 1.13.41 1.14.5 1.11.57 1 .63.6.4.52.39.51.41.5.42.49.45.46.47.45.46.44.5.41.52.4.53.39.54.36.55.35.56.37.64.58 1.13.54 1.22.48 1.26.42 1.3.36 1.32.32 1.38.27 1.4.23 1.45.17 1.5.13 1.54.1 1.6.07 1.63v2.6l-.06.48-.1.49-.14.48-.15.47-.18.46-.2.45-.23.44-.27.41-.28.4-.3.4-.34.37-.35.35-.36.32-.39.3-.41.28-.42.27-.43.21-.45.22-.47.17-.47.15-.48.11-.48.1-.49.07h-2l-.48-.09-.49-.11-.46-.14-.47-.16-.45-.2-.45-.22-.42-.25-.41-.27-.4-.3-.39-.31-.35-.34-.33-.36-.32-.39-.3-.4-.26-.41-.25-.42-.22-.45-.18-.45-.17-.47-.13-.48-.1-.48-.09-.49v-2.38l-.05-1.23-.07-1.15-.1-1-.1-1-.15-.88-.15-.8-.15-.7-.18-.63-.17-.54-.18-.45-.17-.38-.18-.37-.05-.08-.07-.12-.06-.1-.07-.08-.05-.07-.05-.06-.07-.07h-.1l-.17-.1-.11-.06-.15-.07-.19-.07-.23-.06-.28-.07-.34-.07-.38-.05h-3.56l-.72.05-.75.08-.78.1-.8.1-1.78.28-1.87.32-2 .37-4.25.81-2.25.44-2.35.4-2.4.4-1.25.18-1.25.17-1.28.16-1.28.14-1.32.13-1.32.12-1.33.08-1.37.07h-3.65l-.68.09-.82.13-.9.15-1 .22-1.05.21-1.1.27-2.35.58-2.41.62-2.45.65-2.4.62-2.32.56-1.15.25-1.12.24-1.11.18-1.14.17-1.11.1h-1.4l-.77-.05-.88-.11-.55-.12-.47-.12-.45-.13-.18-.07-.39-.15-.38-.15-.38-.18-.15-.08-.35-.2-.34-.2-.33-.24-.33-.23-.12-.1-.37-.32-.36-.33-.34-.37-.31-.38-.09-.1-.26-.37-.24-.35-.21-.38-.22-.38-.17-.4-.06-.14-.15-.4-.14-.4-.11-.4-.09-.41-.08-.42v-.13l-.05-.47v-1.57l.05-.48.07-.48.12-.47.05-.18.1-.37.11-.37.13-.56.08-.2.17-.38.18-.38.28-.54.49-.75.48-.65.37-.45.31-.38.35-.35.37-.33.38-.32.4-.28.42-.27.43-.23.44-.22.46-.18.47-.17.47-.13.48-.1.5-.07h1.97l.48.07.48.1.49.13.46.15.45.18.45.22.44.23.41.27.1.08.74-.18 2.25-.58 2.43-.64 2.53-.65 2.55-.65 1.32-.3 1.3-.28 1.28-.27 1.27-.23 1.28-.18 1.29-.17 1.23-.1h4.48l1.07-.09 1.07-.08 1.05-.1 1.06-.12 1.09-.13 1.06-.15 1.05-.15 2.17-.35 2.13-.38 2.15-.4 4.25-.82 2.12-.4 2.12-.37 2.08-.31 1.07-.15 1.06-.14 1.07-.1 1.05-.1 1.07-.06h2.16z"/><path d="m417.2 620.8h1.13l.39.08.36.08.35.12.37.12.35.15.35.15.33.18.34.18.31.2.32.22.3.23.28.25.29.25.26.27.25.28.25.3.22.3.22.32.2.32.18.33.17.33.15.35.15.35.11.37.1.37.09.36.08.37v1.92l.15 1.71.22 2.4.3 2.94.37 3.35.41 3.65.47 3.81.47 3.87.5 3.82.5 3.63.5 3.33.46 2.94.2 1.21.2 1.09.19.86.05.24.11.2.15.35.15.35.14.35.11.36.1.37.07.37.07.38.05.37v1.51l-.05.39-.05.36-.06.39-.1.36-.1.37-.14.35-.13.35-.17.35-.16.33-.19.34-.2.31-.21.32-.24.3-.25.3-.25.27-.26.26-.29.27-.28.23-.32.24-.3.21-.33.2-.33.19-.34.16-.35.15-.35.15-.36.12-.35.1-.39.1-.35.07-.37.05h-2.18l-.37-.07-.36-.07-.33-.09-.33-.1-.34-.11-.31-.12-.32-.15-.32-.15-.3-.17-.3-.18-.3-.18-.28-.2-.27-.22-.06-.07-.29-.23-.26-.25-.25-.25-.25-.27-.22-.28-.23-.3-.2-.3-.07-.1-.17-.25-.13-.25-.13-.25-.14-.25-.23-.48-.27-.72-.21-.67-.29-1.05-.25-1.11-.25-1.22-.25-1.32-.25-1.43-.5-3.15-.51-3.5-.52-3.77-.5-3.91-.5-4-.47-3.9-.43-3.73-.37-3.44-.31-3.06-.25-2.59-.15-2-.05-.88v-1.73l.05-.37.07-.38.08-.37.1-.37.12-.36.13-.35.15-.35.17-.34.18-.33.2-.33.2-.32.24-.3.23-.3.25-.28.27-.27.26-.27.3-.25.3-.23.3-.22.32-.2.33-.2.34-.16.35-.17.35-.15.35-.13.36-.1.37-.1.37-.09.38-.06h1.13z"/><path d="m401.65 620.8h.4l.42.07.4.07.4.1.38.11.4.12.37.17.38.16.37.19.35.2.33.23.33.23.32.25.32.29.28.28.28.3.27.3.25.33.23.34.22.35.2.35.17.36.16.39.15.38.12.38.1.4.1.4v.4l.05.42v2.97l-.07 2.33-.12 2.4-.16 2.47-.2 2.53-.25 2.55-.29 2.58-.33 2.6-.37 2.59-.41 2.58-.47 2.53-.48 2.49-.29 1.26-.28 1.22-.28 1.2-.3 1.18-.32 1.17-.33 1.15-.34 1.13-.31.95v.25l-.05.25-.05.29-.13.93-.12 1.07-.1 1.2-.08 1.26-.15 2.59-.15 2.33-.09 1.13-.13 1.12-.1.52-.07.28-.06.27-.07.26-.05.17-.12.33-.11.32-.14.33-.15.32-.16.3-.17.3-.05.1-.22.32-.21.31-.24.3-.25.3-.26.29-.27.26-.3.25-.3.25-.3.24-.33.2-.32.2-.35.18-.36.16-.37.17-.37.13-.36.12-.39.1-.38.08-.38.07-.4.05h-1.57l-.4-.05-.38-.07-.36-.08-.39-.1-.36-.12-.37-.13-.35-.15-.35-.17-.33-.18-.34-.2-.33-.2-.3-.23-.3-.25-.29-.25-.26-.25-.25-.27-.25-.28-.24-.28-.21-.3-.21-.35-.22-.35-.18-.37-.17-.37-.08-.16-.12-.29-.1-.28-.1-.3-.15-.5-.15-.6-.08-.4-.07-.4-.05-.42v-2.03l.08-.4.08-.4.12-.4.13-.38.15-.39.12-.26v-.37l.16-2.68.1-1.49.14-1.51.15-1.54.21-1.48.15-.82.15-.78.22-.82.2-.71.32-1 .26-.87.27-.9.25-.93.25-1 .23-1 .24-1 .23-1 .43-2.19.4-2.23.37-2.3.33-2.32.3-2.31.27-2.34.22-2.3.18-2.26.13-2.2.1-2.12.07-2v-2.81l.05-.4.08-.4.08-.4.12-.4.13-.39.15-.38.17-.37.2-.36.2-.35.22-.35.25-.34.25-.31.26-.3.29-.3.3-.29.31-.25.34-.25.33-.23.35-.22.35-.2.37-.18.38-.17.38-.13.39-.13.4-.1.4-.09.4-.06h1.23z"/><path d="m489.6 554.8h2l1 .07 1 .08 1 .1 1 .14 1 .15 1 .18 1 .22 1 .25 1 .26 1 .32 1 .37.95.4.95.45.95.5.94.56.9.64.9.68.86.77.82.81.77.9.71 1 .67 1 .53 1 .5 1 .42.95.4.93.37.95.35 1 .31 1 .3 1 .27 1 .23 1 .22.95.18 1 .17 1 .13 1 .1 1 .09 1 .06.95v4.81l-.1.94-.1.91-.13.92-.17.92-.17.9-.2.9-.21.9-.24.88-.26.87-.27.86-.3.87-.32.85-.33.85-.35.83-.37.84-.38.81-.4.8-.42.8-.43.8-.43.79-.47.76-.48.77-.49.75-.5.75-.51.73-.54.74-.55.71-.55.7-.56.7-.59.69-.58.68-.62.67-.6.65-.63.65-.65.66-1.75.76-1.35 1.2-1.37 1.15-1.42 1.12-1.45 1.08-1.48 1-1.52 1-1.53.93-1.58.89-1.59.85-1.63.78-1.63.73-1.67.7-1.68.64-1.67.56-.9.29-.85.25-.88.23-.87.23-.87.2-.88.2-.88.19-.89.16-.88.15-.88.14-.9.11-.89.1-.9.09-.9.06h-5.4l-.9-.05-.91-.08-.9-.1-.9-.14-.9-.13-.9-.17-.89-.16-.9-.22-.88-.22-.9-.25-.88-.26-.87-.29-.88-.31-.87-.34-.87-.36-.85-.39-.85-.4-.85-.43-.83-.45-.82-.47-.81-.5-.72-.46-.65-.47-.6-.52-.53-.58-.5-.62-.42-.66-.37-.72-.28-.73-.23-.77-.14-.77-.08-.8v-.78l.08-.8.15-.77.24-.76.3-.74.36-.7.44-.66.48-.62.55-.58.6-.52.65-.45.68-.4.74-.33.75-.25.76-.19.79-.11h1.58l.78.12.77.18.75.27.73.33.69.4.51.34.45.28.45.25.45.25.47.23.45.22.47.22.48.18.48.2.49.17.48.16.5.15.5.14.52.13.51.12.52.1.52.1.53.08.53.07.55.06h.54l.55.05h3.4l.58-.05h.58l.59-.07.58-.08.6-.08.58-.1.6-.12.59-.12.6-.13.6-.13.6-.17.6-.17.58-.16.57-.19 1.23-.41 1.18-.45 1.19-.49 1.16-.53 1.17-.55 1.13-.62 1.14-.63 1.11-.67 1.09-.7 1.06-.75 1-.76 1-.79 1-.83.95-.85.95-.9.42-.42.43-.45.42-.45.41-.46.4-.45.4-.49.39-.46.38-.47.37-.48.35-.5.33-.49.33-.48.34-.5.3-.48.3-.5.28-.5.27-.5.26-.5.25-.52.24-.5.23-.52.2-.5.22-.51.18-.5.17-.52.16-.52.15-.5.21-.48.13-.52.12-.52.1-.5.08-.51.07-.5.06-.52.05-.52v-3.1l-.05-.51-.07-.52-.06-.53-.09-.52-.1-.52-.11-.53-.14-.53-.15-.54-.16-.55-.19-.53-.2-.55-.21-.55-.24-.55-.25-.55-.23-.47-.05-.11v-.05h-.05l-.09-.06-.11-.09-.17-.08-.18-.12-.24-.1-.28-.11-.32-.14-.36-.11-.4-.12-.44-.1-.48-.1-.5-.1-.55-.08-.57-.09-.6-.06h-.63l-.65-.05h-5.13l-1.59.08-1.61.13-1.65.15-1.67.17-1.67.2-1.66.22-1.64.21-3.25.45-3.06.44-1.49.21-1.45.17-1.38.17-1.35.11-1.33.09h-24.45l-4.59.06-4.75.12-4.86.15-5 .18-2.52.12-2.53.13-2.57.15-2.58.15-2.59.19-2.58.2-2.6.2-2.6.23-2.6.25-2.6.27-2.58.28-2.59.32-2.56.33-2.55.35-2.54.38-2.51.4-2.49.42-2.46.45-2.44.48-2.4.5-2.35.52-2.33.57-2.27.56-2.27.55-2.18.63-2.14.67-2.1.7-1 .35-1 .35-1 .38-1 .37-.95.38-.93.4-.93.39-.9.41-.89.4-.86.42-.84.42-.83.43-.82.43-.78.45-.77.44-.75.45-.73.46-.7.47-.68.47-.67.46-.63.49-.64.46-.6.5-.56.49-.55.48-.54.5-.51.5-.49.5-.46.52-.45.5-.42.51-.4.52-.22.28.05.09.15.26.19.32.21.33.27.37.3.38.33.4.37.44.4.45.43.45.47.46.48.47.54.48.53.49.57.48.58.48.62.5.61.49.62.46 1.35 1 1.35 1 1.4.91 1.4.9 1.42.85 1.38.82 1.38.75 1.32.72 1.28.65 1.2.56 1.14.52 1 .43.88.35.7.25.57.17h5.58l2.6-.07 2.84-.1 5.91-.2 3-.08h7.95l1.16.07 1.17.11 1.1.17.7.13.7.17.82.27.5.2.46.21.45.24.15.08.6.37.59.43.11.08.54.49.5.51.45.57.06.1.42.63.35.65.3.69.23.71v.1l.15.64.1.65.05.63v.65l-.05.65v.12l-.1.66-.16.67-.22.63-.27.64v.11l-.38.7-.43.65-.5.62-.55.57-.62.51-.65.45-.7.39-.72.31-.75.25-.78.19-.78.1h-.8l-.79-.05-.78-.11-.77-.2-.75-.29-.71-.33-.27-.17h-6.68l-2.78.07-5.85.2-2.88.1-2.74.08h-6.9l-1.07-.08-1.05-.17-.78-.17-.73-.2-1.24-.36-1.31-.49-1.37-.53-1.42-.6-1.46-.67-1.52-.73-1.57-.8-1.61-.85-1.65-.92-1.67-1-1.68-1-1.69-1.08-1.7-1.12-1.66-1.17-1.64-1.2-.83-.63-.82-.63-.8-.64-.78-.66-.78-.67-.75-.68-.75-.69-.74-.7-.71-.71-.7-.74-.69-.75-.66-.76-.64-.79-.61-.8-.6-.83-.57-.87-.53-.88-.52-.92-.47-1-.43-1-.38-1-.32-1.1-.27-1.13-.28-1.16-.08-1.23v-1.27l.11-1.18.12-.74.13-.65.17-.63.18-.63.24-.64.25-.61.28-.6.3-.6.33-.57.34-.53.66-1 .67-.92.7-.9.72-.87.73-.85.77-.83.78-.8.82-.8.81-.77.85-.75.87-.73.88-.72.9-.7.92-.68.95-.67.95-.65 1-.63 1-.62 1-.6 1-.58 1-.58 1-.55 1.06-.55 1.07-.54 1.07-.51 1.1-.52 1.1-.48 1.11-.49 1.14-.46 1.13-.47 1.15-.45 1.17-.43 1.18-.42 1.2-.43 2.37-.79 2.43-.76 2.48-.72 2.5-.68 2.54-.64 2.55-.58 2.59-.59 2.61-.55 2.64-.5 2.66-.5 2.67-.45 2.68-.43 2.7-.4 2.72-.37 2.72-.35 2.73-.33 2.72-.3 2.73-.28 2.72-.27 2.71-.23 2.72-.22 2.7-.2 2.68-.18 2.67-.17 2.67-.15 2.63-.15 2.62-.12 5.11-.2 5-.15 4.87-.11 4.68-.07h24.7l.95-.09 1.12-.13 1.25-.15 1.36-.18 3-.44 3.32-.46 1.75-.24 1.8-.23 1.83-.22 1.88-.18 1.9-.18 1.92-.15 1.93-.1 1.95-.07h1.92z"/><path d="m389.85 479.05h.5l.52.07.5.1.48.13.48.15.47.2.47.22.45.25.43.27.4.3.4.31.37.35.36.37.32.38.32.44.26.4.24.41.21.42.2.45.15.43.15.47.1.47.1.46v2.09l-.06.51-.1.52-.14.5-.15.5-.2.48-.21.49-.25.45-.15.4-.35 1-.4 1.18-.43 1.35-.47 1.45-.45 1.52-.37 1.56-.4 1.52-.35 1.45-.3 1.35-.1.55-.08.51-.07.47v3.45l-.07 2.77-.13 2.85-.18 2.86-.24 2.9-.26 2.92-.3 2.93-.35 2.94-.39 2.93-.41 2.92-.45 2.88-.47 2.87-.5 2.81-.53 2.77-.55 2.72-.54 2.48-.06.32v.3l-.27.43v5.28l.07 1.85.11 3.72.05 1.8v2.65l-.05.9-.11 1-.12.7-.1.42-.1.4-.1.35-.15.47-.18.46v.15l-.2.42-.22.42-.07.11-.21.37-.24.35-.25.35-.08.1-.27.32-.28.31-.3.3-.32.27-.06.08-.35.27-.35.27-.39.23-.38.22-.38.2h-.09l-.45.2-.46.17-.47.13-.47.12-.48.08h-.1l-.47.06h-2l-.48-.09-.48-.11-.47-.14-.55-.16-.11-.05-.45-.19-.44-.23-.43-.23-.12-.09-.31-.2-.3-.21-.29-.22-.13-.12-.3-.25-.3-.28-.35-.37-.58-.66-.5-.7-.3-.44-.27-.45-.23-.46-.22-.47-.17-.5-.15-.5-.11-.52-.09-.51-.05-.52v-1l.05-.52.09-.51.11-.52.14-.5.18-.5.2-.47.25-.46.27-.45.28-.44.17-.23-.12-3.45-.07-2v-6l.07-1 .1-1 .15-1 .18-.92.55-2.6.52-2.52.48-2.56.47-2.64.45-2.66.41-2.7.39-2.72.36-2.73.32-2.74.28-2.71.25-2.69.2-2.66.17-2.62.12-2.55.08-2.52v-3.35l.09-.93.1-.92.11-.9.15-.88.19-.93.38-1.77.43-1.83.49-1.82.51-1.8.52-1.75.53-1.65.5-1.55.49-1.4.43-1.23.42-1.09.4-1 .35-.71.25-.44.23-.36.25-.34.25-.33.28-.33.31-.35.35-.32.37-.3.38-.26.39-.27.41-.23.42-.2.43-.19.44-.16.5-.15.49-.12.51-.08.5-.05h.5zm24.42-1.7h.48l.47.07.48.08.45.13.47.14.45.18.43.2.42.22.41.25.4.26.39.3.35.32.35.33.35.39.28.35.27.38.26.38.22.4.22.42.18.42.15.43v.07l.13.45.12.45.08.45.08.56.07.92v2.32l-.06.48-.09.48-.13.49-.15.46-.17.47-.2.42-.06.71-.32 3.37-.27 3.43-.11 1.54-.07 1.35-.05 1v3.58l-.05 1.47-.06 1.43-.09 1.43-.1 1.44-.23 2.76-.28 2.72-.3 2.68-.32 2.65-.33 2.59-.32 2.55-.32 2.53-.28 2.48-.25 2.49-.22 2.46-.08 1.2-.07 1.22-.06 1.22-.05 1.21v4.04l-.06.78-.09.83-.18 1.57-.22 1.65-.26 1.65-.27 1.63-.5 3-.13.82.05.25.06.48.05.5v.98l-.05.49-.07.5-.1.48-.13.47-.15.46-.18.47-.25.58-.24.47-.2.37-.2.35-.11.18-.25.38-.29.37-.3.37-.05.05-.28.3-.3.3-.32.26-.33.27-.35.25-.42.26-.43.24-.44.21-.46.19-.47.15-.47.13-.48.1-.48.07h-1.99l-.49-.08-.48-.1-.47-.12-.46-.16-.47-.19-.43-.2-.44-.25-.41-.25-.4-.3-.39-.3-.35-.34-.33-.33-.32-.37-.3-.38-.28-.38-.24-.42-.23-.42-.2-.45-.18-.45-.14-.45v-.1l-.13-.48-.1-.48-.07-.49v-1.98l.13-1.15.17-1.23.43-2.65.52-3 .25-1.5.21-1.47.19-1.36.15-1.22.05-.48v-3.75l.05-1.43.06-1.42.09-1.42.1-1.4.23-2.73.28-2.7.3-2.67.32-2.61.33-2.59.32-2.56.32-2.54.28-2.5.25-2.5.22-2.5.08-1.23.08-1.23v-1.25l.05-1.24v-3.63l.07-1.37.1-1.53.12-1.7.28-3.62.33-3.58.17-1.67.17-1.48.18-1.32.2-1.18.1-.5.12-.43.15-.45.05-.15.16-.42.19-.42.2-.41.23-.39.23-.38.27-.39.3-.35.32-.35.33-.31.35-.3.37-.29.4-.26.38-.24.42-.21.41-.2.44-.17.45-.15.45-.12.47-.09.48-.08h.95zm26.58 3.52.5.05.48.08.49.12.46.15.47.16.45.2.43.22.44.25.41.28.39.3.38.32.35.35.33.35.32.38.28.4.27.42.25.43.2.45.2.45.15.47.13.48.1.49.09.48.05.5v6l.05 2.78.08 2.82.1 2.83.12 2.87.15 2.87.18 2.9.22 2.9.25 2.91.26 2.92.32 2.92.35 2.9.38 2.91.42 2.9.45 2.89.65 3.71.38 2.25.42 2.45.4 2.57.37 2.6.18 1.33.15 1.32.15 1.3.12 1.3.1 1.28.06 1.25v2.49l-.05 1.25-.1 1.18-.1.72-.12.68-.17.7-.2.77-.28.8-.23.53-.15.33-.19.35-.11.2-.22.4-.27.39-.11.18-.22.3-.23.28-.25.29-.14.15-.3.31-.31.29-.34.28-.15.12-.38.3-.42.26-.41.25-.17.09-.35.18-.37.17-.36.15-.39.13h-.16l-.39.12-.38.08-.38.07-.39.06h-2.31l-.42-.07-.43-.08h-.22l-.35-.1-.35-.1-.35-.12-.23-.08-.44-.17-.41-.18-.25-.14-.23-.14-.33-.19-.52-.33-.75-.53-.5-.4-.36-.32-.37-.35-.33-.37-.3-.38-.3-.4-.25-.42-.25-.43-.2-.45-.19-.45-.16-.48-.14-.47-.1-.48-.06-.5v-1.99l.08-.48.1-.49.13-.48.15-.47.19-.45.21-.45.25-.43.27-.42.28-.4.32-.38.33-.37.35-.33.37-.33.18-.14v-.28l-.08-1-.12-1.09-.13-1.11-.15-1.15-.35-2.39-.37-2.38-.4-2.32-.37-2.21-.66-3.82-.5-3.12-.45-3.11-.42-3.12-.37-3.12-.33-3.11-.28-3.1-.27-3.1-.22-3.07-.2-3.07-.16-3-.14-3-.1-3-.08-2.95v-9.12l.05-.48.06-.5.1-.49.14-.46.15-.47.18-.47.22-.45.15-.38.27-.42.28-.4.32-.38.33-.37.35-.35.37-.31.4-.3.4-.29.43-.25.43-.23.45-.2.47-.17.47-.15.48-.11.48-.09.49-.06h1zm20.5-5.27h.65l.48.07.48.08.47.12h.13l.4.12.42.15.4.15.12.07.35.16.33.17.32.18.13.09.4.26.38.29.14.1.3.26.3.27.38.37.53.6.52.65.63 1 .54 1 .45 1 .4 1 .35 1 .31 1 .32 1 .28 1 .29 1.1.28 1.14.27 1.18.26 1.25.5 2.53.5 2.7.49 2.85.46 3 .45 3 .45 3.14.44 3.18.41 3.23.42 3.24.38 3.25.75 6.35.69 6.06.61 5.6.55 4.94.49 4.11.2 1.64.18 1.35.15 1 .13.72.07.48.05.49v1.45l-.07.48-.1.48-.12.47-.15.45-.18.45-.2.45-.23.43-.25.4-.27.4-.3.39-.32.36-.35.35-.35.32-.38.3-.4.28-.42.27-.41.23-.44.2-.45.19-.46.15-.47.13-.47.1-.48.07h-1.96l-.5-.09-.48-.1-.47-.12-.45-.15-.45-.18-.45-.2-.43-.24-.4-.25-.4-.26-.38-.3-.37-.32-.35-.35-.32-.35-.3-.38-.28-.4-.27-.42-.23-.42-.2-.43-.18-.45-.15-.47-.14-.46-.1-.47-.18-1-.2-1.35-.2-1.55-.23-1.8-.49-4.2-.56-5-.62-5.6-.68-6-.74-6.29-.38-3.16-.4-3.17-.4-3.15-.42-3.1-.43-3-.43-2.91-.45-2.79-.45-2.65-.45-2.46-.45-2.29-.24-1-.21-1-.22-.91-.22-.84-.2-.73-.2-.67-.18-.53-.35-.33-.33-.35-.32-.39-.28-.38-.27-.4-.23-.43-.22-.44-.2-.43-.17-.47-.13-.46-.12-.47-.08-.48-.05-.47v-1.47l.07-.46.08-.49.1-.46.15-.47.17-.47.18-.43.22-.43.25-.42.26-.42.29-.38.31-.37.34-.35.35-.33.38-.32.38-.28.4-.27.44-.25.43-.21.43-.19.47-.16.45-.14.48-.11.47-.09.48-.05h.49zm-1.58 16.58.6.05-.49-.06-.38-.07z"/><path d="m459.68 356.52 1.74.05 1.71.08 1.72.13 1.68.15 1.67.2 1.65.25 1.63.29 1.6.33 1.6.38 1.54.44.81.25.77.26.77.27.75.28.76.3.75.32.74.35.63.3.35.18.35.2.15.09.52.35.5.38.13.12.38.33.35.37.14.13.28.32.25.31.33.44.45.7.39.66.3.64.28.65.38 1.05.34 1.1.26 1.06.25 1.1.2 1.1.19 1.12.16 1.13.17 1.17.13 1.17.14 1.21.2 2.37.23 2.4.13 2.31.12 2.19.08 2 .05 1.8v5.73l.06.87.17 2 .23 2.22.3 2.42.34 2.6.38 2.78.42 2.9.88 6.22.95 6.55.47 3.4.45 3.41.43 3.47.4 3.48.37 3.47.33 3.45.13 1.75.14 1.7.11 1.72.1 1.7.07 1.68.07 1.67.05 1.65v4.85l-.05 1.58-.07 1.57-.1 1.53-.13 1.52-.17 1.5-.2 1.48-.25 1.45-.26 1.43-.34 1.42-.36 1.38-.44 1.39-.46 1.28-.3.72-.29.66-.31.65-.32.65-.35.65-.38.64-.4.63-.44.62-.45.61-.48.6-.5.59-.53.55-.55.51-.55.5-.57.47-.57.45-.58.42-.58.4-.62.38-.6.37-.62.33-.66.37-1.22.58-1.28.55-1.32.52-1.33.46-1.37.42-1.38.38-1.42.35-1.43.32-1.47.3-1.48.27-1.5.23-1.54.22-1.55.18-1.56.17-1.59.15-1.6.13-1.61.12-1.65.1-1.65.08-1.65.07-1.69.05h-10.18l-3.42-.06-3.38-.12-3.37-.13-3.31-.15-3.27-.19-3.2-.18-6.08-.38-5.62-.37-5-.3-2.22-.13-2-.09-1.76-.05h-13.6l-1.62.07-1.62.08-1.6.1-1.56.13-1.59.15-1.55.2-1.56.22-1.55.25-1.62.3-9.68 1.9-.7.12-.7.05h-.72l-.7-.08-.68-.12-.6-.16-.66-.25-.64-.3-.61-.35-.59-.42-.53-.45-.27-.25-.21.35-.42.57-.47.53-.51.49-.55.45-.59.4-.61.33-.65.3-.67.23-.68.19-.69.11-.71.05h-1.34l-.6-.09-.37-.05-.36-.08-.59-.13-.91-.29-.87-.35-.8-.41-.75-.47-.68-.48-.62-.52-.55-.53-.5-.58-.45-.53-.42-.53-.43-.62-.58-1-.55-1.05-.47-1-.38-1-.34-1-.3-1-.25-1-.23-1-.18-1-.17-1-.15-1-.12-1-.1-1-.06-1-.07-.95v-5.3l.06-.81.09-.8.1-.8.11-.65.22-1.2.17-1.07.15-1.12.13-1.13.1-1.18.07-1.2.06-1.24v-6.52l-.07-1.37-.08-1.4-.1-1.43-.1-1.42-.27-2.95-.31-3-.35-3-.39-3.09-.81-6.3-.82-6.36-.4-3.22-.38-3.22-.34-3.21-.28-3.2-.12-1.64-.11-1.6-.09-1.6-.08-1.6v-6.33l.05-1.58.06-1.57.09-1.57.13-1.55.17-1.55.18-1.53.23-1.53.29-1.52.3-1.52.36-1.5.4-1.5.45-1.48.5-1.45.57-1.45.6-1.43.73-1.55.3-.52.22-.37.25-.35.17-.25.23-.3.25-.3.43-.5.7-.68.7-.6.7-.52.69-.45.7-.4.68-.36.67-.32.66-.28.67-.27.67-.25.71-.23 1.3-.39 1.37-.33 1.37-.3 1.4-.27 1.41-.23 1.44-.2 1.43-.17 1.45-.16 1.45-.14 1.45-.11 1.45-.1 1.42-.09 1.43-.06 2.72-.1 2.56-.07h8.59l1.11-.05 1.17-.05 1.22-.08 1.26-.1 1.3-.12 1.37-.15 1.4-.17 1.43-.18 1.45-.18 3.07-.45 3.18-.52 3.29-.55 3.38-.6 3.47-.62 7.16-1.31 3.65-.67 3.7-.67 3.74-.65 3.73-.63 3.77-.58 3.73-.55 1.88-.27 1.87-.25 1.87-.22 1.86-.21 1.85-.2 1.85-.17 1.84-.17 1.81-.13 1.82-.12 1.8-.08 1.8-.07h3.53zm-3.3 16.65h-1.51l-1.55.05-1.59.08-1.61.1-1.64.12-1.65.15-1.68.15-1.7.18-1.72.2-1.73.22-1.75.22-1.75.25-3.57.51-3.6.57-3.61.62-3.64.63-3.63.65-3.62.65-7.16 1.32-3.54.65-3.48.6-3.42.58-3.35.53-3.26.49-1.62.21-1.6.2-1.57.19-1.53.16-1.52.14-1.5.13-1.48.08-1.45.09h-10.05l-2.37.05-2.5.1-1.25.06-1.28.07-1.27.08-1.25.12-1.23.1-1.2.13-1.15.15-1.12.15-1 .17-1 .18-.89.2-.76.19-.72.21h-.17l-.08.22-.35.88-.3.92-.3.95-.27 1-.23 1-.22 1.05-.2 1.08-.16 1.12-.15 1.15-.12 1.17-.1 1.21-.08 1.24-.05 1.26v6.69l.07 1.41.08 1.42.1 1.43.12 1.45.26 3 .32 3 .35 3.06.38 3.09.82 6.31.82 6.35.4 3.2.36 3.2.34 3.2.28 3.19.13 1.6.1 1.58.1 1.58.07 1.59.05 1.58v4.68l-.05 1.55-.06 1.55-.1 1.54-.14 1.53-.16 1.52-.2 1.51-.24 1.5-.25 1.35v5.17l.05.65.07.65.08.65.09.62.1.6.11.58.12.53.12.49.1.33h.06l.62.35.58.4.55.45.37.33.3-.47.42-.55.48-.53.52-.48.56-.44.59-.38.63-.33.65-.29.67-.21.68-.17 9.7-1.71 1.88-.35 1.94-.31 1.91-.27 1.89-.23 1.88-.19 1.87-.15 1.85-.11 1.83-.1 1.83-.07 1.82-.05h12.68l2 .06 2.2.1 2.35.12 5.1.32 5.61.36 6 .39 3.1.18 3.18.17 3.2.15 3.25.13 3.23.1 3.24.07h9.56l1.53-.05 1.5-.05 1.48-.08 1.45-.09 1.44-.1 1.4-.11 1.36-.12 1.34-.15 1.28-.17 1.25-.16 1.22-.2 1.15-.2 1.1-.22 1.06-.23 1-.25.93-.27.88-.27.8-.28.73-.32.67-.28.61-.32.22-.1.23-.13.27-.17.18-.14.18-.11.15-.12.14-.1.11-.1.1-.08.07-.07.05-.05.05-.07.07-.06.06-.1.09-.12.08-.13.1-.15.1-.19.1-.2.1-.23.12-.25.08-.22.23-.66.22-.69.22-.76.18-.85.18-.9.17-1 .13-1.05.12-1.1.12-1.16.06-1.22.07-1.25v-6.92l-.07-1.48-.07-1.52-.08-1.53-.12-1.57-.11-1.58-.14-1.58-.3-3.27-.35-3.28-.38-3.32-.42-3.33-.43-3.34-.47-3.3-.91-6.5-.9-6.21-.44-3-.38-2.87-.37-2.75-.31-2.61-.25-2.49-.2-2.31-.09-1.14-.05-1.1v-5.07l-.05-1.67-.07-1.86-.1-2-.13-2.12-.15-2.11-.2-2.12-.1-1-.12-.95-.12-.92-.13-.85-.12-.78-.06-.3-.44-.12-.45-.15-1-.28-1.05-.25-1.1-.24-1.15-.2-1.18-.16-1.25-.15-1.3-.14-1.33-.08-1.39-.08h-4.35zm-108.21 111.18h-.24z"/><path d="m422.05 401.57 1.3.05 1.22.11.71.09.67.11.68.14.74.18.76.25.84.32.51.26.39.2.38.22.18.12.3.18.29.2.26.22.17.13.25.22.25.21.25.25.22.25.13.14.25.3.25.31.23.34.2.33.1.15.19.32.16.33.07.17.88.26 1.14.39 1.08.43 1.08.45 1 .48 1 .52 1 .55.95.6.91.62.89.65.85.7.81.71.79.75.73.79.68.8.67.85.6.85.57.88.53.9.47.92.43 1 .4.93.33 1 .3 1 .25 1 .22 1 .18 1 .14 1 .08 1 .07 1v1.93l-.05 1-.09 1-.11.95-.15 1-.17.95-.2.93-.23.93-.25.94-.29.9-.3.91-.33.9-.35.9-.38.89-.4.88-.42.87-.43.85-.47.85-.48.85-.5.83-.54.82-.53.81-.57.8-.58.8-.6.79-.62.76-.63.77-.65.73-.67.74-.7.73-.7.7-.71.7-.75.68-.75.67-.77.65-.78.65-.8.62-.82.6-.83.58-.85.58-.87.55-.88.54-.89.51-.91.49-.92.48-.95.45-.95.42-.95.41-1 .39-1 .35-1 .33-1 .3-1 .28-1 .25-1.05.22-1.06.18-1.07.17-1.08.13-1.1.09-1.09.06h-3.35l-1.11-.08-1.14-.12-1.13-.15-1.13-.2-1.14-.23-1.13-.27-1.13-.32-1.14-.36-1.11-.39-1.12-.45-1.12-.46-1.11-.54-1.1-.55-1.1-.6-1.09-.65-1.06-.68-1.07-.72-1.07-.76-1-.8-1-.85-1-.89-1-.93-1-1-.7-.73-.68-.83-.62-.85-.57-.89-.51-.9-.44-.91-.4-.92-.33-.93-.28-.94-.25-.91-.2-.94-.15-.93-.12-.92-.08-.91-.05-.9v-2.69l.05-.88.08-.87.12-.88.12-.87.15-.85.15-.86.18-.85.18-.84.22-.83.23-.88.47-1.62.53-1.62.57-1.6.62-1.56.65-1.55.66-1.5.7-1.47.7-1.42.74-1.38.75-1.33.75-1.27.75-1.22.76-1.16.77-1.12.78-1.05.79-1 .81-.93.85-.9.64-.62.66-.55.65-.5.67-.47.67-.41.66-.4.69-.37.68-.35.68-.32.72-.33 1.35-.53 1.42-.52 1.43-.45 1.45-.43 1.45-.37 1.47-.35 1.48-.3 1.47-.27 1.45-.21 1.45-.2 1.41-.15 1.4-.14 1.37-.08h1.33zm-10.18 17.91-1 .27-1 .28-.9.3-.85.3-.78.32-.29.13-.28.14-.27.13-.21.12-.19.11-.13.09-.1.06-.21.24-.34.38-.4.52-.46.63-.52.73-.52.8-.55.89-.56.95-.55 1-.57 1.05-.55 1.1-.53 1.11-.5 1.15-.49 1.17-.46 1.17-.42 1.16-.38 1.15-.34 1.19-.15.51-.13.55-.12.55-.11.54-.1.51-.09.5-.06.49-.05.48-.05.45v2.23l.05.29v.26l.05.22.05.18.05.17v.13l.05.12.07.15.08.12.08.08.62.6.67.6.65.58.65.54.66.5.64.46.65.44.63.41.63.37.62.35.63.32.6.28.62.27.62.23.6.2.58.2.6.17.6.13.58.13.59.1.58.09.58.05.59.05h2.31l.59-.05.58-.07.58-.1.57-.1.58-.11.59-.14.56-.16.59-.17.56-.18.59-.22.56-.22.57-.25.57-.25.56-.26.55-.29.55-.3.55-.31.55-.34.54-.35.53-.35.53-.36.52-.4.52-.39.5-.41.48-.42.5-.43.47-.44.46-.45.45-.45.45-.46.44-.47.41-.48.4-.5.4-.49.39-.5.36-.5.35-.5.34-.51.33-.5.3-.52.3-.52.28-.5.25-.51.25-.5.24-.52.21-.5.19-.5.18-.48.17-.49.15-.48.13-.47.1-.46.1-.45.08-.45.07-.42.05-.42v-2.25l-.05-.31-.05-.32-.07-.3-.06-.28-.1-.29-.09-.26-.11-.25-.1-.25-.14-.24-.13-.23-.15-.23-.17-.24-.09-.2-.18-.23-.22-.22-.25-.23-.25-.24-.28-.23-.32-.23-.35-.24-.37-.23-.41-.23-.45-.22-.47-.23-.53-.22-.55-.22-.6-.2-.64-.2-.68-.18-.73-.18-.77-.15-.8-.15-.85-.14-.9-.11-1-.09-1-.08-1-.05h-3.15l-.41-.07-.42-.08-.42-.1-.41-.12-.4-.15-.4-.16-.39-.19-.38-.21-.37-.22-.35-.25-.33-.25-.33-.28-.32-.3-.28-.3-.29-.34zm233.56-183.11 1 .18 1 .3.95.43.88.55.82.65.73.77.62.83.51.92.4 1 .29 1 .13 1v1.05l-.12 1-.25 1-.37 1-.48.94-.62.85-.7.76-.8.69-.86.56-1 .47-1 .33-1 .22-1 .07h-.56l-.7.07-.74.08-.78.14-.87.16-.91.22-1 .27-1 .3-1.06.35-1.12.38-1.15.43-1.18.49-1.24.51-1.25.55-1.28.59-1.32.61-1.33.67-1.35.7-1.38.72-1.4.75-1.42.78-1.43.82-1.45.83-1.47.85-1.47.88-1.46.9-3 1.87-3 1.92-3 2-3 2-3 2.07-3 2.08-2.95 2.09-2.91 2.1-2.85 2.08-2.8 2.05-2.72 2-5.2 3.9-4.81 3.7-4.3 3.27-3.78 2.88-2.62 1.95-2.62 2-2.63 1.92-2.65 1.91-2.65 1.92-2.67 1.9-2.68 1.88-2.68 1.89-2.7 1.86-2.7 1.85-2.72 1.85-2.73 1.85-2.74 1.84-2.75 1.81-5.51 3.57-5.55 3.58-5.57 3.55-5.62 3.5-5.63 3.49-5.67 3.43-5.7 3.42-5.7 3.38-5.73 3.33-5.7 3.32-5.77 3.28-5.78 3.27-5.8 3.22-5.8 3.2-5.85 3.11-5.81 3.14-5.84 3.11-5.83 3.09-5.83 3.05-5.84 3-5.83 3-5.82 3-5.83 3-5.8 2.93-5.77 2.89-.56.28-.59.32-1.45.8-1.68 1-1.92 1.15-2.11 1.28-2.29 1.4-5.05 3.17-11.4 7.18-6.06 3.8-3.1 1.92-3.09 1.92-3.08 1.88-3 1.83-3 1.8-2.95 1.72-2.9 1.65-2.8 1.57-2.7 1.46-1.33.7-1.3.65-1.27.64-1.23.6-1.22.56-1.18.54-1.15.5-1.13.46-1.12.44-1.1.38-1.08.35-1.12.3-1.13.25-1.19.2-1.18.1h-1.52l-.82-.09-.87-.15-.53-.13-.75-.23-.18-.07-1-.42-.9-.53-.83-.63-.74-.74-.65-.83-.53-.9-.42-1-.3-1-.16-1v-1l.1-1.05.22-1 .37-1 .46-.94.59-.86.7-.8.78-.69.85-.6.93-.46 1-.37 1-.23 1-.1h1.05l.5.08.43-.11.54-.19.65-.21.71-.29.82-.33.88-.38.94-.42 1-.47 1.05-.51 1.11-.55 1.15-.59 1.17-.61 2.52-1.37 2.63-1.47 2.73-1.56 2.85-1.65 2.9-1.74 3-1.78 3-1.85 3-1.87 3-1.88 6-3.78 11.41-7.19 5.12-3.2 2.37-1.46 2.21-1.35 2.07-1.24 1.9-1.1 1.72-.95.83-.45.75-.38 5.8-2.92 5.78-2.9 5.77-2.95 5.78-2.95 5.79-3 5.78-3 5.78-3 5.79-3.07 5.76-3.07 5.77-3.11 5.75-3.14 5.73-3.15 5.74-3.18 5.7-3.22 5.7-3.23 5.66-3.28 5.65-3.29 5.64-3.33 5.6-3.37 5.56-3.38 5.55-3.42 5.52-3.45 5.48-3.48 5.45-3.52 5.42-3.56 2.7-1.77 2.67-1.8 2.68-1.8 2.67-1.82 2.65-1.81 2.63-1.84 2.63-1.83 2.62-1.85 2.6-1.87 2.6-1.86 2.58-1.87 2.57-1.88 2.57-1.89 2.55-1.9 3.68-2.78 4.28-3.27 4.84-3.66 5.38-3.95 2.78-2.07 2.87-2.1 2.93-2.13 3-2.15 3-2.17 3.1-2.17 3.14-2.13 3.15-2.12 3.16-2.08 3.19-2 3.15-2 1.6-1 1.58-1 1.58-.94 1.59-.9 1.56-.88 1.57-.87 1.55-.83 1.55-.82 1.53-.78 1.54-.75 1.51-.73 1.52-.69 1.5-.66 1.48-.64 1.49-.58 1.48-.55 1.45-.52 1.45-.48 1.45-.43 1.45-.39 1.43-.33 1.44-.28 1.41-.24 1.44-.18 1.38-.1h1.38zm-339.21 199.33-.19-.07-.36-.08z"/><path d="m580.5 154 .88.14.82.18.77.23.7.25.66.29.62.3.58.31.6.35 1 .62.95.7.9.73.85.74.82.75.78.78.77.78.73.8.72.8.71.82.7.82 1.3 1.56 1.22 1.54 1.13 1.43 1 1.27.85 1.05.69.8.16.2.2.21 1 1 1.2 1.27 1.35 1.46 1.47 1.62 1.61 1.8 1.74 2 1.83 2.08 1.92 2.24 2 2.33 2.07 2.43 2.13 2.54 2.17 2.61 2.2 2.67 2.22 2.72 2.21 2.75 2.2 2.76 2.19 2.79 2.15 2.78 2.03 2.7 2 2.72 1.95 2.68 1.89 2.63 1.75 2.55.85 1.25.81 1.24.79 1.21.76 1.19.72 1.16.68 1.15.65 1.14.62 1.1.58 1.08.54 1.07.51 1.06.45 1.05.44 1.05.38 1.07.33 1.12.29 1.18.18 1.18.07.77v1.57l-.18 1.08-.32 1-.45 1-.56.92-.7.85-.8.73-.89.64-1 .51-1 .39-1.07.25-1.08.1h-1.08l-1.09-.18-1-.32-1-.45-.92-.58-.85-.68-.73-.8-.63-.89-.52-1-.38-1-.25-1.07-.09-.83v-.07l-.08-.23-.13-.37-.19-.48-.25-.57-.31-.66-.37-.72-.43-.8-.47-.85-.53-.9-.57-.95-.6-1-.67-1-.68-1.07-.73-1.1-.77-1.13-1.63-2.37-1.75-2.45-1.85-2.53-1.94-2.64-2-2.64-2.06-2.68-2.14-2.68-2.13-2.69-2.15-2.68-2.15-2.63-2.15-2.6-2.12-2.55-2.1-2.45-2-2.4-2-2.27-1.87-2.17-1.76-2-1.67-1.87-1.48-1.69-1.4-1.53-1.24-1.32-1.05-1.15-.93-1-.45-.49-.53-.6-1-1.13-1-1.25-1-1.32-1.1-1.38-1.12-1.38-1.15-1.39-.55-.65-.55-.63-.55-.62-.53-.56-.5-.54-.49-.46-.18-.17-3.85 1.93-6.8 3.49-6.78 3.51-6.77 3.64-6.7 3.6-6.75 3.65-6.73 3.68-6.72 3.72-6.8 3.77-6.7 3.78-6.65 3.8-6.7 3.85-6.68 3.89-6.67 3.91-6.67 3.95-6.66 4-6.67 4-6.65 4-6.67 4.05-6.65 4-6.63 4.12-6.65 4.1-13.35 8.21-13.31 8.29-13.32 8.31-26.72 16.7-1.45.9-1.5.9-1.5.9-1.53.89-1.55.88-1.57.88-3.15 1.72-3.21 1.72-3.19 1.68-3.3 1.67-3.34 1.66-3.36 1.67-3.39 1.65-6.8 3.28-6.8 3.3-3.38 1.67-3.37 1.67-3.35 1.66-3.3 1.7-3.28 1.72-3.22 1.72-3.21 1.78-1.55.88-1.55.88-1.52.9-1.51.9-1.49.9-1.48.9-1.45.92-1.43.93-1.4.94-1.39.93-1.36.93-1.34.95-1.31 1-1.29 1-1.25 1-1.23 1-1.2 1-1.17 1-1.13 1-1.1 1-1.08 1-.14.13v1.37l.06.7.12.78.13.87.19.93.2 1 .25 1 .28 1.1.3 1.15.35 1.18.37 1.24.4 1.26.41 1.3.45 1.34.49 1.35.48 1.38.52 1.4 1.08 2.87 1.15 2.93 1.22 3 1.23 3 1.27 3 1.3 3 1.32 2.76 2.57 5.74 2.45 5.4 2.23 4.95 1 2.28.93 2.12.85 2 .75 1.8.63 1.64.3.8.2.58.19.5.21.48.29.64.38.71.43.82.5.87.54.93.58.95 1.28 2 1.34 2.07 2.7 4.07 1.25 1.91 1.13 1.79.53.86.49.85.46.87.47 1 .28.71.25.72.05.18.19.75v.15l.1.64v1.7l-.13.95v.1l-.25.95-.35.91-.45.87v.07l-.53.78-.62.72-.7.63-.75.55-.06.05-1 .55-1.05.4-1.1.27h-.09l-1.13.12-1.13-.05h-.12l-.7-.1-.7-.16h-.15l-.88-.3-.47-.2-.72-.35-.65-.38-.78-.5-.87-.65-.78-.77-.67-.86-.56-.94-.42-1-.3-1-.15-1.08v-1.13l-.83-1.29-2.72-4.11-1.45-2.22-1.4-2.23-.71-1.17-.67-1.13-.63-1.14-.62-1.13-.58-1.13-.55-1.15-.5-1.17-.39-1-.2-.57-.16-.5-.52-1.3-.65-1.55-.78-1.81-.89-2-1-2.2-2.22-5.13-2.45-5.43-2.6-5.82-1.34-3-1.31-3.07-1.32-3.1-1.3-3.1-1.27-3.12-1.21-3.1-1.12-3.09-.57-1.54-.53-1.51-.53-1.5-.5-1.49-.49-1.46-.45-1.45-.43-1.44-.4-1.41-.38-1.4-.35-1.39-.32-1.36-.28-1.34-.25-1.33-.22-1.3-.17-1.3-.13-1.3-.08-1.28v-2.52l.05-.72.09-.66.08-.69.12-.66.16-.69.19-.7.21-.71.27-.72.32-.72.36-.73.44-.72.5-.71.55-.7.53-.59 1.37-1.33 1.3-1.22 1.31-1.21 1.35-1.19 1.39-1.16 1.4-1.15 1.41-1.14 1.45-1.11 1.47-1.12 1.48-1.08 1.5-1.07 1.54-1.05 1.53-1.05 1.57-1 1.56-1 1.59-1 1.6-1 1.61-1 1.64-1 1.65-.95 1.65-.95 1.66-.95 3.35-1.84 3.39-1.81 3.4-1.79 3.43-1.75 3.43-1.73 3.45-1.72 3.45-1.68 6.84-3.32 6.78-3.28 3.33-1.62 3.3-1.63 3.24-1.62 3.18-1.61 3.13-1.62 3-1.62 3-1.63 1.43-.82 1.43-.81 1.42-.82 1.38-.82 1.37-.81 1.35-.84 26.67-16.68 13.35-8.33 13.33-8.3 13.33-8.24 6.69-4.11 6.68-4.09 6.68-4.08 6.69-4.05 6.7-4 6.7-4 6.7-4 6.71-4 6.74-4 6.73-3.91 6.75-3.89 6.75-3.86 6.77-3.84 6.78-3.78 6.78-3.77 6.82-3.71 6.82-3.7 6.83-3.65 6.85-3.6 6.87-3.57 6.88-3.53 7.08-3.57.42-.18.83-.32.24-.07.81-.21.25-.05.82-.12h1.65z"/><path d="m596.1 112.83h1.17l1.15.06 1.16.1 1.15.12 1.14.15 1.13.18 1.13.2 1.12.22 1.12.25 1.11.28 1.1.29 1.1.31 1.09.35 1.06.37 1.09.38 1.05.4 1.03.51 1 .45 1 .46 1 .49 1 .5 1 .51 1 .55 1 .55 1 .59 1 .58 1 .6 1 .63 1 .64 1 .65.93.66.94.69.91.7.92.71.92.72.9.73.88.75.88.77.89.78.86.79.89.81 1.66 1.6 1.67 1.69 1.63 1.7 1.6 1.75 1.59 1.8 1.53 1.81 1.52 1.85 1.46 1.89 1.45 1.9 1.42 1.93 1.38 2 1.35 2 1.32 2 1.28 2 1.25 2 1.22 2.05 1.18 2.05 1.15 2 1.12 2.06 1.08 2.09 1.05 2.06 1 2.09 1 2.06.93 2.07.9 2.07.87 2.05.83 2 .8 2 .75 2 .72 2 .66 2 .64 2 .6 2 .55 1.93.51 1.92.47 1.88.43 1.87.35 1.68v.15l.17.57.27.78.36 1 .45 1.17.54 1.33 1.23 3.07 1.38 3.43 1.47 3.74.77 2 .75 2 .75 2 .71 2.05.7 2.06.67 2.07.62 2.07.56 2 .27 1 .25 1 .23 1 .22 1 .18 1 .19 1 .15 1 .11 1 .1 1 .07 1v2l-.05 1-.06 1.35-.17 1.08-.25 1.1-.33 1.14-.32.8-.13.35-.17.35-.36.73-.4.67-.39.56-.43.59-.47.55-.51.51-.54.52-.6.48-.61.44-.65.4-.62.33-.82.38-.78.34-.78.3-.8.26-.79.22-.78.18-.8.17-.78.12-.77.1-.77.06-.76.05h-2.22l-.73-.05-.75-.06-1.35-.17-1.35-.22-1.32-.28-1.28-.3-1.25-.33-1.22-.37-1.18-.38-1.17-.39-2.18-.78-2.09-.77-2-.73-.9-.32-.87-.3-.83-.26-.77-.22-.71-.2-.64-.15-.58-.12-.55-.06h-1.45l-.65-.1-.65-.13-.62-.18-.61-.25-.59-.29-.56-.31-.54-.39-.51-.41-.47-.45-.43-.49-.4-.51-.35-.55-.32-.59-.27-.6-.21-.61-.17-.64-.12-.63-.06-.65v-.67l.05-.65.08-.65.14-.63.18-.63.25-.6.28-.6.32-.57.38-.53.42-.5.45-.49.48-.43.52-.4.55-.35.58-.3.6-.27.62-.21.63-.17.64-.12.66-.06h1.9l.69.05.71.08 1.24.19 1.25.23 1.21.28 1.19.32 1.16.35 1.12.37 1.12.36 1.08.39 2.1.67 2 .75 2 .7.9.3.88.29.87.26.83.22.78.18.74.15.68.12.68.08h1.02v-.48l-.07-.57-.1-.61-.12-.67-.13-.68-.15-.74-.17-.76-.2-.77-.2-.8-.46-1.7-.54-1.75-.58-1.8-.62-1.83-.65-1.87-.68-1.87-.7-1.86-.72-1.84-1.43-3.61-1.37-3.4-1.25-3.12-.56-1.45-.54-1.35-.46-1.27-.42-1.21-.35-1.12-.17-.68-.13-.54-.35-1.65-.35-1.55-.4-1.6-.51-1.6-.49-1.67-.51-1.7-.55-1.73-.6-1.75-.64-1.78-.66-1.79-.72-1.81-.73-1.84-.79-1.85-.8-1.85-.85-1.85-.88-1.86-.9-1.87-.95-1.88-1-1.85-1-1.87-1-1.85-1.06-1.85-1.09-1.83-1.11-1.82-1.15-1.8-1.19-1.78-1.2-1.75-1.21-1.74-1.25-1.71-1.29-1.67-1.28-1.65-1.32-1.62-1.33-1.58-1.37-1.55-1.36-1.5-1.4-1.45-1.4-1.42-1.45-1.38-.7-.65-.72-.65-.72-.65-.73-.62-.73-.61-.74-.6-.73-.59-.73-.58-.75-.55-.74-.55-.75-.53-.75-.5-.75-.5-.75-.49-.75-.48-.75-.45-.75-.43-.75-.42-.76-.42-.75-.38-.77-.37-.75-.36-.75-.34-.77-.33-.75-.3-.76-.28-.75-.29-.77-.25-.75-.23-.77-.23-.75-.2-.76-.19-.75-.16-.77-.15-.77-.14-.75-.11-.76-.1-.77-.09-.75-.06h-4.62l-.76.06-.79.1-.78.1-.78.12-.8.15-.79.17-.78.2-.32.06-.26.09-.25.08-.25.1-.2.08-.2.09-.19.08-.16.08-.15.1-.14.09-.13.08-.12.08-.1.09-.1.08-.1.08-.08.09-.08.08-.09.1-.06.1-.09.08-.06.12-.09.12-.06.11-.09.14-.06.13-.07.15-.07.15-.05.12-.15.43-.13.42-.1.46-.1.5-.08.57-.07.6v3.55l.07.8.08.83.1.85.13.87.14.87.16.9.19.9.18.91.2.89.47 1.86.48 1.85.5 1.82.53 1.8.52 1.75 1 3.35.46 1.58.44 1.54.36 1.45.17.78.15.75.13.78.1.85v2.84l-.08.58-.13.6-.07.25-.18.58-.24.57v.12l-.22.43-.23.43v.1l-.32.5-.35.49-.06.06-.44.5-.45.47-.08.07-.5.41-.52.39-.56.35-.59.28-.6.25-.61.22-.65.15-.64.1-.66.05h-.65l-.65-.05-.65-.12-.64-.15-.69-.2-.6-.25-.59-.3-.56-.33-.54-.4-.48-.42-.47-.47-.43-.5-.38-.51-.34-.57-.3-.58-.31-.67-.2-.64-.15-.63-.1-.65-.05-.65v-.65l.05-.65.1-.65v-.1l-.27-1-.33-1.22-.42-1.41-1-3.3-.55-1.84-.57-1.95-.56-2-.57-2.12-.52-2.16-.26-1.14-.24-1.13-.21-1.13-.22-1.15-.18-1.17-.19-1.18-.15-1.19-.11-1.2-.1-1.2-.07-1.2v-3.68l.08-1.25.14-1.23.18-1.27.25-1.25.3-1.27.38-1.26.42-1.2.28-.67.29-.63.28-.62.32-.62.35-.6.36-.6.39-.6.41-.58.44-.58.46-.55.49-.55.5-.54.53-.51.55-.5.57-.49.58-.46.62-.45.63-.42.63-.4.67-.37.68-.36.69-.34.71-.31.72-.29.73-.26.74-.25.75-.22.76-.2 1.2-.28 1.19-.27 1.2-.22 1.18-.18 1.18-.17 1.19-.13 1.18-.1 1.18-.07h3.52zm-21.3 51.55-.22.29.17-.2.45-.45z"/><path d="m674.83 51.18.54.07.53.08.52.14.51.16.5.19.49.21.46.27.45.28.44.3.41.35.39.37.36.38.35.42.3.43.3.45.25.47.22.48.2.5.17.5.11.52.1.53.07.54v1.63l-.05.37-.06.53-.2.87-.25.8-.3.75-.2.43-.2.35-.2.37-.22.33-.23.38-.27.37-.27.35-.23.28-.25.29-.52.56-.78.72-.75.62-.75.56-.75.5-.73.45-.72.44-.73.4-.75.38-1.37.68-1.38.62-1.32.57-2.32 1-.93.4-.7.3-.38.2-1.69 1.05-1.83 1.18-3.63 2.33-3.69 2.3-3.7 2.25-3.68 2.25-3.7 2.22-7.37 4.42-3.63 2.21-3.62 2.22-3.55 2.25-1.77 1.12-1.76 1.13-1.74 1.14-1.73 1.15-1.72 1.15-1.7 1.16-1.68 1.15-1.65 1.18-1.65 1.19-1.6 1.2-1.37 1.05-2.33 1.83-1.38 1.1-1.52 1.22-1.5 1.25-1.5 1.28-1.41 1.25-1.32 1.22-.55.53-.52.5-.43.47-.14.5-.18.5-.22.5-.25.47-.28.47-.3.43-.33.42-.35.4-.39.36-.41.35-.42.32-.45.3-.47.25-.48.23-.5.2-.5.19-.52.13-.51.1-.54.07h-1.6l-.53-.07-.53-.1-.52-.13-.5-.17-.5-.2-.48-.23-.47-.25-.4-.31-.44-.32-.41-.35-.39-.37-.35-.4-.08-.08-.33-.42-.3-.43-.29-.45-.25-.47v-.11l-.2-.45-.18-.49-.15-.48-.12-.48v-.12l-.07-.42-.05-.4v-1.86l.05-.44v-.15l.1-.51.12-.5.05-.15.12-.39.13-.38.18-.47.39-.8.58-1 .67-.94.63-.81.67-.79.68-.73.72-.73.73-.74.78-.75 1.57-1.45 1.65-1.45 1.67-1.43 1.66-1.4 1.6-1.3 1.5-1.22 2.36-1.94 1.55-1.18 1.78-1.32 1.78-1.28 1.79-1.28 1.8-1.25 1.81-1.25 1.82-1.22 1.83-1.22 1.84-1.18 1.83-1.18 1.87-1.19 3.68-2.3 3.72-2.28 3.71-2.25 7.39-4.43 3.66-2.2 3.64-2.2 3.6-2.22 3.55-2.22 3.5-2.23 1.71-1.12 1.85-1.21.55-.35.67-.37 1.07-.5 1.1-.5 1.1-.46 2.25-.94 1.09-.46 1-.47 1-.48.38-.2.37-.2.26-.15v-.1l.23-.49.28-.45.29-.45.33-.41.35-.4.38-.39.4-.35.42-.33.45-.3.45-.27.48-.25.49-.2.51-.18.5-.13.54-.12.51-.08h1.6zm-81.3 67.14v-.17zm-1.15-2.14.3.44.2.33-.21-.47-.62-.71zm199.62 76.5.57.07.57.12.55.15.53.2.52.21.5.27.5.28.46.34.44.36.41.39.4.41.35.44.34.46.3.49.26.5.22.51.2.55.15.54.12.56.08.57v1.7l-.07.57-.11.55-.15.55-.14.53-.23.53-.25.5-.3.49-.33.46-.35.45-.39.42-.41.38-.45.37-.45.33-.5.3-.5.25-.52.24-.53.2-.55.15-.55.11-.57.09h-1.27l-.33.06-.43.12-.5.15-.59.2-.63.23-.7.29-.75.31-.78.35-.84.39-.86.43-.9.47-.94.48-1 .53-1 .55-1 .57-2.12 1.25-2.18 1.33-2.25 1.42-2.3 1.48-2.35 1.55-2.37 1.6-2.38 1.64-2.4 1.66-2.4 1.69-2.37 1.7-2.35 1.68-4.6 3.35-4.38 3.2-4.09 3-3.71 2.72-1.7 1.33-1.6 1.15-1.48 1-1.35.93-2.85 1.92-2.89 1.83-2.91 1.82-2.92 1.78-2.92 1.77-2.9 1.73-5.73 3.44-.57.31-.68.37-1.48.78-1.67.89-1.68.9-1.52.83-.52.3-.1.1-.41.4-.45.35-.47.33-.48.29-.52.26-.52.22-.53.2-.5.1-.55.12-.57.06h-1.71l-.55-.08-.62-.1-.55-.15-.53-.2-.52-.23-.5-.25-.48-.3-.47-.33-.45-.37-.4-.38-.4-.42-.35-.45-.3-.43-.26-.43-.25-.45-.22-.47-.18-.48-.15-.5-.14-.5-.1-.55-.06-.53v-1.1l.05-.54.08-.55.12-.53.15-.52v-.08l.2-.53.21-.5.27-.5.28-.47.32-.47.07-.08.26-.33.3-.38.3-.3.11-.11.35-.32.37-.28.58-.47.9-.6.85-.52.87-.5 1.78-1 1.84-1 1.68-.88 1.37-.72.41-.25.29-.15 5.61-3.35 2.87-1.71 2.85-1.72 2.82-1.73 2.78-1.74 2.72-1.73 2.65-1.73 1.15-.79 1.33-.93 1.5-1.07 1.63-1.16 3.65-2.67 4.09-3 4.41-3.22 4.65-3.4 2.42-1.71 2.45-1.75 2.45-1.74 2.48-1.73 2.5-1.7 2.49-1.68 2.48-1.64 2.45-1.58 2.43-1.53 2.4-1.47 2.34-1.37 1.16-.68 1.15-.63 1.15-.62 1.12-.58 1.12-.54 1.1-.55 1.08-.52 1.08-.48 1.07-.45 1.07-.42 1.06-.4 1.05-.35 1.07-.33 1.08-.27 1.09-.25 1.13-.18 1.17-.12h1.45z"/><path d="m714 0 1.83.07 1.82.12 1.8.16 1.8.2 1.78.25 1.77.29 1.76.31 1.74.37 1.73.4 1.72.45 1.71.47 1.69.51 1.68.55 1.67.59 1.65.63 1.63.65 1.63.68 1.6.72 1.6.75 1.59.78 1.56.82 1.55.85 1.54.87 1.53.9 1.5.93 1.5 1 1.48 1 1.47 1 1.45 1 1.45 1.06 1.43 1.07 1.4 1.12 1.42 1.11 1.38 1.15 1.39 1.17 1.37 1.2 1.38 1.2 1.33 1.23 1.33 1.25 1.3 1.29 1.3 1.28 1.3 1.3 1.27 1.33 1.27 1.34 1.25 1.35 1.23 1.38 1.22 1.38 1.21 1.4 1.2 1.42 1.2 1.43 1.17 1.44 1.17 1.46 1.16 1.47 1.09 1.47 1.13 1.5 1.13 1.5 1.1 1.51 1.1 1.52 1.09 1.53 1.08 1.54 1.07 1.55 1 1.55 1.05 1.58 2 3.13 2 3.17 2 3.2 1.92 3.2 1.88 3.22 1.83 3.23 1.8 3.22 1.87 3.23 1.7 3.23 1.68 3.22 1.64 3.22 1.58 3.2 1.55 3.13 1.5 3.15 1.47 3.14 1.43 3.1 1.38 3 1.35 3 1.3 3 1.27 2.93 1.22 2.88 1.2 2.84 1.13 2.76 1.1 2.72 1.07 2.63 2.6 6.45 1.41 3.6.74 1.9.73 1.94.73 2 .74 2 .73 2.06.7 2.09.7 2.13.68 2.15.65 2.18.62 2.2.58 2.22.54 2.25.5 2.25.45 2.23.2 1.15.2 1.14.16 1.15.17 1.13.15 1.13.12 1.15.11 1.14.09 1.15.06 1.13v5.72l.02 1.21-.1 1.13-.12 1.14-.15 1.13-.18 1.13-.2 1.12-.25 1.13-.28 1.1-.3 1.12-.37 1.15-.4 1.08-.47 1.09-.53 1.06-.6 1-.67 1-.73.93-.8.89-.85.8-.92.75-.95.67-1 .6-1 .52-1 .43-1 .37-1 .3-1 .21-1 .17-1 .12-1 .05h-2.95l-.92-.1-.91-.13-.9-.17-.89-.18-.88-.2-.87-.24-.85-.23-.85-.27-.81-.28-.84-.3-.8-.32-.83-.33-1.53-.67-1.54-.71-1.48-.77-1.43-.77-1.4-.8-1.32-.8-1.28-.8-1.2-.8-1.07-.73-.47.4-.66.47-.72.4-.75.31-.78.25-.8.19-.82.08h-.82l-.81-.07-.8-.15-.79-.23-.76-.3-.72-.37-.68-.45-.65-.5-.59-.58-.53-.62-.47-.67-.38-.71-.33-.75-.25-.79-.17-.8-.1-.81v-.82l.07-.82.15-.8.21-.78.3-.77.39-.71v-.19l-.07-.4-.08-.47-.1-.52-.13-.56-.17-.62-.18-.67-.22-.7-.23-.71-.25-.77-.29-.78-.3-.79-.66-1.71-.75-1.75-.8-1.82-.85-1.85-.9-1.87-1-1.86-1-1.89-1-1.85-1-1.81-1-1.79-1-1.73-1-1.65-.95-1.57-.93-1.46-.87-1.35-.83-1.24-.75-1.08-.67-.92-.55-.71-.43-.52-.08-.1-.14-.13-.66-.69-.75-.8-.72-.8-.7-.81-.68-.82-.67-.83-.65-.85-.63-.85-.64-.85-.6-.87-.58-.87-.58-.88-1.1-1.73-1.01-1.7-1-1.78-1-1.79-1-1.8-.92-1.78-.9-1.78-.86-1.79-1.7-3.5-1.67-3.45-.82-1.68-.83-1.65-.82-1.62-.83-1.56-.83-1.54-.85-1.5-.87-1.43-.88-1.42-.44-.65-.43-.66-.45-.65-.47-.64-.45-.61-.46-.6-.47-.59-.47-.56-.48-.55-.48-.54-.49-.51-.5-.52-1.71-1.68-1.75-1.69-1.8-1.65-1.85-1.65-1.87-1.61-1.92-1.62-2-1.6-2-1.58-2-1.57-2-1.55-2.06-1.53-2.1-1.52-2.12-1.48-2.13-1.49-2.17-1.46-2.18-1.44-2.2-1.43-2.22-1.4-2.22-1.38-2.25-1.39-2.25-1.33-2.25-1.33-2.26-1.32-2.27-1.28-2.27-1.29-2.28-1.25-2.2-1.28-2.26-1.2-2.27-1.2-2.27-1.17-2.25-1.15-2.35-1.18-1-.52-1-.65-1-.68-1-.72-.92-.78-.85-.8-.82-.85-.76-.87-.74-.9-.66-.91-.65-.95-.6-1-.55-1-.54-1-.48-1-.45-1-.42-1-.38-1-.35-1.07-.33-1.06-.29-1.09-.26-1.08-.24-1.1-.2-1.1-.16-1.1-.15-1.12-.12-1.1-.08-1.11-.07-1.14v-3.35l.05-1.11.08-1.12.1-1.12.13-1.11.15-1.1.19-1.12.21-1.1.25-1.08.27-1.09.3-1.06.33-1.09.37-1.05.4-1.05.43-1 .47-1 .52-1 .53-1 .58-1 .62-1 .65-.93.7-.9.75-.9.78-.85.84-.84.88-.78.89-.8 1-.72 1-.66 1.07-.6 1.1-.55 1.15-.5 1.1-.42 2-.65 1.95-.57 1.94-.53 1.93-.48 1.92-.44 1.91-.38 1.92-.33 1.9-.3 1.9-.24 1.88-.2 1.93-.15 1.88-.1 1.85-.08h1.85zm-3.35 16.65-1.45.05-1.49.09-1.46.11-1.5.15-1.5.2-1.52.24-1.52.26-1.55.3-1.55.35-1.56.4-1.57.42-1.6.48-1.53.49-.35.13-.27.12-.27.13-.26.15-.27.17-.25.2-.28.21-.27.24-.27.26-.26.3-.27.32-.27.35-.26.38-.27.4-.27.45-.25.45-.23.5-.25.5-.22.55-.21.55-.2.59-.19.6-.18.61-.15.64-.15.66-.13.67-.12.67-.1.68-.07.7-.06.7v4.35l.07.71.07.7.1.69.1.68.13.67.13.66.15.65.17.62.18.62.2.58.22.58.22.55.23.52.23.5.25.48.25.44.27.43.27.38.26.37.27.33.28.32.27.28.27.25.26.22.27.22.27.18.26.15.39.2 2.2 1.12 2.33 1.2 2.35 1.21 2.37 1.24 2.36 1.26 2.37 1.29 2.37 1.3 2.36 1.28 2.39 1.35 2.34 1.35 2.37 1.4 2.37 1.41 2.36 1.44 2.35 1.46 2.34 1.49 2.33 1.51 2.32 1.54 2.3 1.55 2.28 1.58 2.25 1.62 2.23 1.62 2.23 1.65 2.2 1.66 2.19 1.69 2.15 1.71 2.11 1.75 2.09 1.75 2.06 1.8 2 1.8 2 1.84 2 1.86 1.91 1.9.74.75.73.79.72.78.68.8.68.82.65.81.64.84.63.83.6.85.6.85.57.85.58.88 1.07 1.72 1 1.75 1 1.77 1 1.76.94 1.79.91 1.76.89 1.79.86 1.76 1.69 3.49 1.66 3.45.84 1.68.83 1.65.83 1.62.84 1.6.85 1.55.86 1.5.94 1.48.92 1.45.43.65.45.68.47.65.46.65.47.63.48.62.49.6.48.58.5.57.5.55.5.55.62.62.38.41.48.54.84 1 .88 1.15.9 1.23.93 1.35 1 1.45 1 1.57 1 1.65 1.07 1.73 1.06 1.82 1.1 1.9 1.1 1.93 1.09 2 1.08 2 1.08 2.07 1 2.08 1 2.09 1 2.1.93 2.08.87 2.08.8 2 .38 1 .37 1 .33 1 .34 1 .3 1v.1h.07l.77.25.75.33.71.4.67.49.62.53.36.33.37.34.5.41.62.49.71.53.79.58.86.59.94.61 1 .62 1 .62 1.05.6 1.08.58 1.05.57 1.06.52 1.12.48.5.2.52.2.5.19.5.16.48.15.48.15.45.12.44.1.41.08.39.07.36.05h1.62l.05-.08.07-.14.08-.2.12-.3.16-.53.17-.62.17-.63.13-.65.13-.65.1-.7.1-.7.07-.73.07-.74v-4.81l-.05-.85-.06-.87-.09-.87-.1-.9-.1-.88-.13-.92-.13-.91-.17-.92-.17-.92-.36-1.91-.44-1.9-.46-1.92-.5-1.93-.55-1.95-.59-2-.6-1.94-.63-1.93-.65-1.92-.68-1.91-.69-1.89-.6-1.75-.7-1.83-.68-1.8-1.39-3.5-2.58-6.4-1-2.6-1.15-2.65-1.11-2.7-1.15-2.75-1.19-2.8-1.23-2.85-1.27-2.9-1.3-2.92-1.35-3-1.36-3-1.42-3-1.45-3-1.5-3.06-1.53-3.07-1.57-3.08-1.57-3.09-1.63-3.08-1.69-3.1-1.68-3.1-1.75-3.07-1.79-3.05-1.83-3-1.85-3-1.9-3-1.93-3-1-1.46-1-1.45-1-1.45-1-1.44-1-1.43-1-1.42-1-1.4-1-1.4-1.05-1.36-1.07-1.37-1.05-1.35-1.18-1.37-1.08-1.32-1.09-1.31-1.1-1.29-1.1-1.28-1.11-1.25-1.12-1.25-1.13-1.22-1.14-1.21-1.15-1.19-1.15-1.16-1.15-1.15-1.16-1.14-1.19-1.1-1.18-1.1-1.18-1.06-1.2-1-1.2-1-1.2-1-1.22-1-1.23-1-1.22-.92-1.23-.92-1.25-.83-1.25-.87-1.25-.82-1.25-.81-1.27-.77-1.28-.73-1.27-.73-1.28-.7-1.3-.67-1.29-.63-1.3-.62-1.31-.65-1.32-.55-1.32-.54-1.31-.5-1.34-.41-1.33-.44-1.35-.41-1.35-.37-1.35-.35-1.37-.32-1.36-.28-1.37-.3-1.38-.21-1.38-.19-1.44-.13-1.4-.12-1.42-.1-1.43-.05h-1.43zm91.55 180.67-.13.16.21-.23zm-542.03 178.3.71.06.65.12.7.13 1.07.29 1.05.35 1 .4.9.4.85.43.82.43.8.45 1.4.84 1.28.81h.6l.55.05.53.07.53.12.54.13.51.18.5.2.49.25.48.27.45.32.43.33.4.35.39.4.36.4.32.43.3.47.28.47.24.48.21.52.17.51.13.52.1.4.09.43.06.44v2.35l-.06.46-.09.47-.11.45v.1l-.13.43-.17.42-.18.42-.2.4-.05.08-.22.38-.25.37-.25.35-.28.35-.3.32-.05.06-.32.32-.33.3-.35.27-.37.26-.38.24-.07.05-.45.25-.45.21-.46.19-.49.16h-.08l-.4.1-.42.1-.4.06-.41.05h-1.9l-.45-.06-.44-.09-.25-.05-.36-.1-.37-.1-.35-.11-.63-.24-.87-.4-.73-.38-.65-.37-.62-.38-1.12-.7-1.11-.72-1.07-.68-1-.62-.44-.25-.26-.13-.29.15-.75.43-1.58.92-1.58 1-1.6 1-1.64 1.08-1.63 1.15-1.63 1.18-1.67 1.22-1.67 1.27-1.68 1.31-1.7 1.34-1.7 1.36-1.7 1.39-3.47 2.86-3.48 2.9-3.5 3-3.55 2.95-3.55 2.92-1.8 1.45-1.8 1.43-1.82 1.42-1.93 1.39-1.84 1.37-1.83 1.33-1.85 1.3-1.88 1.29-.64.4-.68.41-1.37.8-1.5.84-1.6.88-1.65.92-1.68.95-1.67 1-1.65 1-.75.48-.75.47-.7.48-.65.45-.6.43-.53.42-.47.38-.38.35-.22.2-.13.49-.18.51-.22.5-.25.49-.28.46-.3.45-.35.44-.37.4-.38.38-.42.35-.43.32-.47.3-.47.26-.5.24-.5.2-.51.16-.54.14-.53.1-.55.06h-1.63l-.54-.09-.53-.11-.53-.15-.52-.19-.5-.21-.48-.25-.47-.29-.45-.3-.42-.33-.41-.37-.37-.4-.37-.41-.31-.44-.3-.45-.27-.48-.23-.5-.2-.5-.17-.52-.13-.53-.1-.53-.07-.55v-2.09l.08-.61.2-.9.27-.85.3-.79.33-.71.37-.67.36-.63.4-.57.44-.6.76-.93.84-.9.86-.82.87-.78.9-.74.9-.7.93-.68.94-.67 1-.63.95-.62 1-.61 1.9-1.14 1.9-1.1 1.82-1 1.71-.95 1.55-.87 1.34-.75 1.08-.63.37-.22.3-.18 1.6-1.1 1.65-1.15 1.65-1.2 1.66-1.24 1.67-1.28 1.68-1.32 1.7-1.35 1.7-1.36 3.45-2.84 3.47-2.88 3.5-2.93 3.53-3 3.55-2.92 1.79-1.46 1.8-1.44 1.8-1.43 1.81-1.4 1.82-1.38 1.83-1.35 1.85-1.34 1.85-1.28 1.87-1.25 1.87-1.22 1.9-1.16 1.88-1.1 1-.55.95-.52 1-.52 1.11-.56.42-.19.35-.15.37-.13.21-.07.31-.17.35-.1.55-.12.87-.15.85-.07h.78zm25.7 44.06h.86l.42.07.43.08.42.1.4.13h.1l.43.16.44.19.43.21.4.24.4.26.38.29.35.3.35.31.07.07.32.35.31.35.29.38.26.39.24.41.21.42.2.43.17.44v.1l.15.48.12.48.1.5.05.5v1.5l-.07.5-.08.5-.12.49-.15.48-.18.48-.2.45-.24.45-.26.44-.29.41-.3.4-.33.37-.35.37-.38.33-.4.3-.42.3-.42.25-.45.25-.46.2-.47.18-.48.15-.49.12h-.06l-.52.36-.72.54-.8.6-1.83 1.41-2 1.62-2.1 1.73-2.15 1.79-2.1 1.78-3.92 3.33-3.1 2.62-1.17 1-.56.45-.55.38-1.55 1.15-1.57 1-1.61 1-1.67 1-1.7 1-1.73 1-1.77 1-1.8 1-3.65 1.73-3.7 1.94-3.7 1.95-3.68 1.93-3.64 1.95-1.75 1-1.73 1-1.68 1-1.65 1-1.6.95-1.54 1-1.46.94-1.4.95-1.34.91-1.23.92-1.18.9-.52.43-.52.42-.48.43-.47.42-.43.4-.47.47-.36.33-.4.33-.4.29-.44.26-.43.25-.47.22-.46.18-.47.17-.5.12-.48.1-.5.08h-1.5l-.52-.05-.48-.09-.5-.1-.49-.15-.46-.16-.47-.2-.45-.22-.43-.25-.42-.28-.4-.3-.38-.34-.37-.35-.35-.36-.32-.4-.28-.4-.28-.44-.24-.43-.21-.45-.19-.47-.16-.48-.14-.48-.1-.5-.06-.5v-1.5l.05-.5.07-.5.11-.5.15-.49.17-.46.2-.47.22-.45.25-.43.28-.42.3-.4.33-.38.35-.37.59-.58.68-.64.7-.63.72-.62.73-.61.75-.62 1.5-1.17 1.58-1.15 1.62-1.13 1.67-1.12 1.71-1.1 1.75-1.08 1.8-1.25 1.8-1.06 1.83-1.05 1.85-1 1.88-1 3.75-2 3.77-2 3.73-2 3.65-1.92 3.55-1.86 1.7-.94 1.67-.9 1.62-.9 1.53-.88 1.48-.87 1.42-.85 1.33-.83 1.14-.75.16-.12.9-.75 3-2.51 3.91-3.34 2.17-1.83 2.16-1.84 2.21-1.82 2.17-1.75 2-1.58 1-.75.95-.7.91-.65.92-.6.92-.58.95-.52.68-.32.75-.3.5-.15.33-.1.34-.08.35-.07h.15l.4-.07h1.18z"/><path d="m148.25 408.62.6.08.6.12.6.16.17.07h1.71l.62.06.62.1.6.17.6.2.56.25.55.28.54.34.5.36.48.4.43.44.42.48.37.5.33.52.3.55.25.56.22.59v.1l1.75 1.25 3.44 2.5 3.16 2.3 2.54 1.83 1.63 1.18 1.67 1.25 1.7 1.32 1.69 1.42 1.7 1.42 1.68 1.45 1.67 1.5 1.63 1.53.82.82.82.8.8.81.78.84.78.83.77.85.75.87.73.88.74.88.71.9.7.92.67.93.67.94.65.95.61 1 .6 1 .67 1.11.65 1.15.65 1.19.65 1.21.65 1.27.65 1.3.65 1.33.63 1.37.64 1.4.63 1.42.62 1.46.61 1.49.6 1.5.59 1.53.58 1.57.57 1.58.55 1.6.51 1.62.52 1.65.5 1.65.47 1.66.45 1.7.43 1.7.4 1.7.37 1.74.35 1.71.33 1.74.28 1.75.25 1.75.24 1.75.18 1.76.15 1.75.1 1.77.08 1.75v3.52l-.06 1.75-.12 1.73-.2 1.65-.21 1.68-.15.9-.15.87-.15.85-.19.87-.2.83-.2.85-.23.85-.25.85-.27.82-.28.83-.3.83-.32.82-.33.82-.35.8-.38.8-.39.8-.41.8-.45.76-.45.77-.49.77-.5.75-.51.73-.55.73-.57.72-.58.7-.62.68-.62.67-.66.67-.67.63-.7.63-.72.62-.73.58-.75.59-.78.55-.8.53-.82.52-.83.5-.87.48-.87.45-.9.43-.9.42-.93.4-.95.38-1 .35-1 .34-1 .3-1 .3-1.09.28-.85.2-.91.15-.92.13-.92.1-.91.07-.94.05h-2.95l-1-.06-1-.1-1-.14-1-.16-1-.2-1-.22-1-.27-1-.3-1-.35-1-.38-1-.43-1-.49-1-.53-1-.6-.95-.67-.93-.73-.92-.8-.86-.9-.77-.92-.45-.58-.37-.55-.35-.57-.35-.6-.3-.6-.3-.63-.26-.63-.22-.64-.23-.73-.24-.75-.35-1.37-.3-1.38-.23-1.37-.2-1.35-.13-1.31-.12-1.3-.08-1.29v-13.23l-.07-.91-.1-.89-.1-.85-.13-.83-.15-.8-.18-.75-.22-.8-.1-.32-.12-.35-.13-.35-.13-.35-.15-.33-.15-.35-.17-.33-.17-.34-.18-.33-.2-.33-.67-1.1-.73-1.15-.8-1.2-.87-1.25-.9-1.29-.95-1.33-1-1.35-1-1.38-2.16-2.89-2.27-2.95-4.7-6.15-2.4-3.16-2.37-3.19-1.16-1.63-1.17-1.62-1.13-1.63-.89-1.72-1-1.64-1.07-1.63-1-1.63-1-1.65-1-1.65-.93-1.67-.87-1.65-.83-1.67-.75-1.63-.38-.87-.35-.83-.34-.85-.31-.84-.29-.85-.28-.85-.27-.85-.25-.86-.21-.89-.2-.86-.17-.87-.15-.9-.13-.9-.09-.9-.06-.9v-2.77l.08-.93.12-.93.16-.95.2-.94.25-.93.3-.93.35-.92.4-.92.45-.9.5-.86.55-.85.59-.82.63-.8.67-.77.71-.71.75-.7.79-.67.81-.63.85-.59.87-.56.9-.54.93-.5 1-.46 1-.44 1-.41 1-.39 1-.36 1.09-.34 1.1-.3 1.13-.3 1.17-.26 1.18-.24 1.22-.23 1.18-.18 1.28-.18 1.32-.17 1.33-.13 1.38-.14 1.42-.1h.5l.4-.15.57-.18.58-.15.58-.1.6-.07h.61zm-3.4 17.3-1.15.08-1.12.1-1.06.12-1 .11-1 .15-.91.15-.89.15-.83.17-.78.18-.74.2-.68.19-.65.2-.6.2-.55.21-.5.2-.47.22-.41.2-.39.22-.33.18-.3.2-.27.18-.23.19-.2.16-.17.15-.13.15-.13.14-.1.13-.09.13-.08.12-.07.12-.06.11-.05.14v.13l-.05.13v.17l-.05.17v2.18l.05.37.06.4.09.43.1.43.13.47.13.48.15.5.17.52.18.53.22.55.22.57.23.57.25.56.58 1.25.64 1.27.68 1.32.75 1.33.8 1.37.85 1.41.9 1.42.95 1.45 1 1.47 1 1.48 1.05 1.5 1.01 1.5 1.1 1.52 2.27 3.06 2.32 3.05 4.68 6.12 2.3 3 2.23 3 1.1 1.47 1.07 1.46 1 1.45 1 1.44 1 1.43.93 1.4.9 1.4.85 1.4.42.7.38.72.38.71.34.72.33.73.3.72.28.72.27.71.25.74.23.76.39 1.37.33 1.42.27 1.4.21 1.36.17 1.35.13 1.34.1 1.3.07 1.28v12.18l.05.92.08.88.1.85.1.8.15.78.15.75.2.75.1.3v.2l.13.12.12.1.18.12.22.13.25.15.3.13.35.15.37.15.4.14.41.13.45.12.47.1.47.1.5.08.48.07.48.05h3l.3-.05h.25l.25-.07.62-.15.63-.18.62-.2.58-.2.59-.22.55-.22.53-.21.5-.24.5-.25.48-.25.45-.25.45-.26.42-.27.42-.28.4-.29.38-.28.37-.3.35-.3.35-.32.33-.31.32-.34.31-.33.3-.33.3-.35.29-.37.26-.35.27-.38.25-.39.25-.4.25-.4.23-.41.22-.42.22-.43.2-.44.2-.45.2-.46.18-.49.17-.48.16-.48.17-.52.15-.52.13-.51.15-.54.12-.55.12-.55.1-.56.1-.59.1-.55.15-1.21.11-1.24.09-1.25.05-1.28v-2.73l-.05-1.35-.09-1.38-.13-1.4-.15-1.42-.17-1.42-.21-1.43-.25-1.45-.27-1.45-.28-1.47-.32-1.45-.35-1.46-.37-1.45-.38-1.45-.42-1.45-.41-1.44-.45-1.43-.47-1.42-.48-1.4-.3-1.38-.51-1.37-.5-1.35-.54-1.31-.53-1.3-.55-1.29-.53-1.23-.57-1.22-.55-1.18-.55-1.13-.55-1.12-.55-1.07-.55-1-.55-1-.53-.94-.52-.88-.42-.67-.43-.66-.45-.69-.47-.66-.5-.69-.51-.66-.54-.69-.56-.68-.57-.67-.58-.68-.6-.67-.64-.66-.63-.67-.63-.67-.67-.66-.65-.64-1.4-1.3-1.4-1.26-1.43-1.25-1.45-1.2-1.47-1.19-1.48-1.13-1.47-1.1-1.5-1.1-2.53-1.82-3.19-2.31-3.43-2.5-3.32-2.38-2.12-1.5z"/><path d="m381.28 343.38.6.1.6.15.59.19.56.23.55.28.52.32.52.35.46.38.45.44.42.45.37.48.35.52.3.53.26.55.22.58.18.59.14.6.08.6.05.61v.67l-.05.62-.08.6-.14.6-.18.6-.22.56-.26.55-.3.54-.35.51-.37.49-.42.45-.45.43-.75.65.1.33.05.3 1.42-.8 4.83-2.81 4.5-2.62 5.09-2.95 5-2.88 2.27-1.27.3-.22.88-.53.65-.33.47-.22h.1l1.61-.87 1.5-.78.77-.37.52-.22.4-.16.41-.14.22-.06.58-.17.59-.1.58-.08h1.27l.61.07.6.1.6.15.59.18.58.25.55.27.52.31 2.01-1.98 1-1 1-.91 1-.89 1-.86 1-.84 1-.78 1-.77 1-.68.65-.38.62-.34.67-.33.73-.32.83-.28.57-.17.37-.08.36-.07.25-.05.45-.06.45-.05h1.97l.43.07.42.06.2.05.47.12.45.15.45.17.2.06.46.22.45.23.44.27.16.1.44.3.4.3.38.35.15.15.33.33.34.35.28.39.13.18.25.33.24.35.2.37.11.22.24.48.21.5.09.25.15.43.13.44.07.3.1.36.06.37.1.62.09.93v1.82l-.1.85-.15.78-.2.74-.23.66-.29.7-.5 1-.58 1-.63.91-.64.85-.68.8-.7.79-.73.76-.75.74-.8.75-.82.73-.85.73-.88.75-.9.74-.95.73-1 .77-2 1.48-2.12 1.52-2.14 1.59-2.28 1.52-2.32 1.52-2.4 1.51-2.4 1.5-2.42 1.49-2.43 1.46-2.42 1.44-2.41 1.43-2.35 1.35-2.3 1.28-2.22 1.24-2.13 1.13-2.05 1.08-1.92 1-1.8.93-1.67.83-1.51.75-1.37.67-1.23.55-1 .42-1.36.56-1.4.64-1.54.7-1.61.78-1.69.82-1.66.85-3.32 1.68-3 1.57-2.41 1.3-2.24 1.21-.55.29-.56.23-.6.18-.6.15-.62.1h-.4l-.72.45-1 .6-1 .55-1 .53-1.09.58-1 .48-1 .47-1 .43-.43.17-1.18.78-1.37.9-1.38.87-1.4.83-1.4.82-1.42.8-.32.16h-.06l-1.4 1.05-1.42 1-1.47 1-1.48 1-1.79 1.24-.86.46-.9.44-1.84.83-1 .43-.34.37-2.21 2.42-1.1 1.18-.59.62-.6.58-.61.6-.69.6-.78.63-.62.4-.38.25-.4.24-.32.16-.46.22-.47.2h-.15l-.42.15-.43.13h-.13l-.55.11-.59.1h-.04l-.49.05h-1.06l-.55-.05-.57-.08-.55-.13h-.1l-.47-.13-.45-.17-.43-.18-.42-.22-.1-.05-.53-.3-.52-.35-.48-.38-.08-.07-.44-.4-.4-.42-.36-.45-.09-.1-.26-.38-.25-.4-.24-.4-.06-.12-.25-.51-.22-.54-.05-.15-.15-.45-.13-.46-.12-.52-.18-.76-.06-.76v-1.84l.06-.48v-.15l.08-.42.12-.41v-.15l.12-.39.15-.36.18-.49.37-.73.25-.43.2-.32.2-.3.23-.32.25-.33.27-.33.5-.55.73-.74.73-.63.49-.37-.24-.16-.33-.25-.1-.09-.38-.33-.35-.35-.09-.1-.38-.42-.35-.45-.07-.1-.33-.5-.3-.51-.05-.1-.2-.4-.17-.4-.15-.4v-.1l-.13-.42-.1-.43-.09-.42v-.12l-.07-.41v-1.54l.05-.56v-.12l.08-.53.12-.54v-.11l.13-.44.14-.41.05-.12.21-.52.24-.48.13-.25.28-.5.34-.47.18-.26.25-.32.27-.33.54-.54.68-.65.58-.5-.08-.81v-2.04l.12-.59.13-.58.2-.55v-.15l.15-.4.19-.4.2-.37.1-.16.23-.4.25-.39.32-.43.51-.62.55-.58.85-.8.92-.75.92-.7 1-.7 1-.68 1.06-.7 1.1-.72 1.17-.72 1.22-.73 2.46-1.45 2.57-1.48.2-.1.12-.3.18-.4.22-.4.13-.24.27-.41.26-.4.32-.39.17-.2.38-.43.43-.4.1-.08.3-.27.34-.25.23-.18 4.75-3.19 5.23-3.55 5.5-3.76 5.35-3.69 8.79-6.05 3.61-2.5.52-.33.55-.28.55-.25.58-.22.59-.17.61-.11.6-.09h1.24zm20.54 83.62.66-1.07.8-1 .89-.95 1.81-1.3 1.07-.48 3.35 1.08 1.28-1.72 1.64-1.55 1.88-1.23 2.07-.9 2.18-.52 2.25-.13 2.23.27 2.15.63 2 1 1.8 1.33 1.53 1.63 1.25 1.89.89 2.06.51 2.19.15.91.09 1.47.16 1.3-.56.55-.25 1.15-.42 1.7-.27 1.05-.05.19-.18.93-.27 1.18-.3 1.25-.36 1.3-.44 1.37-.5 1.42-.56 1.38-.39.82-.36.75-.42.78-.45.78-.48.79-.55.8-.6.81-.67.82-.75.82-.82.8h-.05l-.85.75-1 .75-1.1.72-1.17.66-1.26.59-1.35.48-1.4.38-1.45.27-1.47.13h-1.47l-1.43-.1-1.42-.2-1.36-.32-1.49-.45-1.38-.55-1.38-.78-1.19-.85-1.2-1.07-1.31-1.55-1-1.63-.7-1.48-.48-1.32-.33-1.23-.25-1.14-.15-1.08-.12-1.05-.05-1v-2l.05-.85v-.15l.15-1 .18-1 .24-1 .28-1.05.37-1.08.45-1.13.55-1.17.7-1.23.71-1.07.42-1.25.55-1.18zm7.33 19.7-.22-.07.34.12-.69-.3-.16-.05zm-3.42-2.49.47.42-.57-.57-.08-.08zm11.09-2.86-.22.16.8-.5-.37-.36zm13.11-4.95 2.37.5 1.6-4.4zm4-4 .14-.38v-.35z" fill="#fff"/><path d="m579.92 998.37h1.11l1.59.05 1.58.1 1.62.15 1.63.2 1.58.27.92.18.88.18.89.24.91.26.94.3 1 .37 1 .43 1 .52 1.1.62 1.13.73 1.18.88 1.19 1.07 1.16 1.28 1 1.34.75 1.21.62 1.19.57 1.3.46 1.43.37 1.52.22 1.61v1.67l-.12 1.67-.28 1.65-.44 1.55-.55 1.45-.66 1.31-.7 1.19-.77 1-.77.93-.76.8-.75.72-.87.73-1.28 1-1.37.85-1.28.68-1.24.59-1.18.5-1.15.43-1.12.38-1.1.34-1.06.31-1.07.29-1.07.26-2 .44-1.73.46-1.8.33-1.62.3-2.68.47-2.88.53-3.25.57-3.5.57-3.67.55-1.82.26v.14h.35l2.5.72 2.34 1.11 2.1 1.54 1.81 1.85 1.45 2.15 1.07 2.36.65 2.5.2 2.6-.23 2.59-.7 2.5-1.1 2.33-1.5 2.13-1.85 1.82-2.14 1.48-2.35 1.1-2.5.67h-.31l-.05.13-.62 1.54-1.5 2.16-1.13 1.25-.9.85-.82.7-.85.64-.83.58-.85.53-.95.52-1.37.65-1.32.5-1 .33-.9.27-.27.08.5-.18.5-.22.37-.2.43-.25.47-.31.48-.35.45-.4.44-.42.36-.42.34-.4.26-.36.2-.34.09-.15-6 1.84h1.09-.5l-1.14.16h-.21l-12.35 3.8-1-3.14-14.78.12-11.19.08h-8.71l-2.52-.23-2.47-.65-2.3-1.07-2.08-1.45-1.8-1.8-.85-1.22-.67-.21-.88-.34-.92-.4-.95-.48-1-.55-1.05-.68-1.06-.82-1.09-1-1.08-1.15-1-1.32-.95-1.51-.15-.3h-30.47l-2.21.15-1.34.09-1.46.08h-4.25l-1-.07-1-.1-1.13-.15-1.23-.25-1.39-.35-1.55-.51-1.73-.79-1.68-1-1.22-.91-1-.92-1-1.07-1-1.25-.88-1.38-.74-1.52-.58-1.6-.4-1.63-.22-1.6-.05-1.55.09-1.45.18-1.35.28-1.23.37-1.24.58-1.51.77-1.55.88-1.45 1-1.34 1.07-1.2 1.12-1.06 1.13-.92 1.12-.78 1.1-.69 1.06-.56 1-.49 1-.4.93-.33.89-.3.85-.23.88-.24 1.4-.31 1.35-.25 1.2-.19 1-.15.56-.1.35-1.73.42-1.62 1.35-2.6 1.42-1.86 1.51-1.54 1.84-1.36 1.53-.85 1-.5.82-.35.82-.34.88-.33 1.5-.5 1.57-.47 1.55-.38 1.55-.35 1.55-.3 1.55-.27 1.55-.23 1.56-.22 1.57-.2 1.57-.16 1.56-.15 1.59-.15 2.11-.17 1-.07 3.05-.2 2.95-.16 5.48-.3 2.42-.15 2.15-.17.88-.07.82-.08.68-.08.6-.09 3.94-.61 4-.65 4-.69 4.05-.71 4.06-.74 4.09-.75 8.21-1.51 4.15-.77 4.17-.75 4.18-.73 4.2-.72 4.24-.68 4.25-.67 4.26-.62 4.2-.56 1.84-.25 1.66-.22 2-.23 2.37-.27 2.62-.23 2.76-.22 1.49-.1 1.5-.07 1.51-.06h3.54z" fill="#808080"/></g></svg>
assets/js/atomic/blocks/component-init.js DELETED
@@ -1,118 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { registerBlockComponent } from '@woocommerce/blocks-registry';
5
- import { lazy } from '@wordpress/element';
6
- import { WC_BLOCKS_BUILD_URL } from '@woocommerce/block-settings';
7
-
8
- // Modify webpack publicPath at runtime based on location of WordPress Plugin.
9
- // eslint-disable-next-line no-undef,camelcase
10
- __webpack_public_path__ = WC_BLOCKS_BUILD_URL;
11
-
12
- registerBlockComponent( {
13
- blockName: 'woocommerce/product-price',
14
- component: lazy( () =>
15
- import(
16
- /* webpackChunkName: "atomic-block-components/price" */ './product-elements/price/block'
17
- )
18
- ),
19
- } );
20
-
21
- registerBlockComponent( {
22
- blockName: 'woocommerce/product-image',
23
- component: lazy( () =>
24
- import(
25
- /* webpackChunkName: "atomic-block-components/image" */ './product-elements/image/frontend'
26
- )
27
- ),
28
- } );
29
-
30
- registerBlockComponent( {
31
- blockName: 'woocommerce/product-title',
32
- component: lazy( () =>
33
- import(
34
- /* webpackChunkName: "atomic-block-components/title" */ './product-elements/title/frontend'
35
- )
36
- ),
37
- } );
38
-
39
- registerBlockComponent( {
40
- blockName: 'woocommerce/product-rating',
41
- component: lazy( () =>
42
- import(
43
- /* webpackChunkName: "atomic-block-components/rating" */ './product-elements/rating/block'
44
- )
45
- ),
46
- } );
47
-
48
- registerBlockComponent( {
49
- blockName: 'woocommerce/product-button',
50
- component: lazy( () =>
51
- import(
52
- /* webpackChunkName: "atomic-block-components/button" */ './product-elements/button/block'
53
- )
54
- ),
55
- } );
56
-
57
- registerBlockComponent( {
58
- blockName: 'woocommerce/product-summary',
59
- component: lazy( () =>
60
- import(
61
- /* webpackChunkName: "atomic-block-components/summary" */ './product-elements/summary/block'
62
- )
63
- ),
64
- } );
65
-
66
- registerBlockComponent( {
67
- blockName: 'woocommerce/product-sale-badge',
68
- component: lazy( () =>
69
- import(
70
- /* webpackChunkName: "atomic-block-components/sale-badge" */ './product-elements/sale-badge/block'
71
- )
72
- ),
73
- } );
74
-
75
- registerBlockComponent( {
76
- blockName: 'woocommerce/product-sku',
77
- component: lazy( () =>
78
- import(
79
- /* webpackChunkName: "atomic-block-components/sku" */ './product-elements/sku/block'
80
- )
81
- ),
82
- } );
83
-
84
- registerBlockComponent( {
85
- blockName: 'woocommerce/product-category-list',
86
- component: lazy( () =>
87
- import(
88
- /* webpackChunkName: "atomic-block-components/category-list" */ './product-elements/category-list/block'
89
- )
90
- ),
91
- } );
92
-
93
- registerBlockComponent( {
94
- blockName: 'woocommerce/product-tag-list',
95
- component: lazy( () =>
96
- import(
97
- /* webpackChunkName: "atomic-block-components/tag-list" */ './product-elements/tag-list/block'
98
- )
99
- ),
100
- } );
101
-
102
- registerBlockComponent( {
103
- blockName: 'woocommerce/product-stock-indicator',
104
- component: lazy( () =>
105
- import(
106
- /* webpackChunkName: "atomic-block-components/stock-indicator" */ './product-elements/stock-indicator/block'
107
- )
108
- ),
109
- } );
110
-
111
- registerBlockComponent( {
112
- blockName: 'woocommerce/product-add-to-cart',
113
- component: lazy( () =>
114
- import(
115
- /* webpackChunkName: "atomic-block-components/add-to-cart" */ './product-elements/add-to-cart/frontend'
116
- )
117
- ),
118
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/index.js DELETED
@@ -1,15 +0,0 @@
1
- /**
2
- * Internal dependencies
3
- */
4
- import './product-elements/title';
5
- import './product-elements/price';
6
- import './product-elements/image';
7
- import './product-elements/rating';
8
- import './product-elements/button';
9
- import './product-elements/summary';
10
- import './product-elements/sale-badge';
11
- import './product-elements/sku';
12
- import './product-elements/category-list';
13
- import './product-elements/tag-list';
14
- import './product-elements/stock-indicator';
15
- import './product-elements/add-to-cart';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/attributes.js DELETED
@@ -1,12 +0,0 @@
1
- export const blockAttributes = {
2
- showFormElements: {
3
- type: 'boolean',
4
- default: false,
5
- },
6
- productId: {
7
- type: 'number',
8
- default: 0,
9
- },
10
- };
11
-
12
- export default blockAttributes;
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/block.js DELETED
@@ -1,87 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import PropTypes from 'prop-types';
5
- import classnames from 'classnames';
6
- import {
7
- AddToCartFormContextProvider,
8
- useAddToCartFormContext,
9
- } from '@woocommerce/base-context';
10
- import { useProductDataContext } from '@woocommerce/shared-context';
11
- import { isEmpty } from 'lodash';
12
- import { withProductDataContext } from '@woocommerce/shared-hocs';
13
-
14
- /**
15
- * Internal dependencies
16
- */
17
- import './style.scss';
18
- import { AddToCartButton } from './shared';
19
- import {
20
- SimpleProductForm,
21
- VariableProductForm,
22
- ExternalProductForm,
23
- GroupedProductForm,
24
- } from './product-types';
25
-
26
- /**
27
- * Product Add to Form Block Component.
28
- *
29
- * @param {Object} props Incoming props.
30
- * @param {string} [props.className] CSS Class name for the component.
31
- * @param {boolean} [props.showFormElements] Should form elements be shown?
32
- * @return {*} The component.
33
- */
34
- const Block = ( { className, showFormElements } ) => {
35
- const { product } = useProductDataContext();
36
- const componentClass = classnames(
37
- className,
38
- 'wc-block-components-product-add-to-cart',
39
- {
40
- 'wc-block-components-product-add-to-cart--placeholder': isEmpty(
41
- product
42
- ),
43
- }
44
- );
45
-
46
- return (
47
- <AddToCartFormContextProvider
48
- product={ product }
49
- showFormElements={ showFormElements }
50
- >
51
- <div className={ componentClass }>
52
- <AddToCartForm />
53
- </div>
54
- </AddToCartFormContextProvider>
55
- );
56
- };
57
-
58
- /**
59
- * Renders the add to cart form using useAddToCartFormContext.
60
- */
61
- const AddToCartForm = () => {
62
- const { showFormElements, productType } = useAddToCartFormContext();
63
-
64
- if ( showFormElements ) {
65
- if ( productType === 'variable' ) {
66
- return <VariableProductForm />;
67
- }
68
- if ( productType === 'grouped' ) {
69
- return <GroupedProductForm />;
70
- }
71
- if ( productType === 'external' ) {
72
- return <ExternalProductForm />;
73
- }
74
- if ( productType === 'simple' || productType === 'variation' ) {
75
- return <SimpleProductForm />;
76
- }
77
- return null;
78
- }
79
-
80
- return <AddToCartButton />;
81
- };
82
-
83
- Block.propTypes = {
84
- className: PropTypes.string,
85
- };
86
-
87
- export default withProductDataContext( Block );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/constants.js DELETED
@@ -1,12 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { cart, Icon } from '@woocommerce/icons';
6
-
7
- export const BLOCK_TITLE = __( 'Add to Cart', 'woo-gutenberg-products-block' );
8
- export const BLOCK_ICON = <Icon srcElement={ cart } />;
9
- export const BLOCK_DESCRIPTION = __(
10
- 'Displays an add to cart button. Optionally displays other add to cart form elements.',
11
- 'woo-gutenberg-products-block'
12
- );
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/edit.js DELETED
@@ -1,86 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import EditProductLink from '@woocommerce/editor-components/edit-product-link';
6
- import { useProductDataContext } from '@woocommerce/shared-context';
7
- import classnames from 'classnames';
8
- import {
9
- Disabled,
10
- PanelBody,
11
- ToggleControl,
12
- Notice,
13
- } from '@wordpress/components';
14
- import { InspectorControls } from '@wordpress/block-editor';
15
- import { productSupportsAddToCartForm } from '@woocommerce/base-utils';
16
-
17
- /**
18
- * Internal dependencies
19
- */
20
- import './style.scss';
21
- import Block from './block';
22
- import withProductSelector from '../shared/with-product-selector';
23
- import { BLOCK_TITLE, BLOCK_ICON } from './constants';
24
-
25
- const Edit = ( { attributes, setAttributes } ) => {
26
- const { product } = useProductDataContext();
27
- const { className, showFormElements } = attributes;
28
-
29
- return (
30
- <div
31
- className={ classnames(
32
- className,
33
- 'wc-block-components-product-add-to-cart'
34
- ) }
35
- >
36
- <EditProductLink productId={ product.id } />
37
- <InspectorControls>
38
- <PanelBody
39
- title={ __( 'Layout', 'woo-gutenberg-products-block' ) }
40
- >
41
- { productSupportsAddToCartForm( product ) ? (
42
- <ToggleControl
43
- label={ __(
44
- 'Display form elements',
45
- 'woo-gutenberg-products-block'
46
- ) }
47
- help={ __(
48
- 'Depending on product type, allow customers to select a quantity, variations etc.',
49
- 'woo-gutenberg-products-block'
50
- ) }
51
- checked={ showFormElements }
52
- onChange={ () =>
53
- setAttributes( {
54
- showFormElements: ! showFormElements,
55
- } )
56
- }
57
- />
58
- ) : (
59
- <Notice
60
- className="wc-block-components-product-add-to-cart-notice"
61
- isDismissible={ false }
62
- status="info"
63
- >
64
- { __(
65
- 'This product does not support the block based add to cart form. A link to the product page will be shown instead.',
66
- 'woo-gutenberg-products-block'
67
- ) }
68
- </Notice>
69
- ) }
70
- </PanelBody>
71
- </InspectorControls>
72
- <Disabled>
73
- <Block { ...attributes } />
74
- </Disabled>
75
- </div>
76
- );
77
- };
78
-
79
- export default withProductSelector( {
80
- icon: BLOCK_ICON,
81
- label: BLOCK_TITLE,
82
- description: __(
83
- 'Choose a product to display its add to cart form.',
84
- 'woo-gutenberg-products-block'
85
- ),
86
- } )( Edit );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/frontend.js DELETED
@@ -1,12 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import withFilteredAttributes from '@woocommerce/base-hocs/with-filtered-attributes';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import Block from './block';
10
- import attributes from './attributes';
11
-
12
- export default withFilteredAttributes( attributes )( Block );
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/index.js DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { registerExperimentalBlockType } from '@woocommerce/block-settings';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import sharedConfig from '../shared/config';
10
- import edit from './edit';
11
- import attributes from './attributes';
12
- import {
13
- BLOCK_TITLE as title,
14
- BLOCK_ICON as icon,
15
- BLOCK_DESCRIPTION as description,
16
- } from './constants';
17
-
18
- const blockConfig = {
19
- title,
20
- description,
21
- icon: {
22
- src: icon,
23
- foreground: '#874FB9',
24
- },
25
- edit,
26
- attributes,
27
- };
28
-
29
- registerExperimentalBlockType( 'woocommerce/product-add-to-cart', {
30
- ...sharedConfig,
31
- ...blockConfig,
32
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/product-types/external.js DELETED
@@ -1,13 +0,0 @@
1
- /**
2
- * Internal dependencies
3
- */
4
- import AddToCartButton from '../shared/add-to-cart-button';
5
-
6
- /**
7
- * External Product Add To Cart Form
8
- */
9
- const External = () => {
10
- return <AddToCartButton />;
11
- };
12
-
13
- export default External;
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/product-types/grouped/group-list/index.js DELETED
@@ -1,14 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { Placeholder } from '@wordpress/components';
5
-
6
- const GroupedProducts = () => {
7
- return (
8
- <Placeholder className="wc-block-components-product-add-to-cart-group-list">
9
- This is a placeholder for the grouped products form element.
10
- </Placeholder>
11
- );
12
- };
13
-
14
- export default GroupedProducts;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/product-types/grouped/index.js DELETED
@@ -1,13 +0,0 @@
1
- /**
2
- * Internal dependencies
3
- */
4
- import GroupList from './group-list';
5
-
6
- /**
7
- * Grouped Product Add To Cart Form
8
- */
9
- const Grouped = () => {
10
- return <GroupList />;
11
- };
12
-
13
- export default Grouped;
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/product-types/index.js DELETED
@@ -1,4 +0,0 @@
1
- export { default as SimpleProductForm } from './simple';
2
- export { default as VariableProductForm } from './variable/index';
3
- export { default as ExternalProductForm } from './external';
4
- export { default as GroupedProductForm } from './grouped/index';
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/product-types/simple.js DELETED
@@ -1,54 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { useAddToCartFormContext } from '@woocommerce/base-context';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import { AddToCartButton, QuantityInput, ProductUnavailable } from '../shared';
11
-
12
- /**
13
- * Simple Product Add To Cart Form
14
- */
15
- const Simple = () => {
16
- const {
17
- product,
18
- quantity,
19
- minQuantity,
20
- maxQuantity,
21
- dispatchActions,
22
- isDisabled,
23
- } = useAddToCartFormContext();
24
-
25
- if ( product.id && ! product.is_purchasable ) {
26
- return <ProductUnavailable />;
27
- }
28
-
29
- if ( product.id && ! product.is_in_stock ) {
30
- return (
31
- <ProductUnavailable
32
- reason={ __(
33
- 'This product is currently out of stock and cannot be purchased.',
34
- 'woo-gutenberg-products-block'
35
- ) }
36
- />
37
- );
38
- }
39
-
40
- return (
41
- <>
42
- <QuantityInput
43
- value={ quantity }
44
- min={ minQuantity }
45
- max={ maxQuantity }
46
- disabled={ isDisabled }
47
- onChange={ dispatchActions.setQuantity }
48
- />
49
- <AddToCartButton />
50
- </>
51
- );
52
- };
53
-
54
- export default Simple;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/index.js DELETED
@@ -1,63 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { useAddToCartFormContext } from '@woocommerce/base-context';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import {
11
- AddToCartButton,
12
- QuantityInput,
13
- ProductUnavailable,
14
- } from '../../shared';
15
- import VariationAttributes from './variation-attributes';
16
-
17
- /**
18
- * Variable Product Add To Cart Form
19
- */
20
- const Variable = () => {
21
- const {
22
- product,
23
- quantity,
24
- minQuantity,
25
- maxQuantity,
26
- dispatchActions,
27
- isDisabled,
28
- } = useAddToCartFormContext();
29
-
30
- if ( product.id && ! product.is_purchasable ) {
31
- return <ProductUnavailable />;
32
- }
33
-
34
- if ( product.id && ! product.is_in_stock ) {
35
- return (
36
- <ProductUnavailable
37
- reason={ __(
38
- 'This product is currently out of stock and cannot be purchased.',
39
- 'woo-gutenberg-products-block'
40
- ) }
41
- />
42
- );
43
- }
44
-
45
- return (
46
- <>
47
- <VariationAttributes
48
- product={ product }
49
- dispatchers={ dispatchActions }
50
- />
51
- <QuantityInput
52
- value={ quantity }
53
- min={ minQuantity }
54
- max={ maxQuantity }
55
- disabled={ isDisabled }
56
- onChange={ dispatchActions.setQuantity }
57
- />
58
- <AddToCartButton />
59
- </>
60
- );
61
- };
62
-
63
- export default Variable;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/attribute-picker.js DELETED
@@ -1,101 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { useState, useEffect, useMemo } from '@wordpress/element';
5
- import { useShallowEqual } from '@woocommerce/base-hooks';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import AttributeSelectControl from './attribute-select-control';
11
- import {
12
- getVariationMatchingSelectedAttributes,
13
- getActiveSelectControlOptions,
14
- } from './utils';
15
-
16
- /**
17
- * AttributePicker component.
18
- *
19
- * @param {*} props Component props.
20
- */
21
- const AttributePicker = ( {
22
- attributes,
23
- variationAttributes,
24
- setRequestParams,
25
- } ) => {
26
- const currentAttributes = useShallowEqual( attributes );
27
- const currentVariationAttributes = useShallowEqual( variationAttributes );
28
- const [ variationId, setVariationId ] = useState( 0 );
29
- const [ selectedAttributes, setSelectedAttributes ] = useState( {} );
30
-
31
- // Get options for each attribute picker.
32
- const filteredAttributeOptions = useMemo( () => {
33
- return getActiveSelectControlOptions(
34
- currentAttributes,
35
- currentVariationAttributes,
36
- selectedAttributes
37
- );
38
- }, [ selectedAttributes, currentAttributes, currentVariationAttributes ] );
39
-
40
- // Select variations when selections are change.
41
- useEffect( () => {
42
- const hasSelectedAllAttributes =
43
- Object.values( selectedAttributes ).filter(
44
- ( selected ) => selected !== ''
45
- ).length === Object.keys( currentAttributes ).length;
46
-
47
- if ( hasSelectedAllAttributes ) {
48
- setVariationId(
49
- getVariationMatchingSelectedAttributes(
50
- currentAttributes,
51
- currentVariationAttributes,
52
- selectedAttributes
53
- )
54
- );
55
- } else if ( variationId > 0 ) {
56
- // Unset variation when form is incomplete.
57
- setVariationId( 0 );
58
- }
59
- }, [
60
- selectedAttributes,
61
- variationId,
62
- currentAttributes,
63
- currentVariationAttributes,
64
- ] );
65
-
66
- // Set requests params as variation ID and data changes.
67
- useEffect( () => {
68
- setRequestParams( {
69
- id: variationId,
70
- variation: Object.keys( selectedAttributes ).map(
71
- ( attributeName ) => {
72
- return {
73
- attribute: attributeName,
74
- value: selectedAttributes[ attributeName ],
75
- };
76
- }
77
- ),
78
- } );
79
- }, [ setRequestParams, variationId, selectedAttributes ] );
80
-
81
- return (
82
- <div className="wc-block-components-product-add-to-cart-attribute-picker">
83
- { Object.keys( currentAttributes ).map( ( attributeName ) => (
84
- <AttributeSelectControl
85
- key={ attributeName }
86
- attributeName={ attributeName }
87
- options={ filteredAttributeOptions[ attributeName ] }
88
- value={ selectedAttributes[ attributeName ] }
89
- onChange={ ( selected ) => {
90
- setSelectedAttributes( {
91
- ...selectedAttributes,
92
- [ attributeName ]: selected,
93
- } );
94
- } }
95
- />
96
- ) ) }
97
- </div>
98
- );
99
- };
100
-
101
- export default AttributePicker;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/attribute-select-control.js DELETED
@@ -1,91 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { decodeEntities } from '@wordpress/html-entities';
6
- import { SelectControl } from '@wordpress/components';
7
- import { useEffect } from 'react';
8
- import classnames from 'classnames';
9
- import {
10
- ValidationInputError,
11
- useValidationContext,
12
- } from '@woocommerce/base-context';
13
-
14
- // Default option for select boxes.
15
- const selectAnOption = {
16
- value: '',
17
- label: __( 'Select an option', 'woo-gutenberg-products-block' ),
18
- };
19
-
20
- /**
21
- * VariationAttributeSelect component.
22
- *
23
- * @param {*} props Component props.
24
- */
25
- const AttributeSelectControl = ( {
26
- attributeName,
27
- options = [],
28
- value = '',
29
- onChange = () => {},
30
- errorMessage = __(
31
- 'Please select a value.',
32
- 'woo-gutenberg-products-block'
33
- ),
34
- } ) => {
35
- const {
36
- getValidationError,
37
- setValidationErrors,
38
- clearValidationError,
39
- } = useValidationContext();
40
- const errorId = attributeName;
41
- const error = getValidationError( errorId ) || {};
42
-
43
- useEffect( () => {
44
- if ( value ) {
45
- clearValidationError( errorId );
46
- } else {
47
- setValidationErrors( {
48
- [ errorId ]: {
49
- message: errorMessage,
50
- hidden: true,
51
- },
52
- } );
53
- }
54
- }, [
55
- value,
56
- errorId,
57
- errorMessage,
58
- clearValidationError,
59
- setValidationErrors,
60
- ] );
61
-
62
- // Remove validation errors when unmounted.
63
- useEffect( () => () => void clearValidationError( errorId ), [
64
- errorId,
65
- clearValidationError,
66
- ] );
67
-
68
- return (
69
- <div className="wc-block-components-product-add-to-cart-attribute-picker__container">
70
- <SelectControl
71
- label={ decodeEntities( attributeName ) }
72
- value={ value || '' }
73
- options={ [ selectAnOption, ...options ] }
74
- onChange={ onChange }
75
- required={ true }
76
- className={ classnames(
77
- 'wc-block-components-product-add-to-cart-attribute-picker__select',
78
- {
79
- 'has-error': error.message && ! error.hidden,
80
- }
81
- ) }
82
- />
83
- <ValidationInputError
84
- propertyName={ errorId }
85
- elementId={ errorId }
86
- />
87
- </div>
88
- );
89
- };
90
-
91
- export default AttributeSelectControl;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/index.js DELETED
@@ -1,35 +0,0 @@
1
- /**
2
- * Internal dependencies
3
- */
4
- import './style.scss';
5
- import AttributePicker from './attribute-picker';
6
- import { getAttributes, getVariationAttributes } from './utils';
7
-
8
- /**
9
- * VariationAttributes component.
10
- *
11
- * @param {Object} props Incoming props
12
- * @param {Object} props.product Product
13
- * @param {Object} props.dispatchers An object where values are dispatching functions.
14
- */
15
- const VariationAttributes = ( { product, dispatchers } ) => {
16
- const attributes = getAttributes( product.attributes );
17
- const variationAttributes = getVariationAttributes( product.variations );
18
-
19
- if (
20
- Object.keys( attributes ).length === 0 ||
21
- variationAttributes.length === 0
22
- ) {
23
- return null;
24
- }
25
-
26
- return (
27
- <AttributePicker
28
- attributes={ attributes }
29
- variationAttributes={ variationAttributes }
30
- setRequestParams={ dispatchers.setRequestParams }
31
- />
32
- );
33
- };
34
-
35
- export default VariationAttributes;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/style.scss DELETED
@@ -1,33 +0,0 @@
1
- .wc-block-components-product-add-to-cart-attribute-picker {
2
- margin: 0;
3
- flex-basis: 100%;
4
-
5
- label {
6
- display: block;
7
- @include font-size(regular);
8
- }
9
-
10
- .wc-block-components-product-add-to-cart-attribute-picker__container {
11
- position: relative;
12
- }
13
-
14
- .wc-block-components-product-add-to-cart-attribute-picker__select {
15
- margin: 0 0 em($gap-small) 0;
16
-
17
- select {
18
- min-width: 60%;
19
- min-height: 1.75em;
20
- }
21
-
22
- &.has-error {
23
- margin-bottom: $gap-large;
24
-
25
- select {
26
- border-color: $alert-red;
27
- &:focus {
28
- outline-color: $alert-red;
29
- }
30
- }
31
- }
32
- }
33
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/test/index.js DELETED
@@ -1,395 +0,0 @@
1
- /**
2
- * Internal dependencies
3
- */
4
- import {
5
- getAttributes,
6
- getVariationAttributes,
7
- getVariationsMatchingSelectedAttributes,
8
- getVariationMatchingSelectedAttributes,
9
- getActiveSelectControlOptions,
10
- } from '../utils';
11
-
12
- const rawAttributeData = [
13
- {
14
- id: 1,
15
- name: 'Color',
16
- taxonomy: 'pa_color',
17
- has_variations: true,
18
- terms: [
19
- {
20
- id: 22,
21
- name: 'Blue',
22
- slug: 'blue',
23
- },
24
- {
25
- id: 23,
26
- name: 'Green',
27
- slug: 'green',
28
- },
29
- {
30
- id: 24,
31
- name: 'Red',
32
- slug: 'red',
33
- },
34
- ],
35
- },
36
- {
37
- id: 0,
38
- name: 'Logo',
39
- taxonomy: null,
40
- has_variations: true,
41
- terms: [
42
- {
43
- id: 0,
44
- name: 'Yes',
45
- slug: 'Yes',
46
- },
47
- {
48
- id: 0,
49
- name: 'No',
50
- slug: 'No',
51
- },
52
- ],
53
- },
54
- {
55
- id: 0,
56
- name: 'Non-variable attribute',
57
- taxonomy: null,
58
- has_variations: false,
59
- terms: [
60
- {
61
- id: 0,
62
- name: 'Test',
63
- slug: 'Test',
64
- },
65
- {
66
- id: 0,
67
- name: 'Test 2',
68
- slug: 'Test 2',
69
- },
70
- ],
71
- },
72
- ];
73
-
74
- const rawVariations = [
75
- {
76
- id: 35,
77
- attributes: [
78
- {
79
- name: 'Color',
80
- value: 'blue',
81
- },
82
- {
83
- name: 'Logo',
84
- value: 'Yes',
85
- },
86
- ],
87
- },
88
- {
89
- id: 28,
90
- attributes: [
91
- {
92
- name: 'Color',
93
- value: 'red',
94
- },
95
- {
96
- name: 'Logo',
97
- value: 'No',
98
- },
99
- ],
100
- },
101
- {
102
- id: 29,
103
- attributes: [
104
- {
105
- name: 'Color',
106
- value: 'green',
107
- },
108
- {
109
- name: 'Logo',
110
- value: 'No',
111
- },
112
- ],
113
- },
114
- {
115
- id: 30,
116
- attributes: [
117
- {
118
- name: 'Color',
119
- value: 'blue',
120
- },
121
- {
122
- name: 'Logo',
123
- value: 'No',
124
- },
125
- ],
126
- },
127
- ];
128
-
129
- describe( 'Testing utils', () => {
130
- describe( 'Testing getAttributes()', () => {
131
- it( 'returns empty object if there are no attributes', () => {
132
- const attributes = getAttributes( null );
133
- expect( attributes ).toStrictEqual( {} );
134
- } );
135
- it( 'returns list of attributes when given valid data', () => {
136
- const attributes = getAttributes( rawAttributeData );
137
- expect( attributes ).toStrictEqual( {
138
- Color: {
139
- id: 1,
140
- name: 'Color',
141
- taxonomy: 'pa_color',
142
- has_variations: true,
143
- terms: [
144
- {
145
- id: 22,
146
- name: 'Blue',
147
- slug: 'blue',
148
- },
149
- {
150
- id: 23,
151
- name: 'Green',
152
- slug: 'green',
153
- },
154
- {
155
- id: 24,
156
- name: 'Red',
157
- slug: 'red',
158
- },
159
- ],
160
- },
161
- Logo: {
162
- id: 0,
163
- name: 'Logo',
164
- taxonomy: null,
165
- has_variations: true,
166
- terms: [
167
- {
168
- id: 0,
169
- name: 'Yes',
170
- slug: 'Yes',
171
- },
172
- {
173
- id: 0,
174
- name: 'No',
175
- slug: 'No',
176
- },
177
- ],
178
- },
179
- } );
180
- } );
181
- } );
182
- describe( 'Testing getVariationAttributes()', () => {
183
- it( 'returns empty object if there are no variations', () => {
184
- const variationAttributes = getVariationAttributes( null );
185
- expect( variationAttributes ).toStrictEqual( {} );
186
- } );
187
- it( 'returns list of attribute names and value pairs when given valid data', () => {
188
- const variationAttributes = getVariationAttributes( rawVariations );
189
- expect( variationAttributes ).toStrictEqual( {
190
- 'id:35': {
191
- id: 35,
192
- attributes: {
193
- Color: 'blue',
194
- Logo: 'Yes',
195
- },
196
- },
197
- 'id:28': {
198
- id: 28,
199
- attributes: {
200
- Color: 'red',
201
- Logo: 'No',
202
- },
203
- },
204
- 'id:29': {
205
- id: 29,
206
- attributes: {
207
- Color: 'green',
208
- Logo: 'No',
209
- },
210
- },
211
- 'id:30': {
212
- id: 30,
213
- attributes: {
214
- Color: 'blue',
215
- Logo: 'No',
216
- },
217
- },
218
- } );
219
- } );
220
- } );
221
- describe( 'Testing getVariationsMatchingSelectedAttributes()', () => {
222
- const attributes = getAttributes( rawAttributeData );
223
- const variationAttributes = getVariationAttributes( rawVariations );
224
-
225
- it( 'returns all variations, in the correct order, if no selections have been made yet', () => {
226
- const selectedAttributes = {};
227
- const matches = getVariationsMatchingSelectedAttributes(
228
- attributes,
229
- variationAttributes,
230
- selectedAttributes
231
- );
232
- expect( matches ).toStrictEqual( [ 35, 28, 29, 30 ] );
233
- } );
234
-
235
- it( 'returns correct subset of variations after a selection', () => {
236
- const selectedAttributes = {
237
- Color: 'blue',
238
- };
239
- const matches = getVariationsMatchingSelectedAttributes(
240
- attributes,
241
- variationAttributes,
242
- selectedAttributes
243
- );
244
- expect( matches ).toStrictEqual( [ 35, 30 ] );
245
- } );
246
-
247
- it( 'returns correct subset of variations after all selections', () => {
248
- const selectedAttributes = {
249
- Color: 'blue',
250
- Logo: 'No',
251
- };
252
- const matches = getVariationsMatchingSelectedAttributes(
253
- attributes,
254
- variationAttributes,
255
- selectedAttributes
256
- );
257
- expect( matches ).toStrictEqual( [ 30 ] );
258
- } );
259
-
260
- it( 'returns no results if selection does not match or is invalid', () => {
261
- const selectedAttributes = {
262
- Color: 'brown',
263
- };
264
- const matches = getVariationsMatchingSelectedAttributes(
265
- attributes,
266
- variationAttributes,
267
- selectedAttributes
268
- );
269
- expect( matches ).toStrictEqual( [] );
270
- } );
271
- } );
272
- describe( 'Testing getVariationMatchingSelectedAttributes()', () => {
273
- const attributes = getAttributes( rawAttributeData );
274
- const variationAttributes = getVariationAttributes( rawVariations );
275
-
276
- it( 'returns first match if no selections have been made yet', () => {
277
- const selectedAttributes = {};
278
- const matches = getVariationMatchingSelectedAttributes(
279
- attributes,
280
- variationAttributes,
281
- selectedAttributes
282
- );
283
- expect( matches ).toStrictEqual( 35 );
284
- } );
285
-
286
- it( 'returns first match after single selection', () => {
287
- const selectedAttributes = {
288
- Color: 'blue',
289
- };
290
- const matches = getVariationMatchingSelectedAttributes(
291
- attributes,
292
- variationAttributes,
293
- selectedAttributes
294
- );
295
- expect( matches ).toStrictEqual( 35 );
296
- } );
297
-
298
- it( 'returns correct match after all selections', () => {
299
- const selectedAttributes = {
300
- Color: 'blue',
301
- Logo: 'No',
302
- };
303
- const matches = getVariationMatchingSelectedAttributes(
304
- attributes,
305
- variationAttributes,
306
- selectedAttributes
307
- );
308
- expect( matches ).toStrictEqual( 30 );
309
- } );
310
-
311
- it( 'returns no match if invalid', () => {
312
- const selectedAttributes = {
313
- Color: 'brown',
314
- };
315
- const matches = getVariationMatchingSelectedAttributes(
316
- attributes,
317
- variationAttributes,
318
- selectedAttributes
319
- );
320
- expect( matches ).toStrictEqual( 0 );
321
- } );
322
- } );
323
- describe( 'Testing getActiveSelectControlOptions()', () => {
324
- const attributes = getAttributes( rawAttributeData );
325
- const variationAttributes = getVariationAttributes( rawVariations );
326
-
327
- it( 'returns all possible options if no selections have been made yet', () => {
328
- const selectedAttributes = {};
329
- const controlOptions = getActiveSelectControlOptions(
330
- attributes,
331
- variationAttributes,
332
- selectedAttributes
333
- );
334
- expect( controlOptions ).toStrictEqual( {
335
- Color: [
336
- {
337
- value: 'blue',
338
- label: 'Blue',
339
- },
340
- {
341
- value: 'green',
342
- label: 'Green',
343
- },
344
- {
345
- value: 'red',
346
- label: 'Red',
347
- },
348
- ],
349
- Logo: [
350
- {
351
- value: 'Yes',
352
- label: 'Yes',
353
- },
354
- {
355
- value: 'No',
356
- label: 'No',
357
- },
358
- ],
359
- } );
360
- } );
361
-
362
- it( 'returns only valid options if color is selected', () => {
363
- const selectedAttributes = {
364
- Color: 'green',
365
- };
366
- const controlOptions = getActiveSelectControlOptions(
367
- attributes,
368
- variationAttributes,
369
- selectedAttributes
370
- );
371
- expect( controlOptions ).toStrictEqual( {
372
- Color: [
373
- {
374
- value: 'blue',
375
- label: 'Blue',
376
- },
377
- {
378
- value: 'green',
379
- label: 'Green',
380
- },
381
- {
382
- value: 'red',
383
- label: 'Red',
384
- },
385
- ],
386
- Logo: [
387
- {
388
- value: 'No',
389
- label: 'No',
390
- },
391
- ],
392
- } );
393
- } );
394
- } );
395
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/utils.js DELETED
@@ -1,208 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { keyBy } from 'lodash';
5
- import { decodeEntities } from '@wordpress/html-entities';
6
-
7
- /**
8
- * Key an array of attributes by name,
9
- *
10
- * @param {Object} attributes Attributes array.
11
- */
12
- export const getAttributes = ( attributes ) => {
13
- return attributes
14
- ? keyBy(
15
- Object.values( attributes ).filter(
16
- ( { has_variations: hasVariations } ) => hasVariations
17
- ),
18
- 'name'
19
- )
20
- : {};
21
- };
22
-
23
- /**
24
- * Format variations from the API into a map of just the attribute names and values.
25
- *
26
- * Note, each item is keyed by the variation ID with an id: prefix. This is to prevent the object
27
- * being reordered when iterated.
28
- *
29
- * @param {Object} variations List of Variation objects and attributes keyed by variation ID.
30
- */
31
- export const getVariationAttributes = ( variations ) => {
32
- if ( ! variations ) {
33
- return {};
34
- }
35
-
36
- const attributesMap = {};
37
-
38
- variations.forEach( ( { id, attributes } ) => {
39
- attributesMap[ `id:${ id }` ] = {
40
- id,
41
- attributes: attributes.reduce( ( acc, { name, value } ) => {
42
- acc[ name ] = value;
43
- return acc;
44
- }, {} ),
45
- };
46
- } );
47
-
48
- return attributesMap;
49
- };
50
-
51
- /**
52
- * Given a list of variations and a list of attribute values, return variations which match.
53
- *
54
- * Allows an attribute to be excluded by name. This is used to filter displayed options for
55
- * individual attribute selects.
56
- *
57
- * @param {Object} attributes List of attribute names and terms.
58
- * @param {Object} variationAttributes Attributes for each variation keyed by variation ID.
59
- * @param {Object} selectedAttributes Attribute Name Value pairs of current selections by the user.
60
- * @return {Array} List of matching variation IDs.
61
- */
62
- export const getVariationsMatchingSelectedAttributes = (
63
- attributes,
64
- variationAttributes,
65
- selectedAttributes
66
- ) => {
67
- const variationIds = Object.values( variationAttributes ).map(
68
- ( { id: variationId } ) => {
69
- return variationId;
70
- }
71
- );
72
-
73
- // If nothing is selected yet, just return all variations.
74
- if (
75
- Object.values( selectedAttributes ).every( ( value ) => value === '' )
76
- ) {
77
- return variationIds;
78
- }
79
-
80
- const attributeNames = Object.keys( attributes );
81
-
82
- return variationIds.filter( ( variationId ) =>
83
- attributeNames.every( ( attributeName ) => {
84
- const selectedAttribute = selectedAttributes[ attributeName ] || '';
85
- const variationAttribute =
86
- variationAttributes[ 'id:' + variationId ].attributes[
87
- attributeName
88
- ];
89
-
90
- // If there is no selected attribute, consider this a match.
91
- if ( selectedAttribute === '' ) {
92
- return true;
93
- }
94
- // If the variation attributes for this attribute are set to null, it matches all values.
95
- if ( variationAttribute === null ) {
96
- return true;
97
- }
98
- // Otherwise, only match if the selected values are the same.
99
- return variationAttribute === selectedAttribute;
100
- } )
101
- );
102
- };
103
-
104
- /**
105
- * Given a list of variations and a list of attribute values, returns the first matched variation ID.
106
- *
107
- * @param {Object} attributes List of attribute names and terms.
108
- * @param {Object} variationAttributes Attributes for each variation keyed by variation ID.
109
- * @param {Object} selectedAttributes Attribute Name Value pairs of current selections by the user.
110
- * @return {number} Variation ID.
111
- */
112
- export const getVariationMatchingSelectedAttributes = (
113
- attributes,
114
- variationAttributes,
115
- selectedAttributes
116
- ) => {
117
- const matchingVariationIds = getVariationsMatchingSelectedAttributes(
118
- attributes,
119
- variationAttributes,
120
- selectedAttributes
121
- );
122
- return matchingVariationIds[ 0 ] || 0;
123
- };
124
-
125
- /**
126
- * Given a list of terms, filter them and return valid options for the select boxes.
127
- *
128
- * @see getActiveSelectControlOptions
129
- * @param {Object} attributeTerms List of attribute term objects.
130
- * @param {?Array} validAttributeTerms Valid values if selections have been made already.
131
- * @return {Array} Value/Label pairs of select box options.
132
- */
133
- const getValidSelectControlOptions = (
134
- attributeTerms,
135
- validAttributeTerms = null
136
- ) => {
137
- return Object.values( attributeTerms )
138
- .map( ( { name, slug } ) => {
139
- if (
140
- validAttributeTerms === null ||
141
- validAttributeTerms.includes( null ) ||
142
- validAttributeTerms.includes( slug )
143
- ) {
144
- return {
145
- value: slug,
146
- label: decodeEntities( name ),
147
- };
148
- }
149
- return null;
150
- } )
151
- .filter( Boolean );
152
- };
153
-
154
- /**
155
- * Given a list of terms, filter them and return active options for the select boxes. This factors in
156
- * which options should be hidden due to current selections.
157
- *
158
- * @param {Object} attributes List of attribute names and terms.
159
- * @param {Object} variationAttributes Attributes for each variation keyed by variation ID.
160
- * @param {Object} selectedAttributes Attribute Name Value pairs of current selections by the user.
161
- * @return {Object} Select box options.
162
- */
163
- export const getActiveSelectControlOptions = (
164
- attributes,
165
- variationAttributes,
166
- selectedAttributes
167
- ) => {
168
- const options = {};
169
- const attributeNames = Object.keys( attributes );
170
- const hasSelectedAttributes =
171
- Object.values( selectedAttributes ).filter( Boolean ).length > 0;
172
-
173
- attributeNames.forEach( ( attributeName ) => {
174
- const currentAttribute = attributes[ attributeName ];
175
- const selectedAttributesExcludingCurrentAttribute = {
176
- ...selectedAttributes,
177
- [ attributeName ]: null,
178
- };
179
- // This finds matching variations for selected attributes apart from this one. This will be
180
- // used to get valid attribute terms of the current attribute narrowed down by those matching
181
- // variation IDs. For example, if I had Large Blue Shirts and Medium Red Shirts, I want to only
182
- // show Red shirts if Medium is selected.
183
- const matchingVariationIds = hasSelectedAttributes
184
- ? getVariationsMatchingSelectedAttributes(
185
- attributes,
186
- variationAttributes,
187
- selectedAttributesExcludingCurrentAttribute
188
- )
189
- : null;
190
- // Uses the above matching variation IDs to get the attributes from just those variations.
191
- const validAttributeTerms =
192
- matchingVariationIds !== null
193
- ? matchingVariationIds.map(
194
- ( varId ) =>
195
- variationAttributes[ 'id:' + varId ].attributes[
196
- attributeName
197
- ]
198
- )
199
- : null;
200
- // Intersects attributes with valid attributes.
201
- options[ attributeName ] = getValidSelectControlOptions(
202
- currentAttribute.terms,
203
- validAttributeTerms
204
- );
205
- } );
206
-
207
- return options;
208
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/shared/add-to-cart-button.js DELETED
@@ -1,174 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __, _n, sprintf } from '@wordpress/i18n';
5
- import Button from '@woocommerce/base-components/button';
6
- import { Icon, done as doneIcon } from '@woocommerce/icons';
7
- import { useState, useEffect } from '@wordpress/element';
8
- import { useAddToCartFormContext } from '@woocommerce/base-context';
9
- import {
10
- useStoreEvents,
11
- useStoreAddToCart,
12
- } from '@woocommerce/base-context/hooks';
13
- import { useInnerBlockLayoutContext } from '@woocommerce/shared-context';
14
-
15
- /**
16
- * Add to Cart Form Button Component.
17
- */
18
- const AddToCartButton = () => {
19
- const {
20
- showFormElements,
21
- productIsPurchasable,
22
- productHasOptions,
23
- product,
24
- productType,
25
- isDisabled,
26
- isProcessing,
27
- eventRegistration,
28
- hasError,
29
- dispatchActions,
30
- } = useAddToCartFormContext();
31
- const { parentName } = useInnerBlockLayoutContext();
32
- const { dispatchStoreEvent } = useStoreEvents();
33
- const { cartQuantity } = useStoreAddToCart( product.id || 0 );
34
- const [ addedToCart, setAddedToCart ] = useState( false );
35
- const addToCartButtonData = product.add_to_cart || {
36
- url: '',
37
- text: '',
38
- };
39
-
40
- // Subscribe to emitter for after processing.
41
- useEffect( () => {
42
- const onSuccess = () => {
43
- if ( ! hasError ) {
44
- setAddedToCart( true );
45
- }
46
- return true;
47
- };
48
- const unsubscribeProcessing = eventRegistration.onAddToCartAfterProcessingWithSuccess(
49
- onSuccess,
50
- 0
51
- );
52
- return () => {
53
- unsubscribeProcessing();
54
- };
55
- }, [ eventRegistration, hasError ] );
56
-
57
- /**
58
- * We can show a real button if we are:
59
- *
60
- * a) Showing a full add to cart form.
61
- * b) The product doesn't have options and can therefore be added directly to the cart.
62
- * c) The product is purchasable.
63
- *
64
- * Otherwise we show a link instead.
65
- */
66
- const showButton =
67
- ( showFormElements ||
68
- ( ! productHasOptions && productType === 'simple' ) ) &&
69
- productIsPurchasable;
70
-
71
- return showButton ? (
72
- <ButtonComponent
73
- className="wc-block-components-product-add-to-cart-button"
74
- quantityInCart={ cartQuantity }
75
- isDisabled={ isDisabled }
76
- isProcessing={ isProcessing }
77
- isDone={ addedToCart }
78
- onClick={ () => {
79
- dispatchActions.submitForm();
80
- dispatchStoreEvent( 'cart-add-item', {
81
- product,
82
- listName: parentName,
83
- } );
84
- } }
85
- />
86
- ) : (
87
- <LinkComponent
88
- className="wc-block-components-product-add-to-cart-button"
89
- href={ addToCartButtonData.url }
90
- text={
91
- addToCartButtonData.text ||
92
- __( 'View Product', 'woo-gutenberg-products-block' )
93
- }
94
- onClick={ () => {
95
- dispatchStoreEvent( 'product-view-link', {
96
- product,
97
- listName: parentName,
98
- } );
99
- } }
100
- />
101
- );
102
- };
103
-
104
- /**
105
- * Button component for non-purchasable products.
106
- *
107
- * @param {Object} props Incoming props.
108
- * @param {string} props.className Css classnames.
109
- * @param {string} props.href Link for button.
110
- * @param {string} props.text Text content for button.
111
- * @param {function():any} props.onClick Callback to execute when button is clicked.
112
- */
113
- const LinkComponent = ( { className, href, text, onClick } ) => {
114
- return (
115
- <Button
116
- className={ className }
117
- href={ href }
118
- onClick={ onClick }
119
- rel="nofollow"
120
- >
121
- { text }
122
- </Button>
123
- );
124
- };
125
-
126
- /**
127
- * Button for purchasable products.
128
- *
129
- * @param {Object} props Incoming props for component
130
- * @param {string} props.className Incoming css class name.
131
- * @param {number} props.quantityInCart Quantity of item in cart.
132
- * @param {boolean} props.isProcessing Whether processing action is occurring.
133
- * @param {boolean} props.isDisabled Whether the button is disabled or not.
134
- * @param {boolean} props.isDone Whether processing is done.
135
- * @param {function():any} props.onClick Callback to execute when button is clicked.
136
- */
137
- const ButtonComponent = ( {
138
- className,
139
- quantityInCart,
140
- isProcessing,
141
- isDisabled,
142
- isDone,
143
- onClick,
144
- } ) => {
145
- return (
146
- <Button
147
- className={ className }
148
- disabled={ isDisabled }
149
- showSpinner={ isProcessing }
150
- onClick={ onClick }
151
- >
152
- { isDone && quantityInCart > 0
153
- ? sprintf(
154
- /* translators: %s number of products in cart. */
155
- _n(
156
- '%d in cart',
157
- '%d in cart',
158
- quantityInCart,
159
- 'woo-gutenberg-products-block'
160
- ),
161
- quantityInCart
162
- )
163
- : __( 'Add to cart', 'woo-gutenberg-products-block' ) }
164
- { !! isDone && (
165
- <Icon
166
- srcElement={ doneIcon }
167
- alt={ __( 'Done', 'woo-gutenberg-products-block' ) }
168
- />
169
- ) }
170
- </Button>
171
- );
172
- };
173
-
174
- export default AddToCartButton;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/shared/index.js DELETED
@@ -1,3 +0,0 @@
1
- export { default as AddToCartButton } from './add-to-cart-button';
2
- export { default as QuantityInput } from './quantity-input';
3
- export { default as ProductUnavailable } from './product-unavailable';
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/shared/product-unavailable.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
-
6
- const ProductUnavailable = ( {
7
- reason = __(
8
- 'Sorry, this product cannot be purchased.',
9
- 'woo-gutenberg-products-block'
10
- ),
11
- } ) => {
12
- return (
13
- <div className="wc-block-components-product-add-to-cart-unavailable">
14
- { reason }
15
- </div>
16
- );
17
- };
18
-
19
- export default ProductUnavailable;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/shared/quantity-input.js DELETED
@@ -1,28 +0,0 @@
1
- /**
2
- * Quantity Input Component.
3
- *
4
- * @param {Object} props Incoming props for component
5
- * @param {boolean} props.disabled Whether input is disabled or not.
6
- * @param {number} props.min Minimum value for input.
7
- * @param {number} props.max Maximum value for input.
8
- * @param {number} props.value Value for input.
9
- * @param {function():any} props.onChange Function to call on input change event.
10
- */
11
- const QuantityInput = ( { disabled, min, max, value, onChange } ) => {
12
- return (
13
- <input
14
- className="wc-block-components-product-add-to-cart-quantity"
15
- type="number"
16
- value={ value }
17
- min={ min }
18
- max={ max }
19
- hidden={ max === 1 }
20
- disabled={ disabled }
21
- onChange={ ( e ) => {
22
- onChange( e.target.value );
23
- } }
24
- />
25
- );
26
- };
27
-
28
- export default QuantityInput;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/add-to-cart/style.scss DELETED
@@ -1,49 +0,0 @@
1
- .wc-block-components-product-add-to-cart {
2
- margin: 0;
3
- display: flex;
4
- flex-wrap: wrap;
5
-
6
- .wc-block-components-product-add-to-cart-button {
7
- margin: 0 0 em($gap-small) 0;
8
-
9
- .wc-block-components-button__text {
10
- display: block;
11
-
12
- > svg {
13
- fill: currentColor;
14
- vertical-align: top;
15
- width: 1.5em;
16
- height: 1.5em;
17
- margin: -0.25em 0 -0.25em 0.5em;
18
- }
19
- }
20
- }
21
-
22
- .wc-block-components-product-add-to-cart-quantity {
23
- margin: 0 1em em($gap-small) 0;
24
- flex-basis: 5em;
25
- padding: 0.618em;
26
- background: $white;
27
- border: 1px solid #ccc;
28
- border-radius: 2px;
29
- color: #43454b;
30
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.125);
31
- text-align: center;
32
- }
33
- }
34
-
35
- .is-loading .wc-block-components-product-add-to-cart,
36
- .wc-block-components-product-add-to-cart--placeholder {
37
- .wc-block-components-product-add-to-cart-quantity,
38
- .wc-block-components-product-add-to-cart-button {
39
- @include placeholder();
40
- }
41
- }
42
-
43
- .wc-block-grid .wc-block-components-product-add-to-cart {
44
- justify-content: center;
45
- }
46
-
47
- .wc-block-components-product-add-to-cart-notice {
48
- margin: 0;
49
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/button/attributes.js DELETED
@@ -1,8 +0,0 @@
1
- export const blockAttributes = {
2
- productId: {
3
- type: 'number',
4
- default: 0,
5
- },
6
- };
7
-
8
- export default blockAttributes;
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/button/block.js DELETED
@@ -1,145 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import PropTypes from 'prop-types';
5
- import classnames from 'classnames';
6
- import { __, _n, sprintf } from '@wordpress/i18n';
7
- import {
8
- useStoreEvents,
9
- useStoreAddToCart,
10
- } from '@woocommerce/base-context/hooks';
11
- import { decodeEntities } from '@wordpress/html-entities';
12
- import {
13
- useInnerBlockLayoutContext,
14
- useProductDataContext,
15
- } from '@woocommerce/shared-context';
16
- import { withProductDataContext } from '@woocommerce/shared-hocs';
17
-
18
- /**
19
- * Internal dependencies
20
- */
21
- import './style.scss';
22
-
23
- /**
24
- * Product Button Block Component.
25
- *
26
- * @param {Object} props Incoming props.
27
- * @param {string} [props.className] CSS Class name for the component.
28
- * @return {*} The component.
29
- */
30
- const Block = ( { className } ) => {
31
- const { parentClassName } = useInnerBlockLayoutContext();
32
- const { product } = useProductDataContext();
33
-
34
- return (
35
- <div
36
- className={ classnames(
37
- className,
38
- 'wp-block-button',
39
- 'wc-block-components-product-button',
40
- {
41
- [ `${ parentClassName }__product-add-to-cart` ]: parentClassName,
42
- }
43
- ) }
44
- >
45
- { product.id ? (
46
- <AddToCartButton product={ product } />
47
- ) : (
48
- <AddToCartButtonPlaceholder />
49
- ) }
50
- </div>
51
- );
52
- };
53
-
54
- const AddToCartButton = ( { product } ) => {
55
- const {
56
- id,
57
- permalink,
58
- add_to_cart: productCartDetails,
59
- has_options: hasOptions,
60
- is_purchasable: isPurchasable,
61
- is_in_stock: isInStock,
62
- } = product;
63
- const { dispatchStoreEvent } = useStoreEvents();
64
- const { cartQuantity, addingToCart, addToCart } = useStoreAddToCart( id );
65
-
66
- const addedToCart = Number.isFinite( cartQuantity ) && cartQuantity > 0;
67
- const allowAddToCart = ! hasOptions && isPurchasable && isInStock;
68
- const buttonAriaLabel = decodeEntities(
69
- productCartDetails?.description || ''
70
- );
71
- const buttonText = addedToCart
72
- ? sprintf(
73
- /* translators: %s number of products in cart. */
74
- _n(
75
- '%d in cart',
76
- '%d in cart',
77
- cartQuantity,
78
- 'woo-gutenberg-products-block'
79
- ),
80
- cartQuantity
81
- )
82
- : decodeEntities(
83
- productCartDetails?.text ||
84
- __( 'Add to cart', 'woo-gutenberg-products-block' )
85
- );
86
-
87
- const ButtonTag = allowAddToCart ? 'button' : 'a';
88
- const buttonProps = {};
89
-
90
- if ( ! allowAddToCart ) {
91
- buttonProps.href = permalink;
92
- buttonProps.rel = 'nofollow';
93
- buttonProps.onClick = () => {
94
- dispatchStoreEvent( 'product-view-link', {
95
- product,
96
- } );
97
- };
98
- } else {
99
- buttonProps.onClick = () => {
100
- addToCart();
101
- dispatchStoreEvent( 'cart-add-item', {
102
- product,
103
- } );
104
- };
105
- }
106
-
107
- return (
108
- <ButtonTag
109
- aria-label={ buttonAriaLabel }
110
- className={ classnames(
111
- 'wp-block-button__link',
112
- 'add_to_cart_button',
113
- 'wc-block-components-product-button__button',
114
- {
115
- loading: addingToCart,
116
- added: addedToCart,
117
- }
118
- ) }
119
- disabled={ addingToCart }
120
- { ...buttonProps }
121
- >
122
- { buttonText }
123
- </ButtonTag>
124
- );
125
- };
126
-
127
- const AddToCartButtonPlaceholder = () => {
128
- return (
129
- <button
130
- className={ classnames(
131
- 'wp-block-button__link',
132
- 'add_to_cart_button',
133
- 'wc-block-components-product-button__button',
134
- 'wc-block-components-product-button__button--placeholder'
135
- ) }
136
- disabled={ true }
137
- />
138
- );
139
- };
140
-
141
- Block.propTypes = {
142
- className: PropTypes.string,
143
- };
144
-
145
- export default withProductDataContext( Block );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/button/constants.js DELETED
@@ -1,15 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { cart, Icon } from '@woocommerce/icons';
6
-
7
- export const BLOCK_TITLE = __(
8
- 'Add to Cart Button',
9
- 'woo-gutenberg-products-block'
10
- );
11
- export const BLOCK_ICON = <Icon srcElement={ cart } />;
12
- export const BLOCK_DESCRIPTION = __(
13
- 'Display a call to action button which either adds the product to the cart, or links to the product page.',
14
- 'woo-gutenberg-products-block'
15
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/button/edit.js DELETED
@@ -1,29 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { Disabled } from '@wordpress/components';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import Block from './block';
11
- import withProductSelector from '../shared/with-product-selector';
12
- import { BLOCK_TITLE, BLOCK_ICON } from './constants';
13
-
14
- const Edit = ( { attributes } ) => {
15
- return (
16
- <Disabled>
17
- <Block { ...attributes } />
18
- </Disabled>
19
- );
20
- };
21
-
22
- export default withProductSelector( {
23
- icon: BLOCK_ICON,
24
- label: BLOCK_TITLE,
25
- description: __(
26
- 'Choose a product to display its add to cart button.',
27
- 'woo-gutenberg-products-block'
28
- ),
29
- } )( Edit );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/button/index.js DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { registerBlockType } from '@wordpress/blocks';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import sharedConfig from '../shared/config';
10
- import attributes from './attributes';
11
- import edit from './edit';
12
- import {
13
- BLOCK_TITLE as title,
14
- BLOCK_ICON as icon,
15
- BLOCK_DESCRIPTION as description,
16
- } from './constants';
17
-
18
- const blockConfig = {
19
- title,
20
- description,
21
- icon: {
22
- src: icon,
23
- foreground: '#874FB9',
24
- },
25
- attributes,
26
- edit,
27
- };
28
-
29
- registerBlockType( 'woocommerce/product-button', {
30
- ...sharedConfig,
31
- ...blockConfig,
32
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/button/style.scss DELETED
@@ -1,36 +0,0 @@
1
- .wp-block-button.wc-block-components-product-button {
2
- word-break: break-word;
3
- white-space: normal;
4
- margin-top: 0;
5
- margin-bottom: $gap-small;
6
-
7
- .wc-block-components-product-button__button {
8
- word-break: break-word;
9
- white-space: normal;
10
- margin: 0 auto;
11
- display: inline-flex;
12
- justify-content: center;
13
- }
14
-
15
- .wc-block-components-product-button__button--placeholder {
16
- @include placeholder();
17
- min-width: 8em;
18
- min-height: 3em;
19
- }
20
- }
21
-
22
- .is-loading .wc-block-components-product-button > .wc-block-components-product-button__button {
23
- @include placeholder();
24
- min-width: 8em;
25
- min-height: 3em;
26
- }
27
-
28
-
29
- .theme-twentytwentyone {
30
- // Prevent buttons appearing disabled in the editor.
31
- .editor-styles-wrapper .wc-block-components-product-button .wp-block-button__link {
32
- background-color: var(--button--color-background);
33
- color: var(--button--color-text);
34
- border-color: var(--button--color-background);
35
- }
36
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/category-list/attributes.js DELETED
@@ -1,8 +0,0 @@
1
- export const blockAttributes = {
2
- productId: {
3
- type: 'number',
4
- default: 0,
5
- },
6
- };
7
-
8
- export default blockAttributes;
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/category-list/block.js DELETED
@@ -1,64 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import PropTypes from 'prop-types';
6
- import classnames from 'classnames';
7
- import {
8
- useInnerBlockLayoutContext,
9
- useProductDataContext,
10
- } from '@woocommerce/shared-context';
11
- import { isEmpty } from 'lodash';
12
- import { withProductDataContext } from '@woocommerce/shared-hocs';
13
-
14
- /**
15
- * Internal dependencies
16
- */
17
- import './style.scss';
18
-
19
- /**
20
- * Product Category Block Component.
21
- *
22
- * @param {Object} props Incoming props.
23
- * @param {string} [props.className] CSS Class name for the component.
24
- * @return {*} The component.
25
- */
26
- const Block = ( { className } ) => {
27
- const { parentClassName } = useInnerBlockLayoutContext();
28
- const { product } = useProductDataContext();
29
-
30
- if ( isEmpty( product.categories ) ) {
31
- return null;
32
- }
33
-
34
- return (
35
- <div
36
- className={ classnames(
37
- className,
38
- 'wc-block-components-product-category-list',
39
- {
40
- [ `${ parentClassName }__product-category-list` ]: parentClassName,
41
- }
42
- ) }
43
- >
44
- { __( 'Categories:', 'woo-gutenberg-products-block' ) }{ ' ' }
45
- <ul>
46
- { Object.values( product.categories ).map(
47
- ( { name, link, slug } ) => {
48
- return (
49
- <li key={ `category-list-item-${ slug }` }>
50
- <a href={ link }>{ name }</a>
51
- </li>
52
- );
53
- }
54
- ) }
55
- </ul>
56
- </div>
57
- );
58
- };
59
-
60
- Block.propTypes = {
61
- className: PropTypes.string,
62
- };
63
-
64
- export default withProductDataContext( Block );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/category-list/constants.js DELETED
@@ -1,15 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { folder, Icon } from '@woocommerce/icons';
6
-
7
- export const BLOCK_TITLE = __(
8
- 'Product Category List',
9
- 'woo-gutenberg-products-block'
10
- );
11
- export const BLOCK_ICON = <Icon srcElement={ folder } />;
12
- export const BLOCK_DESCRIPTION = __(
13
- 'Display a list of categories belonging to a product.',
14
- 'woo-gutenberg-products-block'
15
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/category-list/edit.js DELETED
@@ -1,33 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { Disabled } from '@wordpress/components';
6
- import EditProductLink from '@woocommerce/editor-components/edit-product-link';
7
-
8
- /**
9
- * Internal dependencies
10
- */
11
- import Block from './block';
12
- import withProductSelector from '../shared/with-product-selector';
13
- import { BLOCK_TITLE, BLOCK_ICON } from './constants';
14
-
15
- const Edit = ( { attributes } ) => {
16
- return (
17
- <>
18
- <EditProductLink />
19
- <Disabled>
20
- <Block { ...attributes } />
21
- </Disabled>
22
- </>
23
- );
24
- };
25
-
26
- export default withProductSelector( {
27
- icon: BLOCK_ICON,
28
- label: BLOCK_TITLE,
29
- description: __(
30
- 'Choose a product to display its categories.',
31
- 'woo-gutenberg-products-block'
32
- ),
33
- } )( Edit );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/category-list/index.js DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { registerExperimentalBlockType } from '@woocommerce/block-settings';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import sharedConfig from '../shared/config';
10
- import attributes from './attributes';
11
- import edit from './edit';
12
- import {
13
- BLOCK_TITLE as title,
14
- BLOCK_ICON as icon,
15
- BLOCK_DESCRIPTION as description,
16
- } from './constants';
17
-
18
- const blockConfig = {
19
- title,
20
- description,
21
- icon: {
22
- src: icon,
23
- foreground: '#874FB9',
24
- },
25
- attributes,
26
- edit,
27
- };
28
-
29
- registerExperimentalBlockType( 'woocommerce/product-category-list', {
30
- ...sharedConfig,
31
- ...blockConfig,
32
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/category-list/style.scss DELETED
@@ -1,23 +0,0 @@
1
- .wc-block-components-product-category-list {
2
- margin-top: 0;
3
- margin-bottom: em($gap-small);
4
-
5
- ul {
6
- margin: 0;
7
- padding: 0;
8
- display: inline;
9
-
10
- li {
11
- display: inline;
12
- list-style: none;
13
- }
14
-
15
- li::after {
16
- content: ", ";
17
- }
18
-
19
- li:last-child::after {
20
- content: "";
21
- }
22
- }
23
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/image/attributes.js DELETED
@@ -1,24 +0,0 @@
1
- export const blockAttributes = {
2
- productLink: {
3
- type: 'boolean',
4
- default: true,
5
- },
6
- showSaleBadge: {
7
- type: 'boolean',
8
- default: true,
9
- },
10
- saleBadgeAlign: {
11
- type: 'string',
12
- default: 'right',
13
- },
14
- imageSizing: {
15
- type: 'string',
16
- default: 'full-size',
17
- },
18
- productId: {
19
- type: 'number',
20
- default: 0,
21
- },
22
- };
23
-
24
- export default blockAttributes;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/image/block.js DELETED
@@ -1,144 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import PropTypes from 'prop-types';
5
- import { useState, Fragment } from '@wordpress/element';
6
- import { __, sprintf } from '@wordpress/i18n';
7
- import classnames from 'classnames';
8
- import { PLACEHOLDER_IMG_SRC } from '@woocommerce/settings';
9
- import {
10
- useInnerBlockLayoutContext,
11
- useProductDataContext,
12
- } from '@woocommerce/shared-context';
13
- import { withProductDataContext } from '@woocommerce/shared-hocs';
14
- import { useStoreEvents } from '@woocommerce/base-context/hooks';
15
-
16
- /**
17
- * Internal dependencies
18
- */
19
- import ProductSaleBadge from './../sale-badge/block';
20
- import './style.scss';
21
-
22
- /**
23
- * Product Image Block Component.
24
- *
25
- * @param {Object} props Incoming props.
26
- * @param {string} [props.className] CSS Class name for the component.
27
- * @param {string} [props.imageSizing] Size of image to use.
28
- * @param {boolean} [props.productLink] Whether or not to display a link to the product page.
29
- * @param {boolean} [props.showSaleBadge] Whether or not to display the on sale badge.
30
- * @param {string} [props.saleBadgeAlign] How should the sale badge be aligned if displayed.
31
- * @return {*} The component.
32
- */
33
- export const Block = ( {
34
- className,
35
- imageSizing = 'full-size',
36
- productLink: showProductLink = true,
37
- showSaleBadge,
38
- saleBadgeAlign = 'right',
39
- } ) => {
40
- const { parentClassName } = useInnerBlockLayoutContext();
41
- const { product } = useProductDataContext();
42
- const [ imageLoaded, setImageLoaded ] = useState( false );
43
- const { dispatchStoreEvent } = useStoreEvents();
44
-
45
- if ( ! product.id ) {
46
- return (
47
- <div
48
- className={ classnames(
49
- className,
50
- 'wc-block-components-product-image',
51
- 'wc-block-components-product-image--placeholder',
52
- {
53
- [ `${ parentClassName }__product-image` ]: parentClassName,
54
- }
55
- ) }
56
- >
57
- <ImagePlaceholder />
58
- </div>
59
- );
60
- }
61
- const hasProductImages = !! product.images.length;
62
- const image = hasProductImages ? product.images[ 0 ] : null;
63
- const ParentComponent = showProductLink ? 'a' : Fragment;
64
- const anchorLabel = sprintf(
65
- /* translators: %s is referring to the product name */
66
- __( 'Link to %s', 'woo-gutenberg-products-block' ),
67
- product.name
68
- );
69
- const anchorProps = {
70
- href: product.permalink,
71
- rel: 'nofollow',
72
- ...( ! hasProductImages && { 'aria-label': anchorLabel } ),
73
- onClick: () => {
74
- dispatchStoreEvent( 'product-view-link', {
75
- product,
76
- } );
77
- },
78
- };
79
-
80
- return (
81
- <div
82
- className={ classnames(
83
- className,
84
- 'wc-block-components-product-image',
85
- {
86
- [ `${ parentClassName }__product-image` ]: parentClassName,
87
- }
88
- ) }
89
- >
90
- <ParentComponent { ...( showProductLink && anchorProps ) }>
91
- { !! showSaleBadge && (
92
- <ProductSaleBadge
93
- align={ saleBadgeAlign }
94
- product={ product }
95
- />
96
- ) }
97
- <Image
98
- fallbackAlt={ product.name }
99
- image={ image }
100
- onLoad={ () => setImageLoaded( true ) }
101
- loaded={ imageLoaded }
102
- showFullSize={ imageSizing !== 'cropped' }
103
- />
104
- </ParentComponent>
105
- </div>
106
- );
107
- };
108
-
109
- const ImagePlaceholder = () => {
110
- return (
111
- <img src={ PLACEHOLDER_IMG_SRC } alt="" width={ 500 } height={ 500 } />
112
- );
113
- };
114
-
115
- const Image = ( { image, onLoad, loaded, showFullSize, fallbackAlt } ) => {
116
- const { thumbnail, src, srcset, sizes, alt } = image || {};
117
- const imageProps = {
118
- alt: alt || fallbackAlt,
119
- onLoad,
120
- hidden: ! loaded,
121
- src: thumbnail,
122
- ...( showFullSize && { src, srcSet: srcset, sizes } ),
123
- };
124
-
125
- return (
126
- <>
127
- { imageProps.src && (
128
- /* eslint-disable-next-line jsx-a11y/alt-text */
129
- <img data-testid="product-image" { ...imageProps } />
130
- ) }
131
- { ! loaded && <ImagePlaceholder /> }
132
- </>
133
- );
134
- };
135
-
136
- Block.propTypes = {
137
- className: PropTypes.string,
138
- fallbackAlt: PropTypes.string,
139
- productLink: PropTypes.bool,
140
- showSaleBadge: PropTypes.bool,
141
- saleBadgeAlign: PropTypes.string,
142
- };
143
-
144
- export default withProductDataContext( Block );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/image/constants.js DELETED
@@ -1,15 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { image, Icon } from '@woocommerce/icons';
6
-
7
- export const BLOCK_TITLE = __(
8
- 'Product Image',
9
- 'woo-gutenberg-products-block'
10
- );
11
- export const BLOCK_ICON = <Icon srcElement={ image } />;
12
- export const BLOCK_DESCRIPTION = __(
13
- 'Display the main product image',
14
- 'woo-gutenberg-products-block'
15
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/image/edit.js DELETED
@@ -1,159 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { Disabled, PanelBody, ToggleControl } from '@wordpress/components';
6
- import { InspectorControls } from '@wordpress/block-editor';
7
- import { createInterpolateElement } from 'wordpress-element';
8
- import ToggleButtonControl from '@woocommerce/editor-components/toggle-button-control';
9
- import { getAdminLink } from '@woocommerce/settings';
10
-
11
- /**
12
- * Internal dependencies
13
- */
14
- import Block from './block';
15
- import withProductSelector from '../shared/with-product-selector';
16
- import { BLOCK_TITLE, BLOCK_ICON } from './constants';
17
-
18
- const Edit = ( { attributes, setAttributes } ) => {
19
- const {
20
- productLink,
21
- imageSizing,
22
- showSaleBadge,
23
- saleBadgeAlign,
24
- } = attributes;
25
-
26
- return (
27
- <>
28
- <InspectorControls>
29
- <PanelBody
30
- title={ __( 'Content', 'woo-gutenberg-products-block' ) }
31
- >
32
- <ToggleControl
33
- label={ __(
34
- 'Link to Product Page',
35
- 'woo-gutenberg-products-block'
36
- ) }
37
- help={ __(
38
- 'Links the image to the single product listing.',
39
- 'woo-gutenberg-products-block'
40
- ) }
41
- checked={ productLink }
42
- onChange={ () =>
43
- setAttributes( {
44
- productLink: ! productLink,
45
- } )
46
- }
47
- />
48
- <ToggleControl
49
- label={ __(
50
- 'Show On-Sale Badge',
51
- 'woo-gutenberg-products-block'
52
- ) }
53
- help={ __(
54
- 'Overlay a "sale" badge if the product is on-sale.',
55
- 'woo-gutenberg-products-block'
56
- ) }
57
- checked={ showSaleBadge }
58
- onChange={ () =>
59
- setAttributes( {
60
- showSaleBadge: ! showSaleBadge,
61
- } )
62
- }
63
- />
64
- { showSaleBadge && (
65
- <ToggleButtonControl
66
- label={ __(
67
- 'Sale Badge Alignment',
68
- 'woo-gutenberg-products-block'
69
- ) }
70
- value={ saleBadgeAlign }
71
- options={ [
72
- {
73
- label: __(
74
- 'Left',
75
- 'woo-gutenberg-products-block'
76
- ),
77
- value: 'left',
78
- },
79
- {
80
- label: __(
81
- 'Center',
82
- 'woo-gutenberg-products-block'
83
- ),
84
- value: 'center',
85
- },
86
- {
87
- label: __(
88
- 'Right',
89
- 'woo-gutenberg-products-block'
90
- ),
91
- value: 'right',
92
- },
93
- ] }
94
- onChange={ ( value ) =>
95
- setAttributes( { saleBadgeAlign: value } )
96
- }
97
- />
98
- ) }
99
- <ToggleButtonControl
100
- label={ __(
101
- 'Image Sizing',
102
- 'woo-gutenberg-products-block'
103
- ) }
104
- help={ createInterpolateElement(
105
- __(
106
- 'Product image cropping can be modified in the <a>Customizer</a>.',
107
- 'woo-gutenberg-products-block'
108
- ),
109
- {
110
- a: (
111
- // eslint-disable-next-line jsx-a11y/anchor-has-content
112
- <a
113
- href={ `${ getAdminLink(
114
- 'customize.php'
115
- ) }?autofocus[panel]=woocommerce&autofocus[section]=woocommerce_product_images` }
116
- target="_blank"
117
- rel="noopener noreferrer"
118
- />
119
- ),
120
- }
121
- ) }
122
- value={ imageSizing }
123
- options={ [
124
- {
125
- label: __(
126
- 'Full Size',
127
- 'woo-gutenberg-products-block'
128
- ),
129
- value: 'full-size',
130
- },
131
- {
132
- label: __(
133
- 'Cropped',
134
- 'woo-gutenberg-products-block'
135
- ),
136
- value: 'cropped',
137
- },
138
- ] }
139
- onChange={ ( value ) =>
140
- setAttributes( { imageSizing: value } )
141
- }
142
- />
143
- </PanelBody>
144
- </InspectorControls>
145
- <Disabled>
146
- <Block { ...attributes } />
147
- </Disabled>
148
- </>
149
- );
150
- };
151
-
152
- export default withProductSelector( {
153
- icon: BLOCK_ICON,
154
- label: BLOCK_TITLE,
155
- description: __(
156
- 'Choose a product to display its image.',
157
- 'woo-gutenberg-products-block'
158
- ),
159
- } )( Edit );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/image/frontend.js DELETED
@@ -1,12 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import withFilteredAttributes from '@woocommerce/base-hocs/with-filtered-attributes';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import Block from './block';
10
- import attributes from './attributes';
11
-
12
- export default withFilteredAttributes( attributes )( Block );
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/image/index.js DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { registerBlockType } from '@wordpress/blocks';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import sharedConfig from '../shared/config';
10
- import attributes from './attributes';
11
- import edit from './edit';
12
- import {
13
- BLOCK_TITLE as title,
14
- BLOCK_ICON as icon,
15
- BLOCK_DESCRIPTION as description,
16
- } from './constants';
17
-
18
- const blockConfig = {
19
- title,
20
- description,
21
- icon: {
22
- src: icon,
23
- foreground: '#874FB9',
24
- },
25
- attributes,
26
- edit,
27
- };
28
-
29
- registerBlockType( 'woocommerce/product-image', {
30
- ...sharedConfig,
31
- ...blockConfig,
32
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/image/style.scss DELETED
@@ -1,53 +0,0 @@
1
- .editor-styles-wrapper .wc-block-grid__products .wc-block-grid__product .wc-block-components-product-image,
2
- .wc-block-components-product-image {
3
- margin-top: 0;
4
- margin-bottom: $gap-small;
5
- text-decoration: none;
6
- display: block;
7
- position: relative;
8
-
9
- a {
10
- text-decoration: none;
11
- border: 0;
12
- outline: 0;
13
- box-shadow: none;
14
- }
15
-
16
- img {
17
- vertical-align: middle;
18
- width: 100%;
19
-
20
- &[hidden] {
21
- display: none;
22
- }
23
- }
24
-
25
- .wc-block-components-product-sale-badge {
26
- &--align-left {
27
- position: absolute;
28
- left: $gap-smaller/2;
29
- top: $gap-smaller/2;
30
- right: auto;
31
- margin: 0;
32
- }
33
- &--align-center {
34
- position: absolute;
35
- top: $gap-smaller/2;
36
- left: 50%;
37
- right: auto;
38
- transform: translateX(-50%);
39
- margin: 0;
40
- }
41
- &--align-right {
42
- position: absolute;
43
- right: $gap-smaller/2;
44
- top: $gap-smaller/2;
45
- left: auto;
46
- margin: 0;
47
- }
48
- }
49
- }
50
-
51
- .is-loading .wc-block-components-product-image {
52
- @include placeholder();
53
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/image/test/block.test.js DELETED
@@ -1,139 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { render, fireEvent } from '@testing-library/react';
5
- import { ProductDataContextProvider } from '@woocommerce/shared-context';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import { Block } from '../block';
11
-
12
- jest.mock( '@woocommerce/block-settings', () => ( {
13
- __esModule: true,
14
- PLACEHOLDER_IMG_SRC: 'placeholder.jpg',
15
- } ) );
16
-
17
- const productWithoutImages = {
18
- name: 'Test product',
19
- id: 1,
20
- fallbackAlt: 'Test product',
21
- permalink: 'http://test.com/product/test-product/',
22
- images: [],
23
- };
24
-
25
- const productWithImages = {
26
- name: 'Test product',
27
- id: 1,
28
- fallbackAlt: 'Test product',
29
- permalink: 'http://test.com/product/test-product/',
30
- images: [
31
- {
32
- id: 56,
33
- src: 'logo-1.jpg',
34
- thumbnail: 'logo-1-324x324.jpg',
35
- srcset:
36
- 'logo-1.jpg 800w, logo-1-300x300.jpg 300w, logo-1-150x150.jpg 150w, logo-1-768x767.jpg 768w, logo-1-324x324.jpg 324w, logo-1-416x415.jpg 416w, logo-1-100x100.jpg 100w',
37
- sizes: '(max-width: 800px) 100vw, 800px',
38
- name: 'logo-1.jpg',
39
- alt: '',
40
- },
41
- {
42
- id: 55,
43
- src: 'beanie-with-logo-1.jpg',
44
- thumbnail: 'beanie-with-logo-1-324x324.jpg',
45
- srcset:
46
- 'beanie-with-logo-1.jpg 800w, beanie-with-logo-1-300x300.jpg 300w, beanie-with-logo-1-150x150.jpg 150w, beanie-with-logo-1-768x768.jpg 768w, beanie-with-logo-1-324x324.jpg 324w, beanie-with-logo-1-416x416.jpg 416w, beanie-with-logo-1-100x100.jpg 100w',
47
- sizes: '(max-width: 800px) 100vw, 800px',
48
- name: 'beanie-with-logo-1.jpg',
49
- alt: '',
50
- },
51
- ],
52
- };
53
-
54
- describe( 'Product Image Block', () => {
55
- describe( 'with product link', () => {
56
- test( 'should render an anchor with the product image', () => {
57
- const component = render(
58
- <ProductDataContextProvider product={ productWithImages }>
59
- <Block productLink />
60
- </ProductDataContextProvider>
61
- );
62
-
63
- // use testId as alt is added after image is loaded
64
- const image = component.getByTestId( 'product-image' );
65
- fireEvent.load( image );
66
-
67
- const productImage = component.getByAltText(
68
- productWithImages.name
69
- );
70
- expect( productImage.getAttribute( 'src' ) ).toBe(
71
- productWithImages.images[ 0 ].src
72
- );
73
-
74
- const anchor = productImage.closest( 'a' );
75
- expect( anchor.getAttribute( 'href' ) ).toBe(
76
- productWithImages.permalink
77
- );
78
- } );
79
-
80
- test( 'should render an anchor with the placeholder image', () => {
81
- const component = render(
82
- <ProductDataContextProvider product={ productWithoutImages }>
83
- <Block productLink />
84
- </ProductDataContextProvider>
85
- );
86
-
87
- const placeholderImage = component.getByAltText( '' );
88
- expect( placeholderImage.getAttribute( 'src' ) ).toBe(
89
- 'placeholder.jpg'
90
- );
91
-
92
- const anchor = placeholderImage.closest( 'a' );
93
- expect( anchor.getAttribute( 'href' ) ).toBe(
94
- productWithoutImages.permalink
95
- );
96
- expect( anchor.getAttribute( 'aria-label' ) ).toBe(
97
- `Link to ${ productWithoutImages.name }`
98
- );
99
- } );
100
- } );
101
-
102
- describe( 'without product link', () => {
103
- test( 'should render the product image without an anchor wrapper', () => {
104
- const component = render(
105
- <ProductDataContextProvider product={ productWithImages }>
106
- <Block productLink={ false } />
107
- </ProductDataContextProvider>
108
- );
109
- const image = component.getByTestId( 'product-image' );
110
- fireEvent.load( image );
111
-
112
- const productImage = component.getByAltText(
113
- productWithImages.name
114
- );
115
- expect( productImage.getAttribute( 'src' ) ).toBe(
116
- productWithImages.images[ 0 ].src
117
- );
118
-
119
- const anchor = productImage.closest( 'a' );
120
- expect( anchor ).toBe( null );
121
- } );
122
-
123
- test( 'should render the placeholder image without an anchor wrapper', () => {
124
- const component = render(
125
- <ProductDataContextProvider product={ productWithoutImages }>
126
- <Block productLink={ false } />
127
- </ProductDataContextProvider>
128
- );
129
-
130
- const placeholderImage = component.getByAltText( '' );
131
- expect( placeholderImage.getAttribute( 'src' ) ).toBe(
132
- 'placeholder.jpg'
133
- );
134
-
135
- const anchor = placeholderImage.closest( 'a' );
136
- expect( anchor ).toBe( null );
137
- } );
138
- } );
139
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/price/attributes.js DELETED
@@ -1,45 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { isFeaturePluginBuild } from '@woocommerce/block-settings';
5
-
6
- let blockAttributes = {
7
- productId: {
8
- type: 'number',
9
- default: 0,
10
- },
11
- };
12
-
13
- if ( isFeaturePluginBuild() ) {
14
- blockAttributes = {
15
- ...blockAttributes,
16
- align: {
17
- type: 'string',
18
- },
19
- fontSize: {
20
- type: 'string',
21
- },
22
- customFontSize: {
23
- type: 'number',
24
- },
25
- saleFontSize: {
26
- type: 'string',
27
- },
28
- customSaleFontSize: {
29
- type: 'number',
30
- },
31
- color: {
32
- type: 'string',
33
- },
34
- saleColor: {
35
- type: 'string',
36
- },
37
- customColor: {
38
- type: 'string',
39
- },
40
- customSaleColor: {
41
- type: 'string',
42
- },
43
- };
44
- }
45
- export default blockAttributes;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/price/block.js DELETED
@@ -1,135 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import PropTypes from 'prop-types';
5
- import classnames from 'classnames';
6
- import ProductPrice from '@woocommerce/base-components/product-price';
7
- import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
8
- import {
9
- useInnerBlockLayoutContext,
10
- useProductDataContext,
11
- } from '@woocommerce/shared-context';
12
- import { getColorClassName, getFontSizeClass } from '@wordpress/block-editor';
13
- import { isFeaturePluginBuild } from '@woocommerce/block-settings';
14
- import { withProductDataContext } from '@woocommerce/shared-hocs';
15
-
16
- /**
17
- * Product Price Block Component.
18
- *
19
- * @param {Object} props Incoming props.
20
- * @param {string} [props.className] CSS Class name for the component.
21
- * @param {string} [props.align] Text alignment.
22
- * @param {string} [props.fontSize] Normal Price font size name.
23
- * @param {number} [props.customFontSize] Normal Price custom font size.
24
- * @param {string} [props.saleFontSize] Original Price font size name.
25
- * @param {number} [props.customSaleFontSize] Original Price custom font size.
26
- * @param {string} [props.color] Normal Price text color.
27
- * @param {string} [props.customColor] Normal Price custom text color.
28
- * @param {string} [props.saleColor] Original Price text color.
29
- * @param {string} [props.customSaleColor] Original Price custom text color.
30
- * context will be used if this is not provided.
31
- * @return {*} The component.
32
- */
33
- const Block = ( {
34
- className,
35
- align,
36
- fontSize,
37
- customFontSize,
38
- saleFontSize,
39
- customSaleFontSize,
40
- color,
41
- customColor,
42
- saleColor,
43
- customSaleColor,
44
- } ) => {
45
- const { parentClassName } = useInnerBlockLayoutContext();
46
- const { product } = useProductDataContext();
47
-
48
- const wrapperClassName = classnames( className, {
49
- [ `${ parentClassName }__product-price` ]: parentClassName,
50
- } );
51
-
52
- if ( ! product.id ) {
53
- return <ProductPrice align={ align } className={ wrapperClassName } />;
54
- }
55
-
56
- const colorClass = getColorClassName( 'color', color );
57
- const fontSizeClass = getFontSizeClass( fontSize );
58
- const saleColorClass = getColorClassName( 'color', saleColor );
59
- const saleFontSizeClass = getFontSizeClass( saleFontSize );
60
-
61
- const classes = classnames( {
62
- 'has-text-color': color || customColor,
63
- 'has-font-size': fontSize || customFontSize,
64
- [ colorClass ]: colorClass,
65
- [ fontSizeClass ]: fontSizeClass,
66
- } );
67
-
68
- const saleClasses = classnames( {
69
- 'has-text-color': saleColor || customSaleColor,
70
- 'has-font-size': saleFontSize || customSaleFontSize,
71
- [ saleColorClass ]: saleColorClass,
72
- [ saleFontSizeClass ]: saleFontSizeClass,
73
- } );
74
-
75
- const style = {
76
- color: customColor,
77
- fontSize: customFontSize,
78
- };
79
-
80
- const saleStyle = {
81
- color: customSaleColor,
82
- fontSize: customSaleFontSize,
83
- };
84
-
85
- const prices = product.prices;
86
- const currency = getCurrencyFromPriceResponse( prices );
87
- const isOnSale = prices.price !== prices.regular_price;
88
- const priceClassName = isOnSale
89
- ? classnames( {
90
- [ `${ parentClassName }__product-price__value` ]: parentClassName,
91
- [ saleClasses ]: isFeaturePluginBuild(),
92
- } )
93
- : classnames( {
94
- [ `${ parentClassName }__product-price__value` ]: parentClassName,
95
- [ classes ]: isFeaturePluginBuild(),
96
- } );
97
- const priceStyle = isOnSale ? saleStyle : style;
98
-
99
- return (
100
- <ProductPrice
101
- align={ align }
102
- className={ wrapperClassName }
103
- currency={ currency }
104
- price={ prices.price }
105
- priceClassName={ priceClassName }
106
- priceStyle={ isFeaturePluginBuild() ? priceStyle : {} }
107
- // Range price props
108
- minPrice={ prices?.price_range?.min_amount }
109
- maxPrice={ prices?.price_range?.max_amount }
110
- // This is the regular or original price when the `price` value is a sale price.
111
- regularPrice={ prices.regular_price }
112
- regularPriceClassName={ classnames( {
113
- [ `${ parentClassName }__product-price__regular` ]: parentClassName,
114
- [ classes ]: isFeaturePluginBuild(),
115
- } ) }
116
- regularPriceStyle={ isFeaturePluginBuild() ? style : {} }
117
- />
118
- );
119
- };
120
-
121
- Block.propTypes = {
122
- className: PropTypes.string,
123
- product: PropTypes.object,
124
- align: PropTypes.string,
125
- fontSize: PropTypes.string,
126
- customFontSize: PropTypes.number,
127
- saleFontSize: PropTypes.string,
128
- customSaleFontSize: PropTypes.number,
129
- color: PropTypes.string,
130
- customColor: PropTypes.string,
131
- saleColor: PropTypes.string,
132
- customSaleColor: PropTypes.string,
133
- };
134
-
135
- export default withProductDataContext( Block );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/price/constants.js DELETED
@@ -1,15 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { bill, Icon } from '@woocommerce/icons';
6
-
7
- export const BLOCK_TITLE = __(
8
- 'Product Price',
9
- 'woo-gutenberg-products-block'
10
- );
11
- export const BLOCK_ICON = <Icon srcElement={ bill } />;
12
- export const BLOCK_DESCRIPTION = __(
13
- 'Display the price of a product.',
14
- 'woo-gutenberg-products-block'
15
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/price/edit.js DELETED
@@ -1,133 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { PanelBody, BaseControl } from '@wordpress/components';
6
- import { compose } from '@wordpress/compose';
7
- import {
8
- InspectorControls,
9
- BlockControls,
10
- AlignmentToolbar,
11
- withColors,
12
- ColorPalette,
13
- FontSizePicker,
14
- withFontSizes,
15
- } from '@wordpress/block-editor';
16
- import { isFeaturePluginBuild } from '@woocommerce/block-settings';
17
- /**
18
- * Internal dependencies
19
- */
20
- import Block from './block';
21
- import withProductSelector from '../shared/with-product-selector';
22
- import { BLOCK_TITLE, BLOCK_ICON } from './constants';
23
-
24
- const TextControl = ( {
25
- fontSize,
26
- setFontSize,
27
- color,
28
- setColor,
29
- colorLabel,
30
- } ) => (
31
- <>
32
- <FontSizePicker value={ fontSize.size } onChange={ setFontSize } />
33
- { /* ColorPalette doesn't accept an id. */
34
- /* eslint-disable-next-line @wordpress/no-base-control-with-label-without-id */ }
35
- <BaseControl label={ colorLabel }>
36
- <ColorPalette
37
- value={ color.color }
38
- onChange={ setColor }
39
- label={ __( 'Color' ) }
40
- />
41
- </BaseControl>
42
- </>
43
- );
44
- const PriceEdit = ( {
45
- fontSize,
46
- saleFontSize,
47
- setFontSize,
48
- setSaleFontSize,
49
- color,
50
- saleColor,
51
- setColor,
52
- setSaleColor,
53
- attributes,
54
- setAttributes,
55
- } ) => {
56
- const { align } = attributes;
57
- return (
58
- <>
59
- { isFeaturePluginBuild() && (
60
- <BlockControls>
61
- <AlignmentToolbar
62
- value={ align }
63
- onChange={ ( nextAlign ) => {
64
- setAttributes( { align: nextAlign } );
65
- } }
66
- />
67
- </BlockControls>
68
- ) }
69
- <InspectorControls>
70
- { isFeaturePluginBuild() && (
71
- <>
72
- <PanelBody
73
- title={ __(
74
- 'Price',
75
- 'woo-gutenberg-products-block'
76
- ) }
77
- >
78
- <TextControl
79
- color={ color }
80
- setColor={ setColor }
81
- fontSize={ fontSize }
82
- setFontSize={ setFontSize }
83
- colorLabel={ __(
84
- 'Color',
85
- 'woo-gutenberg-products-block'
86
- ) }
87
- />
88
- </PanelBody>
89
- <PanelBody
90
- title={ __(
91
- 'Sale price',
92
- 'woo-gutenberg-products-block'
93
- ) }
94
- >
95
- <TextControl
96
- color={ saleColor }
97
- setColor={ setSaleColor }
98
- fontSize={ saleFontSize }
99
- setFontSize={ setSaleFontSize }
100
- colorLabel={ __(
101
- 'Color',
102
- 'woo-gutenberg-products-block'
103
- ) }
104
- />
105
- </PanelBody>
106
- </>
107
- ) }
108
- </InspectorControls>
109
- <Block { ...attributes } />
110
- </>
111
- );
112
- };
113
-
114
- const Price = isFeaturePluginBuild()
115
- ? compose( [
116
- withFontSizes( 'fontSize' ),
117
- withFontSizes( 'saleFontSize' ),
118
- withFontSizes( 'originalFontSize' ),
119
- withColors( 'color', { textColor: 'color' } ),
120
- withColors( 'saleColor', { textColor: 'saleColor' } ),
121
- withColors( 'originalColor', { textColor: 'originalColor' } ),
122
- withProductSelector( {
123
- icon: BLOCK_ICON,
124
- label: BLOCK_TITLE,
125
- description: __(
126
- 'Choose a product to display its price.',
127
- 'woo-gutenberg-products-block'
128
- ),
129
- } ),
130
- ] )( PriceEdit )
131
- : PriceEdit;
132
-
133
- export default Price;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/price/index.js DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { registerBlockType } from '@wordpress/blocks';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import sharedConfig from '../shared/config';
10
- import edit from './edit';
11
- import attributes from './attributes';
12
- import {
13
- BLOCK_TITLE as title,
14
- BLOCK_ICON as icon,
15
- BLOCK_DESCRIPTION as description,
16
- } from './constants';
17
-
18
- const blockConfig = {
19
- title,
20
- description,
21
- icon: {
22
- src: icon,
23
- foreground: '#874FB9',
24
- },
25
- attributes,
26
- edit,
27
- };
28
-
29
- registerBlockType( 'woocommerce/product-price', {
30
- ...sharedConfig,
31
- ...blockConfig,
32
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/rating/attributes.js DELETED
@@ -1,8 +0,0 @@
1
- export const blockAttributes = {
2
- productId: {
3
- type: 'number',
4
- default: 0,
5
- },
6
- };
7
-
8
- export default blockAttributes;
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/rating/block.js DELETED
@@ -1,79 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import PropTypes from 'prop-types';
5
- import { __, sprintf } from '@wordpress/i18n';
6
- import classnames from 'classnames';
7
- import {
8
- useInnerBlockLayoutContext,
9
- useProductDataContext,
10
- } from '@woocommerce/shared-context';
11
- import { withProductDataContext } from '@woocommerce/shared-hocs';
12
-
13
- /**
14
- * Internal dependencies
15
- */
16
- import './style.scss';
17
-
18
- /**
19
- * Product Rating Block Component.
20
- *
21
- * @param {Object} props Incoming props.
22
- * @param {string} [props.className] CSS Class name for the component.
23
- * @return {*} The component.
24
- */
25
- const Block = ( { className } ) => {
26
- const { parentClassName } = useInnerBlockLayoutContext();
27
- const { product } = useProductDataContext();
28
- const rating = getAverageRating( product );
29
-
30
- if ( ! rating ) {
31
- return null;
32
- }
33
-
34
- const starStyle = {
35
- width: ( rating / 5 ) * 100 + '%',
36
- };
37
-
38
- const ratingText = sprintf(
39
- /* translators: %f is referring to the average rating value */
40
- __( 'Rated %f out of 5', 'woo-gutenberg-products-block' ),
41
- rating
42
- );
43
-
44
- return (
45
- <div
46
- className={ classnames(
47
- className,
48
- 'wc-block-components-product-rating',
49
- {
50
- [ `${ parentClassName }__product-rating` ]: parentClassName,
51
- }
52
- ) }
53
- >
54
- <div
55
- className={ classnames(
56
- 'wc-block-components-product-rating__stars',
57
- `${ parentClassName }__product-rating__stars`
58
- ) }
59
- role="img"
60
- aria-label={ ratingText }
61
- >
62
- <span style={ starStyle }>{ ratingText }</span>
63
- </div>
64
- </div>
65
- );
66
- };
67
-
68
- const getAverageRating = ( product ) => {
69
- // eslint-disable-next-line camelcase
70
- const rating = parseFloat( product.average_rating );
71
-
72
- return Number.isFinite( rating ) && rating > 0 ? rating : 0;
73
- };
74
-
75
- Block.propTypes = {
76
- className: PropTypes.string,
77
- };
78
-
79
- export default withProductDataContext( Block );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/rating/constants.js DELETED
@@ -1,15 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { star, Icon } from '@woocommerce/icons';
6
-
7
- export const BLOCK_TITLE = __(
8
- 'Product Rating',
9
- 'woo-gutenberg-products-block'
10
- );
11
- export const BLOCK_ICON = <Icon srcElement={ star } />;
12
- export const BLOCK_DESCRIPTION = __(
13
- 'Display the average rating of a product.',
14
- 'woo-gutenberg-products-block'
15
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/rating/edit.js DELETED
@@ -1,23 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import Block from './block';
10
- import withProductSelector from '../shared/with-product-selector';
11
- import { BLOCK_TITLE, BLOCK_ICON } from './constants';
12
-
13
- const Edit = ( { attributes } ) => {
14
- return <Block { ...attributes } />;
15
- };
16
- export default withProductSelector( {
17
- icon: BLOCK_ICON,
18
- label: BLOCK_TITLE,
19
- description: __(
20
- 'Choose a product to display its rating.',
21
- 'woo-gutenberg-products-block'
22
- ),
23
- } )( Edit );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/rating/index.js DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { registerBlockType } from '@wordpress/blocks';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import sharedConfig from '../shared/config';
10
- import attributes from './attributes';
11
- import edit from './edit';
12
- import {
13
- BLOCK_TITLE as title,
14
- BLOCK_ICON as icon,
15
- BLOCK_DESCRIPTION as description,
16
- } from './constants';
17
-
18
- const blockConfig = {
19
- title,
20
- description,
21
- icon: {
22
- src: icon,
23
- foreground: '#874FB9',
24
- },
25
- attributes,
26
- edit,
27
- };
28
-
29
- registerBlockType( 'woocommerce/product-rating', {
30
- ...sharedConfig,
31
- ...blockConfig,
32
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/rating/style.scss DELETED
@@ -1,52 +0,0 @@
1
- .wc-block-components-product-rating {
2
- display: block;
3
- margin-top: 0;
4
- margin-bottom: $gap-small;
5
-
6
- &__stars {
7
- overflow: hidden;
8
- position: relative;
9
- width: 5.3em;
10
- height: 1.618em;
11
- line-height: 1.618;
12
- font-size: 1em;
13
- /* stylelint-disable-next-line font-family-no-missing-generic-family-keyword */
14
- font-family: star;
15
- font-weight: 400;
16
- margin: 0 auto;
17
- text-align: left;
18
-
19
- &::before {
20
- content: "\53\53\53\53\53";
21
- top: 0;
22
- left: 0;
23
- right: 0;
24
- position: absolute;
25
- opacity: 0.5;
26
- color: #aaa;
27
- white-space: nowrap;
28
- }
29
- span {
30
- overflow: hidden;
31
- top: 0;
32
- left: 0;
33
- right: 0;
34
- position: absolute;
35
- padding-top: 1.5em;
36
- }
37
- span::before {
38
- content: "\53\53\53\53\53";
39
- top: 0;
40
- left: 0;
41
- right: 0;
42
- position: absolute;
43
- color: #000;
44
- white-space: nowrap;
45
- }
46
- }
47
- }
48
- .wc-block-single-product {
49
- .wc-block-components-product-rating__stars {
50
- margin: 0;
51
- }
52
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/sale-badge/attributes.js DELETED
@@ -1,8 +0,0 @@
1
- export const blockAttributes = {
2
- productId: {
3
- type: 'number',
4
- default: 0,
5
- },
6
- };
7
-
8
- export default blockAttributes;
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/sale-badge/block.js DELETED
@@ -1,67 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import PropTypes from 'prop-types';
5
- import { __ } from '@wordpress/i18n';
6
- import classnames from 'classnames';
7
- import Label from '@woocommerce/base-components/label';
8
- import {
9
- useInnerBlockLayoutContext,
10
- useProductDataContext,
11
- } from '@woocommerce/shared-context';
12
- import { withProductDataContext } from '@woocommerce/shared-hocs';
13
-
14
- /**
15
- * Internal dependencies
16
- */
17
- import './style.scss';
18
-
19
- /**
20
- * Product Sale Badge Block Component.
21
- *
22
- * @param {Object} props Incoming props.
23
- * @param {string} [props.className] CSS Class name for the component.
24
- * @param {string} [props.align] Alignment of the badge.
25
- * @return {*} The component.
26
- */
27
- const Block = ( { className, align } ) => {
28
- const { parentClassName } = useInnerBlockLayoutContext();
29
- const { product } = useProductDataContext();
30
-
31
- if ( ! product.id || ! product.on_sale ) {
32
- return null;
33
- }
34
-
35
- const alignClass =
36
- typeof align === 'string'
37
- ? `wc-block-components-product-sale-badge--align-${ align }`
38
- : '';
39
-
40
- return (
41
- <div
42
- className={ classnames(
43
- 'wc-block-components-product-sale-badge',
44
- className,
45
- alignClass,
46
- {
47
- [ `${ parentClassName }__product-onsale` ]: parentClassName,
48
- }
49
- ) }
50
- >
51
- <Label
52
- label={ __( 'Sale', 'woo-gutenberg-products-block' ) }
53
- screenReaderLabel={ __(
54
- 'Product on sale',
55
- 'woo-gutenberg-products-block'
56
- ) }
57
- />
58
- </div>
59
- );
60
- };
61
-
62
- Block.propTypes = {
63
- className: PropTypes.string,
64
- align: PropTypes.string,
65
- };
66
-
67
- export default withProductDataContext( Block );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/sale-badge/constants.js DELETED
@@ -1,15 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { tag, Icon } from '@woocommerce/icons';
6
-
7
- export const BLOCK_TITLE = __(
8
- 'On-Sale Badge',
9
- 'woo-gutenberg-products-block'
10
- );
11
- export const BLOCK_ICON = <Icon srcElement={ tag } />;
12
- export const BLOCK_DESCRIPTION = __(
13
- 'Displays an on-sale badge if the product is on-sale.',
14
- 'woo-gutenberg-products-block'
15
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/sale-badge/edit.js DELETED
@@ -1,24 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import Block from './block';
10
- import withProductSelector from '../shared/with-product-selector';
11
- import { BLOCK_TITLE, BLOCK_ICON } from './constants';
12
-
13
- const Edit = ( { attributes } ) => {
14
- return <Block { ...attributes } />;
15
- };
16
-
17
- export default withProductSelector( {
18
- icon: BLOCK_ICON,
19
- label: BLOCK_TITLE,
20
- description: __(
21
- 'Choose a product to display its sale-badge.',
22
- 'woo-gutenberg-products-block'
23
- ),
24
- } )( Edit );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/sale-badge/index.js DELETED
@@ -1,35 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { registerBlockType } from '@wordpress/blocks';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import sharedConfig from '../shared/config';
10
- import attributes from './attributes';
11
- import edit from './edit';
12
- import {
13
- BLOCK_TITLE as title,
14
- BLOCK_ICON as icon,
15
- BLOCK_DESCRIPTION as description,
16
- } from './constants';
17
-
18
- const blockConfig = {
19
- title,
20
- description,
21
- icon: {
22
- src: icon,
23
- foreground: '#874FB9',
24
- },
25
- supports: {
26
- html: false,
27
- },
28
- attributes,
29
- edit,
30
- };
31
-
32
- registerBlockType( 'woocommerce/product-sale-badge', {
33
- ...sharedConfig,
34
- ...blockConfig,
35
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/sale-badge/style.scss DELETED
@@ -1,16 +0,0 @@
1
- .wc-block-components-product-sale-badge {
2
- margin: 0 auto $gap-small;
3
- @include font-size(small);
4
- padding: em($gap-smallest) em($gap-small);
5
- display: inline-block;
6
- width: auto;
7
- border: 1px solid #43454b;
8
- border-radius: 3px;
9
- color: #43454b;
10
- background: #fff;
11
- text-align: center;
12
- text-transform: uppercase;
13
- font-weight: 600;
14
- z-index: 9;
15
- position: static;
16
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/save.js DELETED
@@ -1,12 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classnames from 'classnames';
5
-
6
- const save = ( { attributes } ) => {
7
- return (
8
- <div className={ classnames( 'is-loading', attributes.className ) } />
9
- );
10
- };
11
-
12
- export default save;
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/shared/config.js DELETED
@@ -1,34 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { Icon, grid } from '@woocommerce/icons';
6
- import { isExperimentalBuild } from '@woocommerce/block-settings';
7
- /**
8
- * Internal dependencies
9
- */
10
- import save from '../save';
11
-
12
- /**
13
- * Holds default config for this collection of blocks.
14
- */
15
- export default {
16
- category: 'woocommerce-product-elements',
17
- keywords: [ __( 'WooCommerce', 'woo-gutenberg-products-block' ) ],
18
- icon: {
19
- src: <Icon srcElement={ grid } />,
20
- foreground: '#96588a',
21
- },
22
- supports: {
23
- html: false,
24
- },
25
- parent: isExperimentalBuild()
26
- ? null
27
- : [ '@woocommerce/all-products', '@woocommerce/single-product' ],
28
- save,
29
- deprecated: [
30
- {
31
- save() {},
32
- },
33
- ],
34
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/shared/editor.scss DELETED
@@ -1,11 +0,0 @@
1
- .wc-atomic-blocks-product__selection {
2
- width: 100%;
3
- }
4
- .wc-atomic-blocks-product__edit-card {
5
- padding: 16px;
6
- border-top: 1px solid $gray-200;
7
-
8
- .wc-atomic-blocks-product__edit-card-title {
9
- margin: 0 0 $gap;
10
- }
11
- }
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/shared/with-product-selector.js DELETED
@@ -1,90 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { useState } from '@wordpress/element';
6
- import ProductControl from '@woocommerce/editor-components/product-control';
7
- import { Placeholder, Button, ToolbarGroup } from '@wordpress/components';
8
- import { BlockControls } from '@wordpress/block-editor';
9
- import TextToolbarButton from '@woocommerce/editor-components/text-toolbar-button';
10
- import { useProductDataContext } from '@woocommerce/shared-context';
11
-
12
- /**
13
- * Internal dependencies
14
- */
15
- import './editor.scss';
16
-
17
- /**
18
- * This HOC shows a product selection interface if context is not present in the editor.
19
- *
20
- * @param {Object} selectorArgs Options for the selector.
21
- *
22
- */
23
- const withProductSelector = ( selectorArgs ) => ( OriginalComponent ) => {
24
- return ( props ) => {
25
- const productDataContext = useProductDataContext();
26
- const { attributes, setAttributes } = props;
27
- const { productId } = attributes;
28
- const [ isEditing, setIsEditing ] = useState( ! productId );
29
-
30
- if ( productDataContext.hasContext ) {
31
- return <OriginalComponent { ...props } />;
32
- }
33
-
34
- return (
35
- <>
36
- { isEditing ? (
37
- <Placeholder
38
- icon={ selectorArgs.icon || '' }
39
- label={ selectorArgs.label || '' }
40
- className="wc-atomic-blocks-product"
41
- >
42
- { !! selectorArgs.description && (
43
- <div>{ selectorArgs.description }</div>
44
- ) }
45
- <div className="wc-atomic-blocks-product__selection">
46
- <ProductControl
47
- selected={ productId || 0 }
48
- showVariations
49
- onChange={ ( value = [] ) => {
50
- setAttributes( {
51
- productId: value[ 0 ]
52
- ? value[ 0 ].id
53
- : 0,
54
- } );
55
- } }
56
- />
57
- <Button
58
- isSecondary
59
- disabled={ ! productId }
60
- onClick={ () => {
61
- setIsEditing( false );
62
- } }
63
- >
64
- { __( 'Done', 'woo-gutenberg-products-block' ) }
65
- </Button>
66
- </div>
67
- </Placeholder>
68
- ) : (
69
- <>
70
- <BlockControls>
71
- <ToolbarGroup>
72
- <TextToolbarButton
73
- onClick={ () => setIsEditing( true ) }
74
- >
75
- { __(
76
- 'Switch product…',
77
- 'woo-gutenberg-products-block'
78
- ) }
79
- </TextToolbarButton>
80
- </ToolbarGroup>
81
- </BlockControls>
82
- <OriginalComponent { ...props } />
83
- </>
84
- ) }
85
- </>
86
- );
87
- };
88
- };
89
-
90
- export default withProductSelector;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/sku/attributes.js DELETED
@@ -1,8 +0,0 @@
1
- export const blockAttributes = {
2
- productId: {
3
- type: 'number',
4
- default: 0,
5
- },
6
- };
7
-
8
- export default blockAttributes;
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/sku/block.js DELETED
@@ -1,54 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import PropTypes from 'prop-types';
6
- import classnames from 'classnames';
7
- import {
8
- useInnerBlockLayoutContext,
9
- useProductDataContext,
10
- } from '@woocommerce/shared-context';
11
- import { withProductDataContext } from '@woocommerce/shared-hocs';
12
-
13
- /**
14
- * Internal dependencies
15
- */
16
- import './style.scss';
17
-
18
- /**
19
- * Product SKU Block Component.
20
- *
21
- * @param {Object} props Incoming props.
22
- * @param {string} [props.className] CSS Class name for the component.
23
- * @return {*} The component.
24
- */
25
- const Block = ( { className } ) => {
26
- const { parentClassName } = useInnerBlockLayoutContext();
27
- const { product } = useProductDataContext();
28
- const sku = product.sku;
29
-
30
- if ( ! sku ) {
31
- return null;
32
- }
33
-
34
- return (
35
- <div
36
- className={ classnames(
37
- className,
38
- 'wc-block-components-product-sku',
39
- {
40
- [ `${ parentClassName }__product-sku` ]: parentClassName,
41
- }
42
- ) }
43
- >
44
- { __( 'SKU:', 'woo-gutenberg-products-block' ) }{ ' ' }
45
- <strong>{ sku }</strong>
46
- </div>
47
- );
48
- };
49
-
50
- Block.propTypes = {
51
- className: PropTypes.string,
52
- };
53
-
54
- export default withProductDataContext( Block );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/sku/constants.js DELETED
@@ -1,12 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { barcode, Icon } from '@woocommerce/icons';
6
-
7
- export const BLOCK_TITLE = __( 'Product SKU', 'woo-gutenberg-products-block' );
8
- export const BLOCK_ICON = <Icon srcElement={ barcode } />;
9
- export const BLOCK_DESCRIPTION = __(
10
- 'Display the SKU of a product.',
11
- 'woo-gutenberg-products-block'
12
- );
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/sku/edit.js DELETED
@@ -1,30 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import EditProductLink from '@woocommerce/editor-components/edit-product-link';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import Block from './block';
11
- import withProductSelector from '../shared/with-product-selector';
12
- import { BLOCK_TITLE, BLOCK_ICON } from './constants';
13
-
14
- const Edit = ( { attributes } ) => {
15
- return (
16
- <>
17
- <EditProductLink />
18
- <Block { ...attributes } />
19
- </>
20
- );
21
- };
22
-
23
- export default withProductSelector( {
24
- icon: BLOCK_ICON,
25
- label: BLOCK_TITLE,
26
- description: __(
27
- 'Choose a product to display its SKU.',
28
- 'woo-gutenberg-products-block'
29
- ),
30
- } )( Edit );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/sku/index.js DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { registerExperimentalBlockType } from '@woocommerce/block-settings';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import sharedConfig from '../shared/config';
10
- import attributes from './attributes';
11
- import edit from './edit';
12
- import {
13
- BLOCK_TITLE as title,
14
- BLOCK_ICON as icon,
15
- BLOCK_DESCRIPTION as description,
16
- } from './constants';
17
-
18
- const blockConfig = {
19
- title,
20
- description,
21
- icon: {
22
- src: icon,
23
- foreground: '#874FB9',
24
- },
25
- attributes,
26
- edit,
27
- };
28
-
29
- registerExperimentalBlockType( 'woocommerce/product-sku', {
30
- ...sharedConfig,
31
- ...blockConfig,
32
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/sku/style.scss DELETED
@@ -1,7 +0,0 @@
1
- .wc-block-components-product-sku {
2
- margin-top: 0;
3
- margin-bottom: $gap-small;
4
- display: block;
5
- text-transform: uppercase;
6
- @include font-size(small);
7
- }
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/stock-indicator/attributes.js DELETED
@@ -1,8 +0,0 @@
1
- export const blockAttributes = {
2
- productId: {
3
- type: 'number',
4
- default: 0,
5
- },
6
- };
7
-
8
- export default blockAttributes;
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/stock-indicator/block.js DELETED
@@ -1,80 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __, sprintf } from '@wordpress/i18n';
5
- import PropTypes from 'prop-types';
6
- import classnames from 'classnames';
7
- import {
8
- useInnerBlockLayoutContext,
9
- useProductDataContext,
10
- } from '@woocommerce/shared-context';
11
- import { withProductDataContext } from '@woocommerce/shared-hocs';
12
-
13
- /**
14
- * Internal dependencies
15
- */
16
- import './style.scss';
17
-
18
- /**
19
- * Product Stock Indicator Block Component.
20
- *
21
- * @param {Object} props Incoming props.
22
- * @param {string} [props.className] CSS Class name for the component.
23
- * @return {*} The component.
24
- */
25
- const Block = ( { className } ) => {
26
- const { parentClassName } = useInnerBlockLayoutContext();
27
- const { product } = useProductDataContext();
28
-
29
- if ( ! product.id || ! product.is_purchasable ) {
30
- return null;
31
- }
32
-
33
- const inStock = !! product.is_in_stock;
34
- const lowStock = product.low_stock_remaining;
35
- const isBackordered = product.is_on_backorder;
36
-
37
- return (
38
- <div
39
- className={ classnames(
40
- className,
41
- 'wc-block-components-product-stock-indicator',
42
- {
43
- [ `${ parentClassName }__stock-indicator` ]: parentClassName,
44
- 'wc-block-components-product-stock-indicator--in-stock': inStock,
45
- 'wc-block-components-product-stock-indicator--out-of-stock': ! inStock,
46
- 'wc-block-components-product-stock-indicator--low-stock': !! lowStock,
47
- 'wc-block-components-product-stock-indicator--available-on-backorder': !! isBackordered,
48
- }
49
- ) }
50
- >
51
- { lowStock
52
- ? lowStockText( lowStock )
53
- : stockText( inStock, isBackordered ) }
54
- </div>
55
- );
56
- };
57
-
58
- const lowStockText = ( lowStock ) => {
59
- return sprintf(
60
- /* translators: %d stock amount (number of items in stock for product) */
61
- __( '%d left in stock', 'woo-gutenberg-products-block' ),
62
- lowStock
63
- );
64
- };
65
-
66
- const stockText = ( inStock, isBackordered ) => {
67
- if ( isBackordered ) {
68
- return __( 'Available on backorder', 'woo-gutenberg-products-block' );
69
- }
70
-
71
- return inStock
72
- ? __( 'In Stock', 'woo-gutenberg-products-block' )
73
- : __( 'Out of Stock', 'woo-gutenberg-products-block' );
74
- };
75
-
76
- Block.propTypes = {
77
- className: PropTypes.string,
78
- };
79
-
80
- export default withProductDataContext( Block );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/stock-indicator/constants.js DELETED
@@ -1,15 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { box, Icon } from '@woocommerce/icons';
6
-
7
- export const BLOCK_TITLE = __(
8
- 'Product Stock Indicator',
9
- 'woo-gutenberg-products-block'
10
- );
11
- export const BLOCK_ICON = <Icon srcElement={ box } />;
12
- export const BLOCK_DESCRIPTION = __(
13
- 'Display product stock status.',
14
- 'woo-gutenberg-products-block'
15
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/stock-indicator/edit.js DELETED
@@ -1,30 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import EditProductLink from '@woocommerce/editor-components/edit-product-link';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import Block from './block';
11
- import withProductSelector from '../shared/with-product-selector';
12
- import { BLOCK_TITLE, BLOCK_ICON } from './constants';
13
-
14
- const Edit = ( { attributes } ) => {
15
- return (
16
- <>
17
- <EditProductLink />
18
- <Block { ...attributes } />
19
- </>
20
- );
21
- };
22
-
23
- export default withProductSelector( {
24
- icon: BLOCK_ICON,
25
- label: BLOCK_TITLE,
26
- description: __(
27
- 'Choose a product to display its stock.',
28
- 'woo-gutenberg-products-block'
29
- ),
30
- } )( Edit );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/stock-indicator/index.js DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { registerExperimentalBlockType } from '@woocommerce/block-settings';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import sharedConfig from '../shared/config';
10
- import attributes from './attributes';
11
- import edit from './edit';
12
- import {
13
- BLOCK_TITLE as title,
14
- BLOCK_ICON as icon,
15
- BLOCK_DESCRIPTION as description,
16
- } from './constants';
17
-
18
- const blockConfig = {
19
- title,
20
- description,
21
- icon: {
22
- src: icon,
23
- foreground: '#874FB9',
24
- },
25
- attributes,
26
- edit,
27
- };
28
-
29
- registerExperimentalBlockType( 'woocommerce/product-stock-indicator', {
30
- ...sharedConfig,
31
- ...blockConfig,
32
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/stock-indicator/style.scss DELETED
@@ -1,17 +0,0 @@
1
- .wc-block-components-product-stock-indicator {
2
- margin-top: 0;
3
- margin-bottom: em($gap-small);
4
- display: block;
5
- @include font-size(small);
6
-
7
- &--in-stock {
8
- color: $in-stock-color;
9
- }
10
- &--out-of-stock {
11
- color: $no-stock-color;
12
- }
13
- &--low-stock,
14
- &--available-on-backorder {
15
- color: $low-stock-color;
16
- }
17
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/summary/attributes.js DELETED
@@ -1,8 +0,0 @@
1
- export const blockAttributes = {
2
- productId: {
3
- type: 'number',
4
- default: 0,
5
- },
6
- };
7
-
8
- export default blockAttributes;
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/summary/block.js DELETED
@@ -1,72 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import PropTypes from 'prop-types';
5
- import classnames from 'classnames';
6
- import Summary from '@woocommerce/base-components/summary';
7
- import { blocksConfig } from '@woocommerce/block-settings';
8
- import {
9
- useInnerBlockLayoutContext,
10
- useProductDataContext,
11
- } from '@woocommerce/shared-context';
12
- import { withProductDataContext } from '@woocommerce/shared-hocs';
13
-
14
- /**
15
- * Internal dependencies
16
- */
17
- import './style.scss';
18
-
19
- /**
20
- * Product Summary Block Component.
21
- *
22
- * @param {Object} props Incoming props.
23
- * @param {string} [props.className] CSS Class name for the component.
24
- * @return {*} The component.
25
- */
26
- const Block = ( { className } ) => {
27
- const { parentClassName } = useInnerBlockLayoutContext();
28
- const { product } = useProductDataContext();
29
-
30
- if ( ! product ) {
31
- return (
32
- <div
33
- className={ classnames(
34
- className,
35
- `wc-block-components-product-summary`,
36
- {
37
- [ `${ parentClassName }__product-summary` ]: parentClassName,
38
- }
39
- ) }
40
- />
41
- );
42
- }
43
-
44
- const source = product.short_description
45
- ? product.short_description
46
- : product.description;
47
-
48
- if ( ! source ) {
49
- return null;
50
- }
51
-
52
- return (
53
- <Summary
54
- className={ classnames(
55
- className,
56
- `wc-block-components-product-summary`,
57
- {
58
- [ `${ parentClassName }__product-summary` ]: parentClassName,
59
- }
60
- ) }
61
- source={ source }
62
- maxLength={ 150 }
63
- countType={ blocksConfig.wordCountType || 'words' }
64
- />
65
- );
66
- };
67
-
68
- Block.propTypes = {
69
- className: PropTypes.string,
70
- };
71
-
72
- export default withProductDataContext( Block );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/summary/constants.js DELETED
@@ -1,15 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { notes, Icon } from '@woocommerce/icons';
6
-
7
- export const BLOCK_TITLE = __(
8
- 'Product Summary',
9
- 'woo-gutenberg-products-block'
10
- );
11
- export const BLOCK_ICON = <Icon srcElement={ notes } />;
12
- export const BLOCK_DESCRIPTION = __(
13
- 'Display a short description about a product.',
14
- 'woo-gutenberg-products-block'
15
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/summary/edit.js DELETED
@@ -1,24 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import Block from './block';
10
- import withProductSelector from '../shared/with-product-selector';
11
- import { BLOCK_TITLE, BLOCK_ICON } from './constants';
12
-
13
- const Edit = ( { attributes } ) => {
14
- return <Block { ...attributes } />;
15
- };
16
-
17
- export default withProductSelector( {
18
- icon: BLOCK_ICON,
19
- label: BLOCK_TITLE,
20
- description: __(
21
- 'Choose a product to display its short description.',
22
- 'woo-gutenberg-products-block'
23
- ),
24
- } )( Edit );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/summary/index.js DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { registerBlockType } from '@wordpress/blocks';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import sharedConfig from '../shared/config';
10
- import attributes from './attributes';
11
- import edit from './edit';
12
- import {
13
- BLOCK_TITLE as title,
14
- BLOCK_ICON as icon,
15
- BLOCK_DESCRIPTION as description,
16
- } from './constants';
17
-
18
- const blockConfig = {
19
- title,
20
- description,
21
- icon: {
22
- src: icon,
23
- foreground: '#874FB9',
24
- },
25
- attributes,
26
- edit,
27
- };
28
-
29
- registerBlockType( 'woocommerce/product-summary', {
30
- ...sharedConfig,
31
- ...blockConfig,
32
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/summary/style.scss DELETED
@@ -1,11 +0,0 @@
1
- .wc-block-components-product-summary {
2
- margin-top: 0;
3
- margin-bottom: $gap-small;
4
- }
5
- .is-loading .wc-block-components-product-summary::before {
6
- @include placeholder();
7
- content: ".";
8
- display: block;
9
- width: 100%;
10
- height: 6em;
11
- }
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/tag-list/attributes.js DELETED
@@ -1,8 +0,0 @@
1
- export const blockAttributes = {
2
- productId: {
3
- type: 'number',
4
- default: 0,
5
- },
6
- };
7
-
8
- export default blockAttributes;
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/tag-list/block.js DELETED
@@ -1,64 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import PropTypes from 'prop-types';
6
- import classnames from 'classnames';
7
- import {
8
- useInnerBlockLayoutContext,
9
- useProductDataContext,
10
- } from '@woocommerce/shared-context';
11
- import { isEmpty } from 'lodash';
12
- import { withProductDataContext } from '@woocommerce/shared-hocs';
13
-
14
- /**
15
- * Internal dependencies
16
- */
17
- import './style.scss';
18
-
19
- /**
20
- * Product Tag List Block Component.
21
- *
22
- * @param {Object} props Incoming props.
23
- * @param {string} [props.className] CSS Class name for the component.
24
- * @return {*} The component.
25
- */
26
- const Block = ( { className } ) => {
27
- const { parentClassName } = useInnerBlockLayoutContext();
28
- const { product } = useProductDataContext();
29
-
30
- if ( isEmpty( product.tags ) ) {
31
- return null;
32
- }
33
-
34
- return (
35
- <div
36
- className={ classnames(
37
- className,
38
- 'wc-block-components-product-tag-list',
39
- {
40
- [ `${ parentClassName }__product-tag-list` ]: parentClassName,
41
- }
42
- ) }
43
- >
44
- { __( 'Tags:', 'woo-gutenberg-products-block' ) }{ ' ' }
45
- <ul>
46
- { Object.values( product.tags ).map(
47
- ( { name, link, slug } ) => {
48
- return (
49
- <li key={ `tag-list-item-${ slug }` }>
50
- <a href={ link }>{ name }</a>
51
- </li>
52
- );
53
- }
54
- ) }
55
- </ul>
56
- </div>
57
- );
58
- };
59
-
60
- Block.propTypes = {
61
- className: PropTypes.string,
62
- };
63
-
64
- export default withProductDataContext( Block );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/tag-list/constants.js DELETED
@@ -1,15 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { tag, Icon } from '@woocommerce/icons';
6
-
7
- export const BLOCK_TITLE = __(
8
- 'Product Tag List',
9
- 'woo-gutenberg-products-block'
10
- );
11
- export const BLOCK_ICON = <Icon srcElement={ tag } />;
12
- export const BLOCK_DESCRIPTION = __(
13
- 'Display a list of tags belonging to a product.',
14
- 'woo-gutenberg-products-block'
15
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/tag-list/edit.js DELETED
@@ -1,33 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { Disabled } from '@wordpress/components';
6
- import EditProductLink from '@woocommerce/editor-components/edit-product-link';
7
-
8
- /**
9
- * Internal dependencies
10
- */
11
- import Block from './block';
12
- import withProductSelector from '../shared/with-product-selector';
13
- import { BLOCK_TITLE, BLOCK_ICON } from './constants';
14
-
15
- const Edit = ( { attributes } ) => {
16
- return (
17
- <>
18
- <EditProductLink />
19
- <Disabled>
20
- <Block { ...attributes } />
21
- </Disabled>
22
- </>
23
- );
24
- };
25
-
26
- export default withProductSelector( {
27
- icon: BLOCK_ICON,
28
- label: BLOCK_TITLE,
29
- description: __(
30
- 'Choose a product to display its tags.',
31
- 'woo-gutenberg-products-block'
32
- ),
33
- } )( Edit );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/tag-list/index.js DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { registerExperimentalBlockType } from '@woocommerce/block-settings';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import sharedConfig from '../shared/config';
10
- import attributes from './attributes';
11
- import edit from './edit';
12
- import {
13
- BLOCK_TITLE as title,
14
- BLOCK_ICON as icon,
15
- BLOCK_DESCRIPTION as description,
16
- } from './constants';
17
-
18
- const blockConfig = {
19
- title,
20
- description,
21
- icon: {
22
- src: icon,
23
- foreground: '#874FB9',
24
- },
25
- attributes,
26
- edit,
27
- };
28
-
29
- registerExperimentalBlockType( 'woocommerce/product-tag-list', {
30
- ...sharedConfig,
31
- ...blockConfig,
32
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/tag-list/style.scss DELETED
@@ -1,23 +0,0 @@
1
- .wc-block-components-product-tag-list {
2
- margin-top: 0;
3
- margin-bottom: em($gap-small);
4
-
5
- ul {
6
- margin: 0;
7
- padding: 0;
8
- display: inline;
9
-
10
- li {
11
- display: inline;
12
- list-style: none;
13
- }
14
-
15
- li::after {
16
- content: ", ";
17
- }
18
-
19
- li:last-child::after {
20
- content: "";
21
- }
22
- }
23
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/title/attributes.js DELETED
@@ -1,41 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { isFeaturePluginBuild } from '@woocommerce/block-settings';
5
-
6
- let blockAttributes = {
7
- headingLevel: {
8
- type: 'number',
9
- default: 2,
10
- },
11
- productLink: {
12
- type: 'boolean',
13
- default: true,
14
- },
15
- productId: {
16
- type: 'number',
17
- default: 0,
18
- },
19
- };
20
-
21
- if ( isFeaturePluginBuild() ) {
22
- blockAttributes = {
23
- ...blockAttributes,
24
- align: {
25
- type: 'string',
26
- },
27
- color: {
28
- type: 'string',
29
- },
30
- customColor: {
31
- type: 'string',
32
- },
33
- fontSize: {
34
- type: 'string',
35
- },
36
- customFontSize: {
37
- type: 'number',
38
- },
39
- };
40
- }
41
- export default blockAttributes;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/title/block.js DELETED
@@ -1,130 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import PropTypes from 'prop-types';
5
- import classnames from 'classnames';
6
- import {
7
- useInnerBlockLayoutContext,
8
- useProductDataContext,
9
- } from '@woocommerce/shared-context';
10
- import { getColorClassName, getFontSizeClass } from '@wordpress/block-editor';
11
- import { isFeaturePluginBuild } from '@woocommerce/block-settings';
12
- import { gatedStyledText } from '@woocommerce/atomic-utils';
13
- import { withProductDataContext } from '@woocommerce/shared-hocs';
14
- import ProductName from '@woocommerce/base-components/product-name';
15
- import { useStoreEvents } from '@woocommerce/base-context/hooks';
16
-
17
- /**
18
- * Internal dependencies
19
- */
20
- import './style.scss';
21
-
22
- /**
23
- * Product Title Block Component.
24
- *
25
- * @param {Object} props Incoming props.
26
- * @param {string} [props.className] CSS Class name for the component.
27
- * @param {number} [props.headingLevel] Heading level (h1, h2 etc)
28
- * @param {boolean} [props.productLink] Whether or not to display a link to the product page.
29
- * @param {string} [props.align] Title alignment.
30
- * @param {string} [props.color] Title color name.
31
- * @param {string} [props.customColor] Custom title color value.
32
- * @param {string} [props.fontSize] Title font size name.
33
- * @param {number } [props.customFontSize] Custom font size value.
34
- * will be used if this is not provided.
35
- * @return {*} The component.
36
- */
37
- export const Block = ( {
38
- className,
39
- headingLevel = 2,
40
- productLink = true,
41
- align,
42
- color,
43
- customColor,
44
- fontSize,
45
- customFontSize,
46
- } ) => {
47
- const { parentClassName } = useInnerBlockLayoutContext();
48
- const { product } = useProductDataContext();
49
- const { dispatchStoreEvent } = useStoreEvents();
50
- const TagName = `h${ headingLevel }`;
51
-
52
- const colorClass = getColorClassName( 'color', color );
53
- const fontSizeClass = getFontSizeClass( fontSize );
54
-
55
- const titleClasses = classnames( {
56
- 'has-text-color': color || customColor,
57
- 'has-font-size': fontSize || customFontSize,
58
- [ colorClass ]: colorClass,
59
- [ fontSizeClass ]: fontSizeClass,
60
- } );
61
-
62
- if ( ! product.id ) {
63
- return (
64
- <TagName
65
- // @ts-ignore
66
- className={ classnames(
67
- className,
68
- 'wc-block-components-product-title',
69
- {
70
- [ `${ parentClassName }__product-title` ]: parentClassName,
71
- [ `wc-block-components-product-title--align-${ align }` ]:
72
- align && isFeaturePluginBuild(),
73
- [ titleClasses ]: isFeaturePluginBuild(),
74
- }
75
- ) }
76
- style={ gatedStyledText( {
77
- color: customColor,
78
- fontSize: customFontSize,
79
- } ) }
80
- />
81
- );
82
- }
83
-
84
- return (
85
- // @ts-ignore
86
- <TagName
87
- className={ classnames(
88
- className,
89
- 'wc-block-components-product-title',
90
- {
91
- [ `${ parentClassName }__product-title` ]: parentClassName,
92
- [ `wc-block-components-product-title--align-${ align }` ]:
93
- align && isFeaturePluginBuild(),
94
- }
95
- ) }
96
- >
97
- <ProductName
98
- className={ classnames( {
99
- [ titleClasses ]: isFeaturePluginBuild(),
100
- } ) }
101
- disabled={ ! productLink }
102
- name={ product.name }
103
- permalink={ product.permalink }
104
- rel={ productLink ? 'nofollow' : null }
105
- style={ gatedStyledText( {
106
- color: customColor,
107
- fontSize: customFontSize,
108
- } ) }
109
- onClick={ () => {
110
- dispatchStoreEvent( 'product-view-link', {
111
- product,
112
- } );
113
- } }
114
- />
115
- </TagName>
116
- );
117
- };
118
-
119
- Block.propTypes = {
120
- className: PropTypes.string,
121
- headingLevel: PropTypes.number,
122
- productLink: PropTypes.bool,
123
- align: PropTypes.string,
124
- color: PropTypes.string,
125
- customColor: PropTypes.string,
126
- fontSize: PropTypes.string,
127
- customFontSize: PropTypes.number,
128
- };
129
-
130
- export default withProductDataContext( Block );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/title/constants.js DELETED
@@ -1,15 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { bookmark, Icon } from '@woocommerce/icons';
6
-
7
- export const BLOCK_TITLE = __(
8
- 'Product Title',
9
- 'woo-gutenberg-products-block'
10
- );
11
- export const BLOCK_ICON = <Icon srcElement={ bookmark } />;
12
- export const BLOCK_DESCRIPTION = __(
13
- 'Display the title of a product.',
14
- 'woo-gutenberg-products-block'
15
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/title/edit.js DELETED
@@ -1,131 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { Disabled, PanelBody, ToggleControl } from '@wordpress/components';
6
- import { compose } from '@wordpress/compose';
7
- import {
8
- InspectorControls,
9
- BlockControls,
10
- AlignmentToolbar,
11
- withColors,
12
- PanelColorSettings,
13
- FontSizePicker,
14
- withFontSizes,
15
- } from '@wordpress/block-editor';
16
- import { isFeaturePluginBuild } from '@woocommerce/block-settings';
17
- import HeadingToolbar from '@woocommerce/editor-components/heading-toolbar';
18
-
19
- /**
20
- * Internal dependencies
21
- */
22
- import Block from './block';
23
- import withProductSelector from '../shared/with-product-selector';
24
- import { BLOCK_TITLE, BLOCK_ICON } from './constants';
25
-
26
- const TitleEdit = ( {
27
- color,
28
- fontSize,
29
- setFontSize,
30
- setColor,
31
- attributes,
32
- setAttributes,
33
- } ) => {
34
- const { headingLevel, productLink, align } = attributes;
35
- return (
36
- <>
37
- <BlockControls>
38
- <HeadingToolbar
39
- isCollapsed={ true }
40
- minLevel={ 1 }
41
- maxLevel={ 7 }
42
- selectedLevel={ headingLevel }
43
- onChange={ ( newLevel ) =>
44
- setAttributes( { headingLevel: newLevel } )
45
- }
46
- />
47
- { isFeaturePluginBuild() && (
48
- <AlignmentToolbar
49
- value={ align }
50
- onChange={ ( newAlign ) => {
51
- setAttributes( { align: newAlign } );
52
- } }
53
- />
54
- ) }
55
- </BlockControls>
56
- <InspectorControls>
57
- <PanelBody
58
- title={ __( 'Content', 'woo-gutenberg-products-block' ) }
59
- >
60
- <ToggleControl
61
- label={ __(
62
- 'Link to Product Page',
63
- 'woo-gutenberg-products-block'
64
- ) }
65
- help={ __(
66
- 'Links the image to the single product listing.',
67
- 'woo-gutenberg-products-block'
68
- ) }
69
- checked={ productLink }
70
- onChange={ () =>
71
- setAttributes( {
72
- productLink: ! productLink,
73
- } )
74
- }
75
- />
76
- </PanelBody>
77
- { isFeaturePluginBuild() && (
78
- <>
79
- <PanelBody
80
- title={ __(
81
- 'Text settings',
82
- 'woo-gutenberg-products-block'
83
- ) }
84
- >
85
- <FontSizePicker
86
- value={ fontSize.size }
87
- onChange={ setFontSize }
88
- />
89
- </PanelBody>
90
- <PanelColorSettings
91
- title={ __(
92
- 'Color settings',
93
- 'woo-gutenberg-products-block'
94
- ) }
95
- colorSettings={ [
96
- {
97
- value: color.color,
98
- onChange: setColor,
99
- label: __(
100
- 'Text color',
101
- 'woo-gutenberg-products-block'
102
- ),
103
- },
104
- ] }
105
- ></PanelColorSettings>
106
- </>
107
- ) }
108
- </InspectorControls>
109
- <Disabled>
110
- <Block { ...attributes } />
111
- </Disabled>
112
- </>
113
- );
114
- };
115
-
116
- const Title = isFeaturePluginBuild()
117
- ? compose( [
118
- withFontSizes( 'fontSize' ),
119
- withColors( 'color', { textColor: 'color' } ),
120
- withProductSelector( {
121
- icon: BLOCK_ICON,
122
- label: BLOCK_TITLE,
123
- description: __(
124
- 'Choose a product to display its title.',
125
- 'woo-gutenberg-products-block'
126
- ),
127
- } ),
128
- ] )( TitleEdit )
129
- : TitleEdit;
130
-
131
- export default Title;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/title/frontend.js DELETED
@@ -1,12 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import withFilteredAttributes from '@woocommerce/base-hocs/with-filtered-attributes';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import Block from './block';
10
- import attributes from './attributes';
11
-
12
- export default withFilteredAttributes( attributes )( Block );
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/title/index.js DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { registerBlockType } from '@wordpress/blocks';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import sharedConfig from '../shared/config';
10
- import attributes from './attributes';
11
- import edit from './edit';
12
- import {
13
- BLOCK_TITLE as title,
14
- BLOCK_ICON as icon,
15
- BLOCK_DESCRIPTION as description,
16
- } from './constants';
17
-
18
- const blockConfig = {
19
- title,
20
- description,
21
- icon: {
22
- src: icon,
23
- foreground: '#874FB9',
24
- },
25
- attributes,
26
- edit,
27
- };
28
-
29
- registerBlockType( 'woocommerce/product-title', {
30
- ...sharedConfig,
31
- ...blockConfig,
32
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product-elements/title/style.scss DELETED
@@ -1,35 +0,0 @@
1
- .wc-block-components-product-title {
2
- margin-top: 0;
3
- margin-bottom: $gap-small;
4
- }
5
- .wc-block-grid .wc-block-components-product-title {
6
- line-height: 1.5;
7
- font-weight: 700;
8
- padding: 0;
9
- color: inherit;
10
- font-size: inherit;
11
- display: block;
12
- }
13
- .is-loading {
14
- .wc-block-components-product-title::before {
15
- @include placeholder();
16
- content: ".";
17
- display: inline-block;
18
- width: 7em;
19
- }
20
- .wc-block-grid .wc-block-components-product-title::before {
21
- width: 10em;
22
- }
23
- }
24
-
25
- /*rtl:begin:ignore*/
26
- .wc-block-components-product-title--align-left {
27
- text-align: left;
28
- }
29
- .wc-block-components-product-title--align-center {
30
- text-align: center;
31
- }
32
- .wc-block-components-product-title--align-right {
33
- text-align: right;
34
- }
35
- /*rtl:end:ignore*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/blocks/product/button/index.js ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerBlockType } from '@wordpress/blocks';
6
+ import { Disabled } from '@wordpress/components';
7
+ import Gridicon from 'gridicons';
8
+ import { ProductButton } from '@woocommerce/atomic-components/product';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import sharedConfig from '../shared-config';
14
+
15
+ const blockConfig = {
16
+ title: __( 'Product Button', 'woo-gutenberg-products-block' ),
17
+ description: __(
18
+ 'Display a call to action button which either adds the product to the cart, or links to the product page.',
19
+ 'woo-gutenberg-products-block'
20
+ ),
21
+ icon: {
22
+ src: <Gridicon icon="cart" />,
23
+ foreground: '#96588a',
24
+ },
25
+ edit( props ) {
26
+ const { attributes } = props;
27
+
28
+ return (
29
+ <Disabled>
30
+ <ProductButton product={ attributes.product } />
31
+ </Disabled>
32
+ );
33
+ },
34
+ };
35
+
36
+ registerBlockType( 'woocommerce/product-button', {
37
+ ...sharedConfig,
38
+ ...blockConfig,
39
+ } );
assets/js/atomic/blocks/product/image/index.js ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerBlockType } from '@wordpress/blocks';
6
+ import Gridicon from 'gridicons';
7
+ import { Fragment } from '@wordpress/element';
8
+ import { Disabled, PanelBody, ToggleControl } from '@wordpress/components';
9
+ import { InspectorControls } from '@wordpress/block-editor';
10
+ import ToggleButtonControl from '@woocommerce/block-components/toggle-button-control';
11
+ import { ProductImage } from '@woocommerce/atomic-components/product';
12
+ import { previewProducts } from '@woocommerce/resource-previews';
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ import sharedConfig from '../shared-config';
18
+
19
+ const blockConfig = {
20
+ title: __( 'Product Image', 'woo-gutenberg-products-block' ),
21
+ description: __(
22
+ 'Display the main product image',
23
+ 'woo-gutenberg-products-block'
24
+ ),
25
+ icon: {
26
+ src: <Gridicon icon="image" />,
27
+ foreground: '#96588a',
28
+ },
29
+ attributes: {
30
+ product: {
31
+ type: 'object',
32
+ default: previewProducts[ 0 ],
33
+ },
34
+ productLink: {
35
+ type: 'boolean',
36
+ default: true,
37
+ },
38
+ showSaleBadge: {
39
+ type: 'boolean',
40
+ default: true,
41
+ },
42
+ saleBadgeAlign: {
43
+ type: 'string',
44
+ default: 'right',
45
+ },
46
+ },
47
+ edit( props ) {
48
+ const { attributes, setAttributes } = props;
49
+ const { productLink, showSaleBadge, saleBadgeAlign } = attributes;
50
+
51
+ return (
52
+ <Fragment>
53
+ <InspectorControls>
54
+ <PanelBody
55
+ title={ __(
56
+ 'Content',
57
+ 'woo-gutenberg-products-block'
58
+ ) }
59
+ >
60
+ <ToggleControl
61
+ label={ __(
62
+ 'Link to Product Page',
63
+ 'woo-gutenberg-products-block'
64
+ ) }
65
+ help={ __(
66
+ 'Links the image to the single product listing.',
67
+ 'woo-gutenberg-products-block'
68
+ ) }
69
+ checked={ productLink }
70
+ onChange={ () =>
71
+ setAttributes( {
72
+ productLink: ! productLink,
73
+ } )
74
+ }
75
+ />
76
+ <ToggleControl
77
+ label={ __(
78
+ 'Show On-Sale Badge',
79
+ 'woo-gutenberg-products-block'
80
+ ) }
81
+ help={ __(
82
+ 'Overlay a "sale" badge if the product is on-sale.',
83
+ 'woo-gutenberg-products-block'
84
+ ) }
85
+ checked={ showSaleBadge }
86
+ onChange={ () =>
87
+ setAttributes( {
88
+ showSaleBadge: ! showSaleBadge,
89
+ } )
90
+ }
91
+ />
92
+ { showSaleBadge && (
93
+ <ToggleButtonControl
94
+ label={ __(
95
+ 'Sale Badge Alignment',
96
+ 'woo-gutenberg-products-block'
97
+ ) }
98
+ value={ saleBadgeAlign }
99
+ options={ [
100
+ {
101
+ label: __(
102
+ 'Left',
103
+ 'woo-gutenberg-products-block'
104
+ ),
105
+ value: 'left',
106
+ },
107
+ {
108
+ label: __(
109
+ 'Center',
110
+ 'woo-gutenberg-products-block'
111
+ ),
112
+ value: 'center',
113
+ },
114
+ {
115
+ label: __(
116
+ 'Right',
117
+ 'woo-gutenberg-products-block'
118
+ ),
119
+ value: 'right',
120
+ },
121
+ ] }
122
+ onChange={ ( value ) =>
123
+ setAttributes( { saleBadgeAlign: value } )
124
+ }
125
+ />
126
+ ) }
127
+ </PanelBody>
128
+ </InspectorControls>
129
+ <Disabled>
130
+ <ProductImage
131
+ product={ attributes.product }
132
+ productLink={ productLink }
133
+ showSaleBadge={ showSaleBadge }
134
+ saleBadgeAlign={ saleBadgeAlign }
135
+ />
136
+ </Disabled>
137
+ </Fragment>
138
+ );
139
+ },
140
+ };
141
+
142
+ registerBlockType( 'woocommerce/product-image', {
143
+ ...sharedConfig,
144
+ ...blockConfig,
145
+ } );
assets/js/atomic/blocks/product/index.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ export { default as ProductTitle } from './title';
2
+ export { default as ProductPrice } from './price';
3
+ export { default as ProductImage } from './image';
4
+ export { default as ProductRating } from './rating';
5
+ export { default as ProductButton } from './button';
6
+ export { default as ProductSummary } from './summary';
7
+ export { default as ProductSaleBadge } from './sale-badge';
assets/js/atomic/blocks/product/price/index.js ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerBlockType } from '@wordpress/blocks';
6
+ import Gridicon from 'gridicons';
7
+ import { ProductPrice } from '@woocommerce/atomic-components/product';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import sharedConfig from '../shared-config';
13
+
14
+ const blockConfig = {
15
+ title: __( 'Product Price', 'woo-gutenberg-products-block' ),
16
+ description: __(
17
+ 'Display the price of a product.',
18
+ 'woo-gutenberg-products-block'
19
+ ),
20
+ icon: {
21
+ src: <Gridicon icon="money" />,
22
+ foreground: '#96588a',
23
+ },
24
+ edit( props ) {
25
+ const { attributes } = props;
26
+
27
+ return <ProductPrice product={ attributes.product } />;
28
+ },
29
+ };
30
+
31
+ registerBlockType( 'woocommerce/product-price', {
32
+ ...sharedConfig,
33
+ ...blockConfig,
34
+ } );
assets/js/atomic/blocks/product/rating/index.js ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerBlockType } from '@wordpress/blocks';
6
+ import Gridicon from 'gridicons';
7
+ import { ProductRating } from '@woocommerce/atomic-components/product';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import sharedConfig from '../shared-config';
13
+
14
+ const blockConfig = {
15
+ title: __( 'Product Rating', 'woo-gutenberg-products-block' ),
16
+ description: __(
17
+ 'Display the average rating of a product.',
18
+ 'woo-gutenberg-products-block'
19
+ ),
20
+ icon: {
21
+ src: <Gridicon icon="star-outline" />,
22
+ foreground: '#96588a',
23
+ },
24
+ edit( props ) {
25
+ const { attributes } = props;
26
+
27
+ return <ProductRating product={ attributes.product } />;
28
+ },
29
+ };
30
+
31
+ registerBlockType( 'woocommerce/product-rating', {
32
+ ...sharedConfig,
33
+ ...blockConfig,
34
+ } );
assets/js/atomic/blocks/product/sale-badge/index.js ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerBlockType } from '@wordpress/blocks';
6
+ import { ProductSaleBadge } from '@woocommerce/atomic-components/product';
7
+ import { IconProductOnSale } from '@woocommerce/block-components/icons';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import sharedConfig from '../shared-config';
13
+
14
+ const blockConfig = {
15
+ title: __( 'On-Sale Badge', 'woo-gutenberg-products-block' ),
16
+ description: __(
17
+ 'Displays an on-sale badge if the product is on-sale.',
18
+ 'woo-gutenberg-products-block'
19
+ ),
20
+ icon: {
21
+ src: <IconProductOnSale />,
22
+ foreground: '#96588a',
23
+ },
24
+ supports: {
25
+ html: false,
26
+ },
27
+ edit( props ) {
28
+ const { align, product } = props.attributes;
29
+
30
+ return <ProductSaleBadge product={ product } align={ align } />;
31
+ },
32
+ };
33
+
34
+ registerBlockType( 'woocommerce/product-sale-badge', {
35
+ ...sharedConfig,
36
+ ...blockConfig,
37
+ } );
assets/js/atomic/blocks/product/summary/index.js ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerBlockType } from '@wordpress/blocks';
6
+ import Gridicon from 'gridicons';
7
+ import { ProductSummary } from '@woocommerce/atomic-components/product';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import sharedConfig from '../shared-config';
13
+
14
+ const blockConfig = {
15
+ title: __( 'Product Summary', 'woo-gutenberg-products-block' ),
16
+ description: __(
17
+ 'Display the short description of a product.',
18
+ 'woo-gutenberg-products-block'
19
+ ),
20
+ icon: {
21
+ src: <Gridicon icon="aside" />,
22
+ foreground: '#96588a',
23
+ },
24
+ edit( props ) {
25
+ const { attributes } = props;
26
+
27
+ return <ProductSummary product={ attributes.product } />;
28
+ },
29
+ };
30
+
31
+ registerBlockType( 'woocommerce/product-summary', {
32
+ ...sharedConfig,
33
+ ...blockConfig,
34
+ } );
assets/js/atomic/blocks/product/title/index.js ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerBlockType } from '@wordpress/blocks';
6
+ import { Fragment } from 'react';
7
+ import { Disabled, PanelBody, ToggleControl } from '@wordpress/components';
8
+ import { InspectorControls } from '@wordpress/block-editor';
9
+ import { ProductTitle } from '@woocommerce/atomic-components/product';
10
+ import { previewProducts } from '@woocommerce/resource-previews';
11
+ import HeadingToolbar from '@woocommerce/block-components/heading-toolbar';
12
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+ import sharedConfig from '../shared-config';
17
+
18
+ const blockConfig = {
19
+ title: __( 'Product Title', 'woo-gutenberg-products-block' ),
20
+ description: __(
21
+ 'Display the name of a product.',
22
+ 'woo-gutenberg-products-block'
23
+ ),
24
+ icon: {
25
+ src: 'heading',
26
+ foreground: '#96588a',
27
+ },
28
+ attributes: {
29
+ product: {
30
+ type: 'object',
31
+ default: previewProducts[ 0 ],
32
+ },
33
+ headingLevel: {
34
+ type: 'number',
35
+ default: 2,
36
+ },
37
+ productLink: {
38
+ type: 'boolean',
39
+ default: true,
40
+ },
41
+ },
42
+ edit( props ) {
43
+ const { attributes, setAttributes } = props;
44
+ const { headingLevel, productLink } = attributes;
45
+
46
+ return (
47
+ <Fragment>
48
+ <InspectorControls>
49
+ <PanelBody
50
+ title={ __(
51
+ 'Content',
52
+ 'woo-gutenberg-products-block'
53
+ ) }
54
+ >
55
+ <p>{ __( 'Level', 'woo-gutenberg-products-block' ) }</p>
56
+ <HeadingToolbar
57
+ isCollapsed={ false }
58
+ minLevel={ 2 }
59
+ maxLevel={ 7 }
60
+ selectedLevel={ headingLevel }
61
+ onChange={ ( newLevel ) =>
62
+ setAttributes( { headingLevel: newLevel } )
63
+ }
64
+ />
65
+ <ToggleControl
66
+ label={ __(
67
+ 'Link to Product Page',
68
+ 'woo-gutenberg-products-block'
69
+ ) }
70
+ help={ __(
71
+ 'Links the image to the single product listing.',
72
+ 'woo-gutenberg-products-block'
73
+ ) }
74
+ checked={ productLink }
75
+ onChange={ () =>
76
+ setAttributes( {
77
+ productLink: ! productLink,
78
+ } )
79
+ }
80
+ />
81
+ </PanelBody>
82
+ </InspectorControls>
83
+ <Disabled>
84
+ <ProductTitle
85
+ headingLevel={ headingLevel }
86
+ productLink={ productLink }
87
+ product={ attributes.product }
88
+ />
89
+ </Disabled>
90
+ </Fragment>
91
+ );
92
+ },
93
+ };
94
+
95
+ registerBlockType( 'woocommerce/product-title', {
96
+ ...sharedConfig,
97
+ ...blockConfig,
98
+ } );
assets/js/atomic/components/product/button/index.js ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import classnames from 'classnames';
6
+ import { _n, sprintf } from '@wordpress/i18n';
7
+ import {
8
+ useMemo,
9
+ useCallback,
10
+ useState,
11
+ useEffect,
12
+ useRef,
13
+ } from '@wordpress/element';
14
+ import { useDispatch } from '@wordpress/data';
15
+ import { find } from 'lodash';
16
+ import { useCollection } from '@woocommerce/base-hooks';
17
+ import { COLLECTIONS_STORE_KEY as storeKey } from '@woocommerce/block-data';
18
+ import { useProductLayoutContext } from '@woocommerce/base-context/product-layout-context';
19
+ import { decodeEntities } from '@wordpress/html-entities';
20
+
21
+ /**
22
+ * A custom hook for exposing cart related data for a given product id and an
23
+ * action for adding a single quantity of the product _to_ the cart.
24
+ *
25
+ * Currently this is internal only to the ProductButton component until we have
26
+ * a clearer idea of the pattern that should emerge for a cart hook.
27
+ *
28
+ * @param {number} productId The product id for the product connection to the
29
+ * cart.
30
+ *
31
+ * @return {Object} Returns an object with the following properties:
32
+ * @type {number} cartQuantity The quantity of the product currently in
33
+ * the cart.
34
+ * @type {boolean} addingToCart Whether the product is currently being
35
+ * added to the cart (true).
36
+ * @type {boolean} cartIsLoading Whether the cart is being loaded.
37
+ * @type {Function} addToCart An action dispatcher for adding a single
38
+ * quantity of the product to the cart.
39
+ * Receives no arguments, it operates on the
40
+ * current product.
41
+ */
42
+ const useAddToCart = ( productId ) => {
43
+ const { results: cartResults, isLoading: cartIsLoading } = useCollection( {
44
+ namespace: '/wc/store',
45
+ resourceName: 'cart/items',
46
+ } );
47
+ const currentCartResults = useRef( null );
48
+ const { __experimentalPersistItemToCollection } = useDispatch( storeKey );
49
+ const cartQuantity = useMemo( () => {
50
+ const productItem = find( cartResults, { id: productId } );
51
+ return productItem ? productItem.quantity : 0;
52
+ }, [ cartResults, productId ] );
53
+ const [ addingToCart, setAddingToCart ] = useState( false );
54
+ const addToCart = useCallback( () => {
55
+ setAddingToCart( true );
56
+ // exclude this item from the cartResults for adding to the new
57
+ // collection (so it's updated correctly!)
58
+ const collection = cartResults.filter( ( cartItem ) => {
59
+ return cartItem.id !== productId;
60
+ } );
61
+ __experimentalPersistItemToCollection(
62
+ '/wc/store',
63
+ 'cart/items',
64
+ collection,
65
+ { id: productId, quantity: 1 }
66
+ );
67
+ }, [ productId, cartResults ] );
68
+ useEffect( () => {
69
+ if ( currentCartResults.current !== cartResults ) {
70
+ if ( addingToCart ) {
71
+ setAddingToCart( false );
72
+ }
73
+ currentCartResults.current = cartResults;
74
+ }
75
+ }, [ cartResults, addingToCart ] );
76
+ return {
77
+ cartQuantity,
78
+ addingToCart,
79
+ cartIsLoading,
80
+ addToCart,
81
+ };
82
+ };
83
+
84
+ const Event = window.Event || null;
85
+
86
+ const ProductButton = ( { product, className } ) => {
87
+ const {
88
+ id,
89
+ permalink,
90
+ add_to_cart: productCartDetails,
91
+ has_options: hasOptions,
92
+ is_purchasable: isPurchasable,
93
+ is_in_stock: isInStock,
94
+ } = product;
95
+ const {
96
+ cartQuantity,
97
+ addingToCart,
98
+ cartIsLoading,
99
+ addToCart,
100
+ } = useAddToCart( id );
101
+ const { layoutStyleClassPrefix } = useProductLayoutContext();
102
+ const addedToCart = cartQuantity > 0;
103
+ const firstMount = useRef( true );
104
+ const getButtonText = () => {
105
+ if ( Number.isFinite( cartQuantity ) && addedToCart ) {
106
+ return sprintf(
107
+ // translators: %s number of products in cart.
108
+ _n(
109
+ '%d in cart',
110
+ '%d in cart',
111
+ cartQuantity,
112
+ 'woo-gutenberg-products-block'
113
+ ),
114
+ cartQuantity
115
+ );
116
+ }
117
+ return decodeEntities( productCartDetails.text );
118
+ };
119
+
120
+ // This is a hack to trigger cart updates till we migrate to block based card
121
+ // that relies on the store, see
122
+ // https://github.com/woocommerce/woocommerce-gutenberg-products-block/issues/1247
123
+ useEffect( () => {
124
+ if ( firstMount.current ) {
125
+ firstMount.current = false;
126
+ return;
127
+ }
128
+ // In IE, Event is an object and can't be instantiated with `new Event()`.
129
+ if ( typeof Event === 'function' ) {
130
+ const event = new Event( 'wc_fragment_refresh', {
131
+ bubbles: true,
132
+ cancelable: true,
133
+ } );
134
+ document.body.dispatchEvent( event );
135
+ } else {
136
+ const event = document.createEvent( 'Event' );
137
+ event.initEvent( 'wc_fragment_refresh', true, true );
138
+ document.body.dispatchEvent( event );
139
+ }
140
+ }, [ cartQuantity ] );
141
+
142
+ const wrapperClasses = classnames(
143
+ className,
144
+ `${ layoutStyleClassPrefix }__product-add-to-cart`,
145
+ 'wp-block-button'
146
+ );
147
+
148
+ const buttonClasses = classnames(
149
+ 'wp-block-button__link',
150
+ 'add_to_cart_button',
151
+ {
152
+ loading: addingToCart,
153
+ added: addedToCart,
154
+ }
155
+ );
156
+
157
+ if ( Object.keys( product ).length === 0 || cartIsLoading ) {
158
+ return (
159
+ <div className={ wrapperClasses }>
160
+ <button className={ buttonClasses } disabled={ true } />
161
+ </div>
162
+ );
163
+ }
164
+ const allowAddToCart = ! hasOptions && isPurchasable && isInStock;
165
+ return (
166
+ <div className={ wrapperClasses }>
167
+ { allowAddToCart ? (
168
+ <button
169
+ onClick={ addToCart }
170
+ aria-label={ decodeEntities(
171
+ productCartDetails.description
172
+ ) }
173
+ className={ buttonClasses }
174
+ disabled={ addingToCart }
175
+ >
176
+ { getButtonText() }
177
+ </button>
178
+ ) : (
179
+ <a
180
+ href={ permalink }
181
+ aria-label={ decodeEntities(
182
+ productCartDetails.description
183
+ ) }
184
+ className={ buttonClasses }
185
+ rel="nofollow"
186
+ >
187
+ { getButtonText() }
188
+ </a>
189
+ ) }
190
+ </div>
191
+ );
192
+ };
193
+
194
+ ProductButton.propTypes = {
195
+ className: PropTypes.string,
196
+ product: PropTypes.object.isRequired,
197
+ };
198
+
199
+ export default ProductButton;
assets/js/atomic/components/product/image/index.js ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import { Fragment, useState } from '@wordpress/element';
6
+ import classnames from 'classnames';
7
+ import { PLACEHOLDER_IMG_SRC } from '@woocommerce/block-settings';
8
+ import { useProductLayoutContext } from '@woocommerce/base-context/product-layout-context';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import { ProductSaleBadge } from '../../../components/product';
14
+
15
+ const SaleBadge = ( { product, saleBadgeAlign, shouldRender } ) => {
16
+ return shouldRender ? (
17
+ <ProductSaleBadge product={ product } align={ saleBadgeAlign } />
18
+ ) : null;
19
+ };
20
+
21
+ const Image = ( { layoutPrefix, loaded, image, onLoad } ) => {
22
+ const cssClass = classnames( `${ layoutPrefix }__product-image__image`, {
23
+ [ `${ layoutPrefix }__product-image__image_placeholder` ]:
24
+ ! loaded && ! image,
25
+ } );
26
+ const { thumbnail, srcset, sizes, alt } = image || {};
27
+ return (
28
+ <Fragment>
29
+ { image && (
30
+ <img
31
+ className={ cssClass }
32
+ src={ thumbnail }
33
+ srcSet={ srcset }
34
+ sizes={ sizes }
35
+ alt={ alt }
36
+ onLoad={ onLoad }
37
+ hidden={ ! loaded }
38
+ />
39
+ ) }
40
+ { ! loaded && (
41
+ <img
42
+ className={ cssClass }
43
+ src={ PLACEHOLDER_IMG_SRC }
44
+ alt=""
45
+ />
46
+ ) }
47
+ </Fragment>
48
+ );
49
+ };
50
+
51
+ const ProductImage = ( {
52
+ className,
53
+ product,
54
+ productLink = true,
55
+ showSaleBadge = true,
56
+ saleBadgeAlign = 'right',
57
+ } ) => {
58
+ const [ imageLoaded, setImageLoaded ] = useState( false );
59
+ const { layoutStyleClassPrefix } = useProductLayoutContext();
60
+ const image =
61
+ product.images && product.images.length ? product.images[ 0 ] : null;
62
+
63
+ const renderedSalesAndImage = (
64
+ <Fragment>
65
+ <SaleBadge
66
+ product={ product }
67
+ saleBadgeAlign={ saleBadgeAlign }
68
+ shouldRender={ showSaleBadge }
69
+ />
70
+ <Image
71
+ layoutPrefix={ layoutStyleClassPrefix }
72
+ loaded={ imageLoaded }
73
+ image={ image }
74
+ onLoad={ () => setImageLoaded( true ) }
75
+ />
76
+ </Fragment>
77
+ );
78
+
79
+ return (
80
+ <div
81
+ className={ classnames(
82
+ className,
83
+ `${ layoutStyleClassPrefix }__product-image`
84
+ ) }
85
+ >
86
+ { productLink ? (
87
+ <a href={ product.permalink } rel="nofollow">
88
+ { renderedSalesAndImage }
89
+ </a>
90
+ ) : (
91
+ renderedSalesAndImage
92
+ ) }
93
+ </div>
94
+ );
95
+ };
96
+
97
+ ProductImage.propTypes = {
98
+ className: PropTypes.string,
99
+ product: PropTypes.object.isRequired,
100
+ productLink: PropTypes.bool,
101
+ showSaleBadge: PropTypes.bool,
102
+ saleBadgeAlign: PropTypes.string,
103
+ };
104
+
105
+ export default ProductImage;
assets/js/atomic/components/product/index.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ export { default as ProductButton } from './button';
2
+ export { default as ProductImage } from './image';
3
+ export { default as ProductRating } from './rating';
4
+ export { default as ProductTitle } from './title';
5
+ export { default as ProductPrice } from './price';
6
+ export { default as ProductSummary } from './summary';
7
+ export { default as ProductSaleBadge } from './sale-badge';
assets/js/atomic/components/product/price/index.js ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import NumberFormat from 'react-number-format';
5
+ import classnames from 'classnames';
6
+ import { useProductLayoutContext } from '@woocommerce/base-context/product-layout-context';
7
+
8
+ const ProductPrice = ( { className, product } ) => {
9
+ const { layoutStyleClassPrefix } = useProductLayoutContext();
10
+ const prices = product.prices || {};
11
+ const numberFormatArgs = {
12
+ displayType: 'text',
13
+ thousandSeparator: prices.thousand_separator,
14
+ decimalSeparator: prices.decimal_separator,
15
+ decimalScale: prices.decimals,
16
+ fixedDecimalScale: true,
17
+ prefix: prices.price_prefix,
18
+ suffix: prices.price_suffix,
19
+ };
20
+
21
+ if (
22
+ prices.price_range &&
23
+ prices.price_range.min_amount &&
24
+ prices.price_range.max_amount
25
+ ) {
26
+ const minAmount = parseFloat( prices.price_range.min_amount );
27
+ const maxAmount = parseFloat( prices.price_range.max_amount );
28
+ return (
29
+ <div
30
+ className={ classnames(
31
+ className,
32
+ `${ layoutStyleClassPrefix }__product-price`
33
+ ) }
34
+ >
35
+ <span
36
+ className={ `${ layoutStyleClassPrefix }__product-price__value` }
37
+ >
38
+ <NumberFormat value={ minAmount } { ...numberFormatArgs } />
39
+ &nbsp;&mdash;&nbsp;
40
+ <NumberFormat value={ maxAmount } { ...numberFormatArgs } />
41
+ </span>
42
+ </div>
43
+ );
44
+ }
45
+
46
+ return (
47
+ <div
48
+ className={ classnames(
49
+ className,
50
+ `${ layoutStyleClassPrefix }__product-price`
51
+ ) }
52
+ >
53
+ { prices.regular_price !== prices.price && (
54
+ <del
55
+ className={ `${ layoutStyleClassPrefix }__product-price__regular` }
56
+ >
57
+ <NumberFormat
58
+ value={ prices.regular_price }
59
+ { ...numberFormatArgs }
60
+ />
61
+ </del>
62
+ ) }
63
+ <span
64
+ className={ `${ layoutStyleClassPrefix }__product-price__value` }
65
+ >
66
+ <NumberFormat value={ prices.price } { ...numberFormatArgs } />
67
+ </span>
68
+ </div>
69
+ );
70
+ };
71
+
72
+ export default ProductPrice;
assets/js/atomic/components/product/rating/index.js ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import { __, sprintf } from '@wordpress/i18n';
6
+ import classnames from 'classnames';
7
+ import { useProductLayoutContext } from '@woocommerce/base-context/product-layout-context';
8
+
9
+ const ProductRating = ( { className, product } ) => {
10
+ const rating = parseFloat( product.average_rating );
11
+ const { layoutStyleClassPrefix } = useProductLayoutContext();
12
+
13
+ if ( ! Number.isFinite( rating ) || rating === 0 ) {
14
+ return null;
15
+ }
16
+
17
+ const starStyle = {
18
+ width: ( rating / 5 ) * 100 + '%',
19
+ };
20
+
21
+ return (
22
+ <div
23
+ className={ classnames(
24
+ className,
25
+ `${ layoutStyleClassPrefix }__product-rating`
26
+ ) }
27
+ >
28
+ <div
29
+ className={ `${ layoutStyleClassPrefix }__product-rating__stars` }
30
+ role="img"
31
+ >
32
+ <span style={ starStyle }>
33
+ { sprintf(
34
+ __(
35
+ 'Rated %d out of 5',
36
+ 'woo-gutenberg-products-block'
37
+ ),
38
+ rating
39
+ ) }
40
+ </span>
41
+ </div>
42
+ </div>
43
+ );
44
+ };
45
+
46
+ ProductRating.propTypes = {
47
+ className: PropTypes.string,
48
+ product: PropTypes.object.isRequired,
49
+ };
50
+
51
+ export default ProductRating;
assets/js/atomic/components/product/sale-badge/index.js ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import classnames from 'classnames';
6
+ import { useProductLayoutContext } from '@woocommerce/base-context/product-layout-context';
7
+
8
+ const ProductSaleBadge = ( { className, product, align } ) => {
9
+ const { layoutStyleClassPrefix } = useProductLayoutContext();
10
+ const alignClass =
11
+ typeof align === 'string'
12
+ ? `${ layoutStyleClassPrefix }__product-onsale--align${ align }`
13
+ : '';
14
+
15
+ if ( product && product.on_sale ) {
16
+ return (
17
+ <div
18
+ className={ classnames(
19
+ className,
20
+ alignClass,
21
+ `${ layoutStyleClassPrefix }__product-onsale`
22
+ ) }
23
+ >
24
+ { __( 'Sale', 'woo-gutenberg-products-block' ) }
25
+ </div>
26
+ );
27
+ }
28
+
29
+ return null;
30
+ };
31
+
32
+ export default ProductSaleBadge;
assets/js/atomic/components/product/summary/index.js ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import classnames from 'classnames';
6
+ import { useProductLayoutContext } from '@woocommerce/base-context/product-layout-context';
7
+
8
+ const ProductSummary = ( { className, product } ) => {
9
+ const { layoutStyleClassPrefix } = useProductLayoutContext();
10
+ if ( ! product.description ) {
11
+ return null;
12
+ }
13
+
14
+ return (
15
+ <div
16
+ className={ classnames(
17
+ className,
18
+ `${ layoutStyleClassPrefix }__product-summary`
19
+ ) }
20
+ dangerouslySetInnerHTML={ {
21
+ __html: product.description,
22
+ } }
23
+ />
24
+ );
25
+ };
26
+
27
+ ProductSummary.propTypes = {
28
+ className: PropTypes.string,
29
+ product: PropTypes.object.isRequired,
30
+ };
31
+
32
+ export default ProductSummary;
assets/js/atomic/components/product/title/index.js ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import classnames from 'classnames';
6
+ import { useProductLayoutContext } from '@woocommerce/base-context/product-layout-context';
7
+ import { decodeEntities } from '@wordpress/html-entities';
8
+
9
+ const ProductTitle = ( {
10
+ className,
11
+ product,
12
+ headingLevel = 2,
13
+ productLink = true,
14
+ } ) => {
15
+ const { layoutStyleClassPrefix } = useProductLayoutContext();
16
+ if ( ! product.name ) {
17
+ return null;
18
+ }
19
+
20
+ const productName = decodeEntities( product.name );
21
+ const TagName = `h${ headingLevel }`;
22
+
23
+ return (
24
+ <TagName
25
+ className={ classnames(
26
+ className,
27
+ `${ layoutStyleClassPrefix }__product-title`
28
+ ) }
29
+ >
30
+ { productLink ? (
31
+ <a href={ product.permalink } rel="nofollow">
32
+ { productName }
33
+ </a>
34
+ ) : (
35
+ productName
36
+ ) }
37
+ </TagName>
38
+ );
39
+ };
40
+
41
+ ProductTitle.propTypes = {
42
+ className: PropTypes.string,
43
+ product: PropTypes.object.isRequired,
44
+ headingLevel: PropTypes.number,
45
+ productLink: PropTypes.bool,
46
+ };
47
+
48
+ export default ProductTitle;
assets/js/atomic/utils/block-styling.js DELETED
@@ -1,12 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { isFeaturePluginBuild } from '@woocommerce/block-settings';
5
-
6
- export const gatedStyledText = ( { color, fontSize } ) =>
7
- isFeaturePluginBuild()
8
- ? {
9
- color,
10
- fontSize,
11
- }
12
- : {};
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/utils/create-blocks-from-template.js DELETED
@@ -1,18 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { createBlock } from '@wordpress/blocks';
5
-
6
- /**
7
- * Creates blocks for a given inner blocks Template.
8
- *
9
- * @param {Array} template Inner Blocks Template.
10
- */
11
- export const createBlocksFromTemplate = ( template ) => {
12
- return template.map( ( [ name, atts = {}, innerBlocks = [] ] ) => {
13
- const children = innerBlocks
14
- ? createBlocksFromTemplate( innerBlocks )
15
- : [];
16
- return createBlock( name, atts, children );
17
- } );
18
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/utils/get-block-map.js DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { getRegisteredBlockComponents } from '@woocommerce/blocks-registry';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import '../blocks/component-init';
10
-
11
- /**
12
- * Map named Blocks to defined React Components to render on the frontend.
13
- *
14
- * @param {string} blockName Name of the parent block.
15
- */
16
- export const getBlockMap = ( blockName ) =>
17
- getRegisteredBlockComponents( blockName );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/utils/index.js DELETED
@@ -1,5 +0,0 @@
1
- export * from './get-block-map';
2
- export * from './create-blocks-from-template';
3
- export * from './render-parent-block';
4
- export * from './block-styling.js';
5
- export * from './render-standalone-blocks';
 
 
 
 
 
assets/js/atomic/utils/render-parent-block.tsx DELETED
@@ -1,126 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { renderFrontend } from '@woocommerce/base-utils';
5
- import {
6
- Fragment,
7
- Suspense,
8
- cloneElement,
9
- isValidElement,
10
- } from '@wordpress/element';
11
- import parse from 'html-react-parser';
12
-
13
- interface renderBlockProps {
14
- // Parent Block Name. Used for inner block component mapping.
15
- blockName: string;
16
- // Map of block names to block components for children.
17
- blockMap: Record< string, React.ReactNode >;
18
- // Wrapper for inner components.
19
- blockWrapper?: React.ReactNode;
20
- }
21
-
22
- interface renderParentBlockProps extends renderBlockProps {
23
- // React component to use as a replacement.
24
- Block: React.FunctionComponent;
25
- // CSS selector to match the elements to replace.
26
- selector: string;
27
- // Function to generate the props object for the block.
28
- getProps: ( el: Element, i: number ) => Record< string, unknown >;
29
- }
30
-
31
- interface renderInnerBlockProps extends renderBlockProps {
32
- children: HTMLCollection;
33
- depth?: number;
34
- }
35
-
36
- /**
37
- * Replaces saved block HTML markup with Inner Block Components.
38
- */
39
- const renderInnerBlocks = ( {
40
- blockName: parentBlockName,
41
- blockMap,
42
- blockWrapper,
43
- depth = 1,
44
- children,
45
- }: renderInnerBlockProps ): ( JSX.Element | null )[] | null => {
46
- return Array.from( children ).map( ( el: Element, index: number ) => {
47
- const { blockName = '', ...componentProps } = {
48
- key: `${ parentBlockName }_${ depth }_${ index }`,
49
- ...( el instanceof HTMLElement ? el.dataset : {} ),
50
- };
51
-
52
- const componentChildren =
53
- el.children && el.children.length
54
- ? renderInnerBlocks( {
55
- children: el.children,
56
- blockName: parentBlockName,
57
- blockMap,
58
- depth: depth + 1,
59
- blockWrapper,
60
- } )
61
- : null;
62
-
63
- const LayoutComponent =
64
- blockName && blockMap[ blockName ]
65
- ? ( blockMap[ blockName ] as React.ElementType )
66
- : null;
67
-
68
- if ( ! LayoutComponent ) {
69
- const element = parse( el.outerHTML );
70
-
71
- if ( isValidElement( element ) ) {
72
- return componentChildren
73
- ? cloneElement( element, componentProps, componentChildren )
74
- : cloneElement( element, componentProps );
75
- }
76
- return null;
77
- }
78
-
79
- const LayoutComponentWrapper = ( blockWrapper
80
- ? blockWrapper
81
- : Fragment ) as React.ElementType;
82
-
83
- return (
84
- <Suspense
85
- key={ `${ parentBlockName }_${ depth }_${ index }_suspense` }
86
- fallback={ <div className="wc-block-placeholder" /> }
87
- >
88
- <LayoutComponentWrapper>
89
- <LayoutComponent { ...componentProps }>
90
- { componentChildren }
91
- </LayoutComponent>
92
- </LayoutComponentWrapper>
93
- </Suspense>
94
- );
95
- } );
96
- };
97
-
98
- /**
99
- * Renders a block component in the place of a specified set of selectors.
100
- */
101
- export const renderParentBlock = ( {
102
- Block,
103
- selector,
104
- blockName,
105
- getProps = () => ( {} ),
106
- blockMap,
107
- blockWrapper,
108
- }: renderParentBlockProps ): void => {
109
- const getPropsWithChildren = ( el: Element, i: number ) => {
110
- const children =
111
- el.children && el.children.length
112
- ? renderInnerBlocks( {
113
- blockName,
114
- blockMap,
115
- children: el.children,
116
- blockWrapper,
117
- } )
118
- : null;
119
- return { ...getProps( el, i ), children };
120
- };
121
- renderFrontend( {
122
- Block,
123
- selector,
124
- getProps: getPropsWithChildren,
125
- } );
126
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/atomic/utils/render-standalone-blocks.js DELETED
@@ -1,27 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { renderFrontend } from '@woocommerce/base-utils';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import { getBlockMap } from './get-block-map';
10
-
11
- export const renderStandaloneBlocks = () => {
12
- const blockMap = getBlockMap( '' );
13
-
14
- Object.keys( blockMap ).forEach( ( blockName ) => {
15
- const selector = '.wp-block-' + blockName.replace( '/', '-' );
16
-
17
- const getProps = ( el ) => {
18
- return el.dataset;
19
- };
20
-
21
- renderFrontend( {
22
- Block: blockMap[ blockName ],
23
- selector,
24
- getProps,
25
- } );
26
- } );
27
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/block-error-boundary/block-error.js CHANGED
@@ -2,50 +2,34 @@
2
  * External dependencies
3
  */
4
  import { __ } from '@wordpress/i18n';
 
5
  import PropTypes from 'prop-types';
6
- import { WC_BLOCKS_IMAGE_URL } from '@woocommerce/block-settings';
7
 
8
  const BlockError = ( {
9
- imageUrl = `${ WC_BLOCKS_IMAGE_URL }/block-error.svg`,
10
  header = __( 'Oops!', 'woo-gutenberg-products-block' ),
11
  text = __(
12
- 'There was an error loading the content.',
13
  'woo-gutenberg-products-block'
14
  ),
15
  errorMessage,
16
- errorMessagePrefix = __( 'Error:', 'woo-gutenberg-products-block' ),
17
- button,
18
  } ) => {
19
  return (
20
- <div className="wc-block-error wc-block-components-error">
21
  { imageUrl && (
22
  <img
23
- className="wc-block-error__image wc-block-components-error__image"
24
  src={ imageUrl }
25
  alt=""
26
  />
27
  ) }
28
- <div className="wc-block-error__content wc-block-components-error__content">
29
  { header && (
30
- <p className="wc-block-error__header wc-block-components-error__header">
31
- { header }
32
- </p>
33
- ) }
34
- { text && (
35
- <p className="wc-block-error__text wc-block-components-error__text">
36
- { text }
37
- </p>
38
  ) }
 
39
  { errorMessage && (
40
- <p className="wc-block-error__message wc-block-components-error__message">
41
- { errorMessagePrefix ? errorMessagePrefix + ' ' : '' }
42
- { errorMessage }
43
- </p>
44
- ) }
45
- { button && (
46
- <p className="wc-block-error__button wc-block-components-error__button">
47
- { button }
48
- </p>
49
  ) }
50
  </div>
51
  </div>
@@ -56,7 +40,7 @@ BlockError.propTypes = {
56
  /**
57
  * Error message to display below the content.
58
  */
59
- errorMessage: PropTypes.node,
60
  /**
61
  * Text to display as the heading of the error block.
62
  * If it's `null` or an empty string, no header will be displayed.
@@ -74,15 +58,7 @@ BlockError.propTypes = {
74
  * If it's `null` or an empty string, nothing will be displayed.
75
  * If it's not defined, the default text will be used.
76
  */
77
- text: PropTypes.node,
78
- /**
79
- * Text preceeding the error message.
80
- */
81
- errorMessagePrefix: PropTypes.string,
82
- /**
83
- * Button cta.
84
- */
85
- button: PropTypes.node,
86
  };
87
 
88
  export default BlockError;
2
  * External dependencies
3
  */
4
  import { __ } from '@wordpress/i18n';
5
+ import { WC_BLOCKS_ASSET_URL } from '@woocommerce/block-settings';
6
  import PropTypes from 'prop-types';
 
7
 
8
  const BlockError = ( {
9
+ imageUrl = `${ WC_BLOCKS_ASSET_URL }img/block-error.svg`,
10
  header = __( 'Oops!', 'woo-gutenberg-products-block' ),
11
  text = __(
12
+ 'There was an error with loading this content.',
13
  'woo-gutenberg-products-block'
14
  ),
15
  errorMessage,
 
 
16
  } ) => {
17
  return (
18
+ <div className="wc-block-error">
19
  { imageUrl && (
20
  <img
21
+ className="wc-block-error__image"
22
  src={ imageUrl }
23
  alt=""
24
  />
25
  ) }
26
+ <div className="wc-block-error__content">
27
  { header && (
28
+ <p className="wc-block-error__header">{ header }</p>
 
 
 
 
 
 
 
29
  ) }
30
+ { text && <p className="wc-block-error__text">{ text }</p> }
31
  { errorMessage && (
32
+ <p className="wc-block-error__message">{ errorMessage }</p>
 
 
 
 
 
 
 
 
33
  ) }
34
  </div>
35
  </div>
40
  /**
41
  * Error message to display below the content.
42
  */
43
+ errorMessage: PropTypes.string,
44
  /**
45
  * Text to display as the heading of the error block.
46
  * If it's `null` or an empty string, no header will be displayed.
58
  * If it's `null` or an empty string, nothing will be displayed.
59
  * If it's not defined, the default text will be used.
60
  */
61
+ text: PropTypes.string,
 
 
 
 
 
 
 
 
62
  };
63
 
64
  export default BlockError;
assets/js/base/components/block-error-boundary/index.js CHANGED
@@ -1,8 +1,8 @@
1
  /**
2
  * External dependencies
3
  */
4
- import PropTypes from 'prop-types';
5
  import { Component } from 'react';
 
6
 
7
  /**
8
  * Internal dependencies
@@ -11,51 +11,23 @@ import BlockError from './block-error';
11
  import './style.scss';
12
 
13
  class BlockErrorBoundary extends Component {
14
- state = { errorMessage: '', hasError: false };
15
 
16
  static getDerivedStateFromError( error ) {
17
- if (
18
- typeof error.statusText !== 'undefined' &&
19
- typeof error.status !== 'undefined'
20
- ) {
21
- return {
22
- errorMessage: (
23
- <>
24
- <strong>{ error.status }</strong>:&nbsp;
25
- { error.statusText }
26
- </>
27
- ),
28
- hasError: true,
29
- };
30
- }
31
-
32
  return { errorMessage: error.message, hasError: true };
33
  }
34
 
35
  render() {
36
- const {
37
- header,
38
- imageUrl,
39
- showErrorMessage,
40
- text,
41
- errorMessagePrefix,
42
- renderError,
43
- button,
44
- } = this.props;
45
  const { errorMessage, hasError } = this.state;
46
 
47
  if ( hasError ) {
48
- if ( typeof renderError === 'function' ) {
49
- return renderError( { errorMessage } );
50
- }
51
  return (
52
  <BlockError
53
  errorMessage={ showErrorMessage ? errorMessage : null }
54
  header={ header }
55
  imageUrl={ imageUrl }
56
  text={ text }
57
- errorMessagePrefix={ errorMessagePrefix }
58
- button={ button }
59
  />
60
  );
61
  }
@@ -86,19 +58,11 @@ BlockErrorBoundary.propTypes = {
86
  * If it's `null` or an empty string, nothing will be displayed.
87
  * If it's not defined, the default text will be used.
88
  */
89
- text: PropTypes.node,
90
- /**
91
- * Text preceeding the error message.
92
- */
93
- errorMessagePrefix: PropTypes.string,
94
- /**
95
- * Render function to show a custom error component.
96
- */
97
- renderError: PropTypes.func,
98
  };
99
 
100
  BlockErrorBoundary.defaultProps = {
101
- showErrorMessage: true,
102
  };
103
 
104
  export default BlockErrorBoundary;
1
  /**
2
  * External dependencies
3
  */
 
4
  import { Component } from 'react';
5
+ import PropTypes from 'prop-types';
6
 
7
  /**
8
  * Internal dependencies
11
  import './style.scss';
12
 
13
  class BlockErrorBoundary extends Component {
14
+ state = { hasError: false };
15
 
16
  static getDerivedStateFromError( error ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  return { errorMessage: error.message, hasError: true };
18
  }
19
 
20
  render() {
21
+ const { header, imageUrl, showErrorMessage, text } = this.props;
 
 
 
 
 
 
 
 
22
  const { errorMessage, hasError } = this.state;
23
 
24
  if ( hasError ) {
 
 
 
25
  return (
26
  <BlockError
27
  errorMessage={ showErrorMessage ? errorMessage : null }
28
  header={ header }
29
  imageUrl={ imageUrl }
30
  text={ text }
 
 
31
  />
32
  );
33
  }
58
  * If it's `null` or an empty string, nothing will be displayed.
59
  * If it's not defined, the default text will be used.
60
  */
61
+ text: PropTypes.string,
 
 
 
 
 
 
 
 
62
  };
63
 
64
  BlockErrorBoundary.defaultProps = {
65
+ showErrorMessage: false,
66
  };
67
 
68
  export default BlockErrorBoundary;
assets/js/base/components/block-error-boundary/style.scss CHANGED
@@ -1,34 +1,30 @@
1
- .wc-block-components-error {
2
  display: flex;
3
- padding: $gap-largest 0;
4
- margin: $gap-largest 0;
 
5
  align-items: center;
6
  justify-content: center;
7
  flex-direction: column;
8
- color: $gray-700;
9
- text-align: center;
10
  }
11
- .wc-block-components-error__header {
12
- @include font-size(larger);
 
 
13
  margin: 0;
14
- color: $studio-gray-50;
15
  }
16
- .wc-block-components-error__image {
17
- width: 25%;
18
- margin: 0 0 $gap-large 0;
19
- }
20
- .wc-block-components-error__text {
21
- margin: 1em 0 0;
22
- color: $studio-gray-30;
23
- @include font-size(large);
24
- max-width: 60ch;
25
- }
26
- .wc-block-components-error__message {
27
- margin: 1em 0 0;
28
- font-style: italic;
29
- color: $studio-gray-30;
30
- max-width: 60ch;
31
  }
32
- .wc-block-error__button {
33
- margin: $gap-largest 0 0 0;
 
 
 
 
 
 
 
34
  }
1
+ .wc-block-error {
2
  display: flex;
3
+ background-color: #f3f3f4;
4
+ border-left: 4px solid #6d6d6d;
5
+ padding: $gap-larger $gap;
6
  align-items: center;
7
  justify-content: center;
8
  flex-direction: column;
 
 
9
  }
10
+
11
+ .wc-block-error__header {
12
+ font-size: 2em;
13
+ font-weight: bold;
14
  margin: 0;
 
15
  }
16
+
17
+ .wc-block-error__text,
18
+ .wc-block-error__message {
19
+ margin: 0;
 
 
 
 
 
 
 
 
 
 
 
20
  }
21
+
22
+ @include breakpoint( ">480px" ) {
23
+ .wc-block-error {
24
+ flex-direction: row;
25
+ }
26
+
27
+ .wc-block-error__image + .wc-block-error__content {
28
+ margin-left: $gap;
29
+ }
30
  }
assets/js/base/components/button/index.tsx DELETED
@@ -1,48 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { Button as WPButton } from 'wordpress-components';
5
- import type { ReactNode } from 'react';
6
- import classNames from 'classnames';
7
- import Spinner from '@woocommerce/base-components/spinner';
8
-
9
- /**
10
- * Internal dependencies
11
- */
12
- import './style.scss';
13
-
14
- interface ButtonProps extends WPButton.ButtonProps {
15
- className?: string;
16
- showSpinner?: boolean;
17
- children?: ReactNode;
18
- }
19
-
20
- /**
21
- * Component that visually renders a button but semantically might be `<button>` or `<a>` depending
22
- * on the props.
23
- */
24
- const Button = ( {
25
- className,
26
- showSpinner = false,
27
- children,
28
- ...props
29
- }: ButtonProps ): JSX.Element => {
30
- const buttonClassName = classNames(
31
- 'wc-block-components-button',
32
- className,
33
- {
34
- 'wc-block-components-button--loading': showSpinner,
35
- }
36
- );
37
-
38
- return (
39
- <WPButton className={ buttonClassName } { ...props }>
40
- { showSpinner && <Spinner /> }
41
- <span className="wc-block-components-button__text">
42
- { children }
43
- </span>
44
- </WPButton>
45
- );
46
- };
47
-
48
- export default Button;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/button/stories/index.js DELETED
@@ -1,11 +0,0 @@
1
- /**
2
- * Internal dependencies
3
- */
4
- import Button from '../';
5
-
6
- export default {
7
- title: 'WooCommerce Blocks/@base-components/Button',
8
- component: Button,
9
- };
10
-
11
- export const Default = () => <Button>Buy now</Button>;
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/button/style.scss DELETED
@@ -1,35 +0,0 @@
1
- .wc-block-components-button:not(.is-link) {
2
- @include reset-typography();
3
- align-items: center;
4
- background-color: $gray-900;
5
- color: $white;
6
- display: inline-flex;
7
- font-weight: bold;
8
- min-height: 3em;
9
- justify-content: center;
10
- line-height: 1;
11
- padding: 0 em($gap);
12
- text-align: center;
13
- text-decoration: none;
14
- text-transform: none;
15
- position: relative;
16
-
17
- &:disabled,
18
- &:hover,
19
- &:focus,
20
- &:active {
21
- background-color: $gray-900;
22
- color: $white;
23
- }
24
-
25
- .wc-block-components-button__text {
26
- display: block;
27
-
28
- > svg {
29
- fill: currentColor;
30
- }
31
- }
32
- .wc-block-components-spinner + .wc-block-components-button__text {
33
- visibility: hidden;
34
- }
35
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/address-form/address-form.tsx DELETED
@@ -1,244 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import PropTypes from 'prop-types';
5
- import { ValidatedTextInput } from '@woocommerce/base-components/text-input';
6
- import {
7
- BillingCountryInput,
8
- ShippingCountryInput,
9
- } from '@woocommerce/base-components/country-input';
10
- import {
11
- BillingStateInput,
12
- ShippingStateInput,
13
- } from '@woocommerce/base-components/state-input';
14
- import { useValidationContext } from '@woocommerce/base-context';
15
- import { useEffect, useMemo } from '@wordpress/element';
16
- import { __ } from '@wordpress/i18n';
17
- import { withInstanceId } from '@woocommerce/base-hocs/with-instance-id';
18
- import { useShallowEqual } from '@woocommerce/base-hooks';
19
- import {
20
- AddressField,
21
- AddressFields,
22
- AddressType,
23
- defaultAddressFields,
24
- EnteredAddress,
25
- } from '@woocommerce/settings';
26
-
27
- /**
28
- * Internal dependencies
29
- */
30
- import prepareAddressFields from './prepare-address-fields';
31
-
32
- // If it's the shipping address form and the user starts entering address
33
- // values without having set the country first, show an error.
34
- const validateShippingCountry = (
35
- values: EnteredAddress,
36
- setValidationErrors: ( errors: Record< string, unknown > ) => void,
37
- clearValidationError: ( error: string ) => void,
38
- hasValidationError: boolean
39
- ): void => {
40
- if (
41
- ! hasValidationError &&
42
- ! values.country &&
43
- ( values.city || values.state || values.postcode )
44
- ) {
45
- setValidationErrors( {
46
- 'shipping-missing-country': {
47
- message: __(
48
- 'Please select a country to calculate rates.',
49
- 'woo-gutenberg-products-block'
50
- ),
51
- hidden: false,
52
- },
53
- } );
54
- }
55
- if ( hasValidationError && values.country ) {
56
- clearValidationError( 'shipping-missing-country' );
57
- }
58
- };
59
-
60
- interface AddressFormProps {
61
- id: string;
62
- instanceId: string;
63
- fields: ( keyof AddressFields )[];
64
- fieldConfig: Record< keyof AddressFields, Partial< AddressField > >;
65
- onChange: ( newValue: EnteredAddress ) => void;
66
- type: AddressType;
67
- values: EnteredAddress;
68
- }
69
- /**
70
- * Checkout address form.
71
- *
72
- * @param {Object} props Incoming props for component.
73
- * @param {string} props.id Id for component.
74
- * @param {Array} props.fields Array of fields in form.
75
- * @param {Object} props.fieldConfig Field configuration for fields in form.
76
- * @param {string} props.instanceId Unique id for form.
77
- * @param {function(any):any} props.onChange Function to all for an form onChange event.
78
- * @param {string} props.type Type of form.
79
- * @param {Object} props.values Values for fields.
80
- */
81
- const AddressForm = ( {
82
- id,
83
- fields = ( Object.keys(
84
- defaultAddressFields
85
- ) as unknown ) as ( keyof AddressFields )[],
86
- fieldConfig = {} as Record< keyof AddressFields, Partial< AddressField > >,
87
- instanceId,
88
- onChange,
89
- type = 'shipping',
90
- values,
91
- }: AddressFormProps ): JSX.Element => {
92
- const {
93
- getValidationError,
94
- setValidationErrors,
95
- clearValidationError,
96
- } = useValidationContext();
97
-
98
- const currentFields = useShallowEqual( fields );
99
-
100
- const countryValidationError = ( getValidationError(
101
- 'shipping-missing-country'
102
- ) || {} ) as {
103
- message: string;
104
- hidden: boolean;
105
- };
106
-
107
- const addressFormFields = useMemo( () => {
108
- return prepareAddressFields(
109
- currentFields,
110
- fieldConfig,
111
- values.country
112
- );
113
- }, [ currentFields, fieldConfig, values.country ] );
114
-
115
- useEffect( () => {
116
- if ( type === 'shipping' ) {
117
- validateShippingCountry(
118
- values,
119
- setValidationErrors,
120
- clearValidationError,
121
- !! countryValidationError.message &&
122
- ! countryValidationError.hidden
123
- );
124
- }
125
- }, [
126
- values,
127
- countryValidationError.message,
128
- countryValidationError.hidden,
129
- setValidationErrors,
130
- clearValidationError,
131
- type,
132
- ] );
133
-
134
- id = id || instanceId;
135
-
136
- return (
137
- <div id={ id } className="wc-block-components-address-form">
138
- { addressFormFields.map( ( field ) => {
139
- if ( field.hidden ) {
140
- return null;
141
- }
142
-
143
- if ( field.key === 'country' ) {
144
- const Tag =
145
- type === 'shipping'
146
- ? ShippingCountryInput
147
- : BillingCountryInput;
148
- return (
149
- <Tag
150
- key={ field.key }
151
- id={ `${ id }-${ field.key }` }
152
- label={
153
- field.required
154
- ? field.label
155
- : field.optionalLabel
156
- }
157
- value={ values.country }
158
- autoComplete={ field.autocomplete }
159
- onChange={ ( newValue ) =>
160
- onChange( {
161
- ...values,
162
- country: newValue,
163
- state: '',
164
- city: '',
165
- postcode: '',
166
- } )
167
- }
168
- errorId={
169
- type === 'shipping'
170
- ? 'shipping-missing-country'
171
- : null
172
- }
173
- errorMessage={ field.errorMessage }
174
- required={ field.required }
175
- />
176
- );
177
- }
178
-
179
- if ( field.key === 'state' ) {
180
- const Tag =
181
- type === 'shipping'
182
- ? ShippingStateInput
183
- : BillingStateInput;
184
- return (
185
- <Tag
186
- key={ field.key }
187
- id={ `${ id }-${ field.key }` }
188
- country={ values.country }
189
- label={
190
- field.required
191
- ? field.label
192
- : field.optionalLabel
193
- }
194
- value={ values.state }
195
- autoComplete={ field.autocomplete }
196
- onChange={ ( newValue ) =>
197
- onChange( {
198
- ...values,
199
- state: newValue,
200
- } )
201
- }
202
- errorMessage={ field.errorMessage }
203
- required={ field.required }
204
- />
205
- );
206
- }
207
-
208
- return (
209
- <ValidatedTextInput
210
- key={ field.key }
211
- id={ `${ id }-${ field.key }` }
212
- className={ `wc-block-components-address-form__${ field.key }` }
213
- label={
214
- field.required ? field.label : field.optionalLabel
215
- }
216
- value={ values[ field.key ] }
217
- autoCapitalize={ field.autocapitalize }
218
- autoComplete={ field.autocomplete }
219
- onChange={ ( newValue: string ) =>
220
- onChange( {
221
- ...values,
222
- [ field.key ]: newValue,
223
- } )
224
- }
225
- errorMessage={ field.errorMessage }
226
- required={ field.required }
227
- />
228
- );
229
- } ) }
230
- </div>
231
- );
232
- };
233
-
234
- AddressForm.propTypes = {
235
- onChange: PropTypes.func.isRequired,
236
- values: PropTypes.object.isRequired,
237
- fields: PropTypes.arrayOf(
238
- PropTypes.oneOf( Object.keys( defaultAddressFields ) )
239
- ),
240
- fieldConfig: PropTypes.object,
241
- type: PropTypes.oneOf( [ 'billing', 'shipping' ] ),
242
- };
243
-
244
- export default withInstanceId( AddressForm );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/address-form/index.ts DELETED
@@ -1 +0,0 @@
1
- export { default as AddressForm } from './address-form';
 
assets/js/base/components/cart-checkout/address-form/prepare-address-fields.ts DELETED
@@ -1,131 +0,0 @@
1
- /** @typedef { import('@woocommerce/type-defs/address-fields').CountryAddressFields } CountryAddressFields */
2
-
3
- /**
4
- * External dependencies
5
- */
6
- import {
7
- AddressField,
8
- AddressFields,
9
- CountryAddressFields,
10
- defaultAddressFields,
11
- getSetting,
12
- KeyedAddressField,
13
- LocaleSpecificAddressField,
14
- } from '@woocommerce/settings';
15
- import { __, sprintf } from '@wordpress/i18n';
16
- import { isNumber, isString } from '@woocommerce/types';
17
-
18
- /**
19
- * This is locale data from WooCommerce countries class. This doesn't match the shape of the new field data blocks uses,
20
- * but we can import part of it to set which fields are required.
21
- *
22
- * This supports new properties such as optionalLabel which are not used by core (yet).
23
- */
24
- const coreLocale = getSetting< CountryAddressFields >( 'countryLocale', {} );
25
-
26
- /**
27
- * Gets props from the core locale, then maps them to the shape we require in the client.
28
- *
29
- * Ignores "class", "type", "placeholder", and "autocomplete" props from core.
30
- *
31
- * @param {Object} localeField Locale fields from WooCommerce.
32
- * @return {Object} Supported locale fields.
33
- */
34
- const getSupportedCoreLocaleProps = (
35
- localeField: LocaleSpecificAddressField
36
- ): Partial< AddressField > => {
37
- const fields: Partial< AddressField > = {};
38
-
39
- if ( localeField.label !== undefined ) {
40
- fields.label = localeField.label;
41
- }
42
-
43
- if ( localeField.required !== undefined ) {
44
- fields.required = localeField.required;
45
- }
46
-
47
- if ( localeField.hidden !== undefined ) {
48
- fields.hidden = localeField.hidden;
49
- }
50
-
51
- if ( localeField.label !== undefined && ! localeField.optionalLabel ) {
52
- fields.optionalLabel = sprintf(
53
- /* translators: %s Field label. */
54
- __( '%s (optional)', 'woo-gutenberg-products-block' ),
55
- localeField.label
56
- );
57
- }
58
-
59
- if ( localeField.priority ) {
60
- if ( isNumber( localeField.priority ) ) {
61
- fields.index = localeField.priority;
62
- }
63
- if ( isString( localeField.priority ) ) {
64
- fields.index = parseInt( localeField.priority, 10 );
65
- }
66
- }
67
-
68
- if ( localeField.hidden ) {
69
- fields.required = false;
70
- }
71
-
72
- return fields;
73
- };
74
-
75
- const countryAddressFields: CountryAddressFields = Object.entries( coreLocale )
76
- .map( ( [ country, countryLocale ] ) => [
77
- country,
78
- Object.entries( countryLocale )
79
- .map( ( [ localeFieldKey, localeField ] ) => [
80
- localeFieldKey,
81
- getSupportedCoreLocaleProps( localeField ),
82
- ] )
83
- .reduce( ( obj, [ key, val ] ) => {
84
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
85
- // @ts-ignore - Ignoring because it should be fine as long as the data from the server is correct. TS won't catch it anyway if it's not.
86
- obj[ key ] = val;
87
- return obj;
88
- }, {} ),
89
- ] )
90
- .reduce( ( obj, [ key, val ] ) => {
91
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
92
- // @ts-ignore - Ignoring because it should be fine as long as the data from the server is correct. TS won't catch it anyway if it's not.
93
- obj[ key ] = val;
94
- return obj;
95
- }, {} );
96
-
97
- /**
98
- * Combines address fields, including fields from the locale, and sorts them by index.
99
- *
100
- * @param {Array} fields List of field keys--only address fields matching these will be returned.
101
- * @param {Object} fieldConfigs Fields config contains field specific overrides at block level which may, for example, hide a field.
102
- * @param {string} addressCountry Address country code. If unknown, locale fields will not be merged.
103
- * @return {CountryAddressFields} Object containing address fields.
104
- */
105
- const prepareAddressFields = (
106
- fields: ( keyof AddressFields )[],
107
- fieldConfigs: Record< string, Partial< AddressField > >,
108
- addressCountry = ''
109
- ): KeyedAddressField[] => {
110
- const localeConfigs: AddressFields =
111
- addressCountry && countryAddressFields[ addressCountry ] !== undefined
112
- ? countryAddressFields[ addressCountry ]
113
- : ( {} as AddressFields );
114
-
115
- return fields
116
- .map( ( field ) => {
117
- const defaultConfig = defaultAddressFields[ field ] || {};
118
- const localeConfig = localeConfigs[ field ] || {};
119
- const fieldConfig = fieldConfigs[ field ] || {};
120
-
121
- return {
122
- key: field,
123
- ...defaultConfig,
124
- ...localeConfig,
125
- ...fieldConfig,
126
- };
127
- } )
128
- .sort( ( a, b ) => a.index - b.index );
129
- };
130
-
131
- export default prepareAddressFields;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/address-form/test/index.js DELETED
@@ -1,178 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { render, screen } from '@testing-library/react';
5
- import userEvent from '@testing-library/user-event';
6
- import { CheckoutProvider } from '@woocommerce/base-context';
7
- import { useCheckoutAddress } from '@woocommerce/base-context/hooks';
8
-
9
- /**
10
- * Internal dependencies
11
- */
12
- import AddressForm from '../address-form';
13
-
14
- const renderInCheckoutProvider = ( ui, options = {} ) => {
15
- const Wrapper = ( { children } ) => {
16
- return <CheckoutProvider>{ children }</CheckoutProvider>;
17
- };
18
- return render( ui, { wrapper: Wrapper, ...options } );
19
- };
20
-
21
- // Countries used in testing addresses must be in the wcSettings global.
22
- // See: tests/js/setup-globals.js
23
- const primaryAddress = {
24
- country: 'United Kingdom (UK)',
25
- countryKey: 'GB',
26
- city: 'London',
27
- state: 'Greater London',
28
- postcode: 'ABCD',
29
- };
30
- const secondaryAddress = {
31
- country: 'Austria', // We use Austria because it doesn't have states.
32
- countryKey: 'AU',
33
- city: 'Vienna',
34
- postcode: 'DCBA',
35
- };
36
- const tertiaryAddress = {
37
- country: 'Canada', // We use Canada because it has a select for the state.
38
- countryKey: 'CA',
39
- city: 'Toronto',
40
- state: 'Ontario',
41
- postcode: 'EFGH',
42
- };
43
-
44
- const countryRegExp = /country/i;
45
- const cityRegExp = /city/i;
46
- const stateRegExp = /county|province|state/i;
47
- const postalCodeRegExp = /postal code|postcode|zip/i;
48
-
49
- const inputAddress = ( {
50
- country = null,
51
- city = null,
52
- state = null,
53
- postcode = null,
54
- } ) => {
55
- if ( country ) {
56
- const countryButton = screen.getByRole( 'button', {
57
- name: countryRegExp,
58
- } );
59
- userEvent.click( countryButton );
60
- userEvent.click( screen.getByRole( 'option', { name: country } ) );
61
- }
62
- if ( city ) {
63
- const cityInput = screen.getByLabelText( cityRegExp );
64
- userEvent.type( cityInput, city );
65
- }
66
- if ( state ) {
67
- const stateButton = screen.queryByRole( 'button', {
68
- name: stateRegExp,
69
- } );
70
- // State input might be a select or a text input.
71
- if ( stateButton ) {
72
- userEvent.click( stateButton );
73
- userEvent.click( screen.getByRole( 'option', { name: state } ) );
74
- } else {
75
- const stateInput = screen.getByLabelText( stateRegExp );
76
- userEvent.type( stateInput, state );
77
- }
78
- }
79
- if ( postcode ) {
80
- const postcodeInput = screen.getByLabelText( postalCodeRegExp );
81
- userEvent.type( postcodeInput, postcode );
82
- }
83
- };
84
-
85
- describe( 'AddressForm Component', () => {
86
- const WrappedAddressForm = ( { type } ) => {
87
- const {
88
- defaultAddressFields,
89
- setShippingFields,
90
- shippingFields,
91
- } = useCheckoutAddress();
92
-
93
- return (
94
- <AddressForm
95
- type={ type }
96
- onChange={ setShippingFields }
97
- values={ shippingFields }
98
- fields={ Object.keys( defaultAddressFields ) }
99
- />
100
- );
101
- };
102
- const ShippingFields = () => {
103
- const { shippingFields } = useCheckoutAddress();
104
-
105
- return (
106
- <ul>
107
- { Object.keys( shippingFields ).map( ( key ) => (
108
- <li key={ key }>{ key + ': ' + shippingFields[ key ] }</li>
109
- ) ) }
110
- </ul>
111
- );
112
- };
113
-
114
- it( 'updates context value when interacting with form elements', () => {
115
- renderInCheckoutProvider(
116
- <>
117
- <WrappedAddressForm type="shipping" />
118
- <ShippingFields />
119
- </>
120
- );
121
-
122
- inputAddress( primaryAddress );
123
-
124
- expect( screen.getByText( /country/ ) ).toHaveTextContent(
125
- `country: ${ primaryAddress.countryKey }`
126
- );
127
- expect( screen.getByText( /city/ ) ).toHaveTextContent(
128
- `city: ${ primaryAddress.city }`
129
- );
130
- expect( screen.getByText( /state/ ) ).toHaveTextContent(
131
- `state: ${ primaryAddress.state }`
132
- );
133
- expect( screen.getByText( /postcode/ ) ).toHaveTextContent(
134
- `postcode: ${ primaryAddress.postcode }`
135
- );
136
- } );
137
-
138
- it( 'input fields update when changing the country', () => {
139
- renderInCheckoutProvider( <WrappedAddressForm type="shipping" /> );
140
-
141
- inputAddress( primaryAddress );
142
-
143
- // Verify correct labels are used.
144
- expect( screen.getByLabelText( /City/ ) ).toBeInTheDocument();
145
- expect( screen.getByLabelText( /County/ ) ).toBeInTheDocument();
146
- expect( screen.getByLabelText( /Postcode/ ) ).toBeInTheDocument();
147
-
148
- inputAddress( secondaryAddress );
149
-
150
- // Verify state input has been removed.
151
- expect( screen.queryByText( stateRegExp ) ).not.toBeInTheDocument();
152
-
153
- inputAddress( tertiaryAddress );
154
-
155
- // Verify postal code input label changed.
156
- expect( screen.getByLabelText( /Postal code/ ) ).toBeInTheDocument();
157
- } );
158
-
159
- it( 'input values are reset after changing the country', () => {
160
- renderInCheckoutProvider( <WrappedAddressForm type="shipping" /> );
161
-
162
- inputAddress( secondaryAddress );
163
- // Only update `country` to verify other values are reset.
164
- inputAddress( { country: primaryAddress.country } );
165
-
166
- expect( screen.getByLabelText( cityRegExp ).value ).toBe( '' );
167
- expect( screen.getByLabelText( stateRegExp ).value ).toBe( '' );
168
- expect( screen.getByLabelText( postalCodeRegExp ).value ).toBe( '' );
169
-
170
- // Repeat the test with an address which has a select for the state.
171
- inputAddress( tertiaryAddress );
172
- inputAddress( { country: primaryAddress.country } );
173
-
174
- expect( screen.getByLabelText( cityRegExp ).value ).toBe( '' );
175
- expect( screen.getByLabelText( stateRegExp ).value ).toBe( '' );
176
- expect( screen.getByLabelText( postalCodeRegExp ).value ).toBe( '' );
177
- } );
178
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/form-step/index.js DELETED
@@ -1,95 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classnames from 'classnames';
5
- import PropTypes from 'prop-types';
6
- import Title from '@woocommerce/base-components/title';
7
-
8
- /**
9
- * Internal dependencies
10
- */
11
- import './style.scss';
12
-
13
- const StepHeading = ( { title, stepHeadingContent } ) => (
14
- <div className="wc-block-components-checkout-step__heading">
15
- <Title
16
- aria-hidden="true"
17
- className="wc-block-components-checkout-step__title"
18
- headingLevel="2"
19
- >
20
- { title }
21
- </Title>
22
- { !! stepHeadingContent && (
23
- <span className="wc-block-components-checkout-step__heading-content">
24
- { stepHeadingContent }
25
- </span>
26
- ) }
27
- </div>
28
- );
29
-
30
- const FormStep = ( {
31
- id,
32
- className,
33
- title,
34
- legend,
35
- description,
36
- children,
37
- disabled = false,
38
- showStepNumber = true,
39
- stepHeadingContent = () => {},
40
- } ) => {
41
- // If the form step doesn't have a legend or title, render a <div> instead
42
- // of a <fieldset>.
43
- const Element = legend || title ? 'fieldset' : 'div';
44
-
45
- return (
46
- <Element
47
- className={ classnames(
48
- className,
49
- 'wc-block-components-checkout-step',
50
- {
51
- 'wc-block-components-checkout-step--with-step-number': showStepNumber,
52
- 'wc-block-components-checkout-step--disabled': disabled,
53
- }
54
- ) }
55
- id={ id }
56
- disabled={ disabled }
57
- >
58
- { !! ( legend || title ) && (
59
- <legend className="screen-reader-text">
60
- { legend || title }
61
- </legend>
62
- ) }
63
- { !! title && (
64
- <StepHeading
65
- title={ title }
66
- stepHeadingContent={ stepHeadingContent() }
67
- />
68
- ) }
69
- <div className="wc-block-components-checkout-step__container">
70
- { !! description && (
71
- <p className="wc-block-components-checkout-step__description">
72
- { description }
73
- </p>
74
- ) }
75
- <div className="wc-block-components-checkout-step__content">
76
- { children }
77
- </div>
78
- </div>
79
- </Element>
80
- );
81
- };
82
-
83
- FormStep.propTypes = {
84
- id: PropTypes.string,
85
- className: PropTypes.string,
86
- title: PropTypes.string,
87
- description: PropTypes.string,
88
- children: PropTypes.node,
89
- showStepNumber: PropTypes.bool,
90
- stepHeadingContent: PropTypes.func,
91
- disabled: PropTypes.bool,
92
- legend: PropTypes.string,
93
- };
94
-
95
- export default FormStep;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/form-step/style.scss DELETED
@@ -1,97 +0,0 @@
1
- .wc-block-components-form {
2
- counter-reset: checkout-step;
3
- }
4
-
5
- .wc-block-components-form .wc-block-components-checkout-step {
6
- position: relative;
7
- border: none;
8
- padding: 0 0 0 $gap-larger;
9
- background: none;
10
- margin: 0;
11
-
12
- .is-large & {
13
- padding-right: $gap-large;
14
- }
15
-
16
- .wc-block-components-checkout-step__heading::after {
17
- content: "";
18
- border-left: 1px solid;
19
- opacity: 0.3;
20
- position: absolute;
21
- left: -$gap-larger/2;
22
- top: 2.5em;
23
- bottom: em($gap) * -1;
24
- }
25
- }
26
-
27
- .wc-block-components-checkout-step--disabled {
28
- opacity: 0.6;
29
- }
30
-
31
- .wc-block-components-checkout-step__container {
32
- position: relative;
33
- }
34
-
35
- .wc-block-components-checkout-step__content {
36
- padding-bottom: em($gap-large);
37
- }
38
-
39
- .wc-block-components-checkout-step__heading {
40
- display: flex;
41
- justify-content: space-between;
42
- align-content: center;
43
- flex-wrap: wrap;
44
- margin: em($gap-small) 0 em($gap);
45
- position: relative;
46
- align-items: center;
47
- gap: em($gap);
48
- }
49
-
50
- .wc-block-components-checkout-step:first-child .wc-block-components-checkout-step__heading {
51
- margin-top: 0;
52
- }
53
-
54
- .wc-block-components-checkout-step__title {
55
- margin: 0 $gap-small 0 0;
56
- }
57
-
58
- .wc-block-components-checkout-step__heading-content {
59
- @include font-size(smaller);
60
-
61
- a {
62
- font-weight: bold;
63
- color: inherit;
64
- }
65
- }
66
-
67
- .wc-block-components-checkout-step__description {
68
- @include font-size(small);
69
- line-height: 1.25;
70
- margin-bottom: $gap;
71
- }
72
-
73
- .wc-block-components-checkout-step--with-step-number {
74
- .wc-block-components-checkout-step__title::before {
75
- @include reset-box();
76
- background: transparent;
77
- counter-increment: checkout-step;
78
- content: "\00a0" counter(checkout-step) ".";
79
- content: "\00a0" counter(checkout-step) "." / "";
80
- position: absolute;
81
- width: $gap-larger;
82
- left: -$gap-larger/2;
83
- top: 0;
84
- text-align: center;
85
- transform: translateX(-50%);
86
- }
87
-
88
- .wc-block-components-checkout-step__container::after {
89
- content: "";
90
- height: 100%;
91
- border-left: 1px solid;
92
- opacity: 0.3;
93
- position: absolute;
94
- left: -$gap-larger/2;
95
- top: 0;
96
- }
97
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/form-step/test/__snapshots__/index.js.snap DELETED
@@ -1,262 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`FormStep fieldset legend should default to legend prop when title and legend are defined 1`] = `
4
- <fieldset
5
- className="wc-block-components-checkout-step wc-block-components-checkout-step--with-step-number"
6
- disabled={false}
7
- >
8
- <legend
9
- className="screen-reader-text"
10
- >
11
- Lorem Ipsum 2
12
- </legend>
13
- <div
14
- className="wc-block-components-checkout-step__heading"
15
- >
16
- <h2
17
- aria-hidden="true"
18
- className="wc-block-components-title wc-block-components-checkout-step__title"
19
- >
20
- Lorem Ipsum
21
- </h2>
22
- </div>
23
- <div
24
- className="wc-block-components-checkout-step__container"
25
- >
26
- <div
27
- className="wc-block-components-checkout-step__content"
28
- >
29
- Dolor sit amet
30
- </div>
31
- </div>
32
- </fieldset>
33
- `;
34
-
35
- exports[`FormStep should apply id and className props 1`] = `
36
- <div
37
- className="my-classname wc-block-components-checkout-step wc-block-components-checkout-step--with-step-number"
38
- disabled={false}
39
- id="my-id"
40
- >
41
- <div
42
- className="wc-block-components-checkout-step__container"
43
- >
44
- <div
45
- className="wc-block-components-checkout-step__content"
46
- >
47
- Dolor sit amet
48
- </div>
49
- </div>
50
- </div>
51
- `;
52
-
53
- exports[`FormStep should remove step number CSS class if prop is false 1`] = `
54
- <fieldset
55
- className="wc-block-components-checkout-step"
56
- disabled={false}
57
- >
58
- <legend
59
- className="screen-reader-text"
60
- >
61
- Lorem Ipsum
62
- </legend>
63
- <div
64
- className="wc-block-components-checkout-step__heading"
65
- >
66
- <h2
67
- aria-hidden="true"
68
- className="wc-block-components-title wc-block-components-checkout-step__title"
69
- >
70
- Lorem Ipsum
71
- </h2>
72
- </div>
73
- <div
74
- className="wc-block-components-checkout-step__container"
75
- >
76
- <div
77
- className="wc-block-components-checkout-step__content"
78
- >
79
- Dolor sit amet
80
- </div>
81
- </div>
82
- </fieldset>
83
- `;
84
-
85
- exports[`FormStep should render a div if no title or legend is provided 1`] = `
86
- <div
87
- className="wc-block-components-checkout-step wc-block-components-checkout-step--with-step-number"
88
- disabled={false}
89
- >
90
- <div
91
- className="wc-block-components-checkout-step__container"
92
- >
93
- <div
94
- className="wc-block-components-checkout-step__content"
95
- >
96
- Dolor sit amet
97
- </div>
98
- </div>
99
- </div>
100
- `;
101
-
102
- exports[`FormStep should render a fieldset if a legend is provided 1`] = `
103
- <fieldset
104
- className="wc-block-components-checkout-step wc-block-components-checkout-step--with-step-number"
105
- disabled={false}
106
- >
107
- <legend
108
- className="screen-reader-text"
109
- >
110
- Lorem Ipsum 2
111
- </legend>
112
- <div
113
- className="wc-block-components-checkout-step__container"
114
- >
115
- <div
116
- className="wc-block-components-checkout-step__content"
117
- >
118
- Dolor sit amet
119
- </div>
120
- </div>
121
- </fieldset>
122
- `;
123
-
124
- exports[`FormStep should render a fieldset with heading if a title is provided 1`] = `
125
- <fieldset
126
- className="wc-block-components-checkout-step wc-block-components-checkout-step--with-step-number"
127
- disabled={false}
128
- >
129
- <legend
130
- className="screen-reader-text"
131
- >
132
- Lorem Ipsum
133
- </legend>
134
- <div
135
- className="wc-block-components-checkout-step__heading"
136
- >
137
- <h2
138
- aria-hidden="true"
139
- className="wc-block-components-title wc-block-components-checkout-step__title"
140
- >
141
- Lorem Ipsum
142
- </h2>
143
- </div>
144
- <div
145
- className="wc-block-components-checkout-step__container"
146
- >
147
- <div
148
- className="wc-block-components-checkout-step__content"
149
- >
150
- Dolor sit amet
151
- </div>
152
- </div>
153
- </fieldset>
154
- `;
155
-
156
- exports[`FormStep should render step description 1`] = `
157
- <fieldset
158
- className="wc-block-components-checkout-step wc-block-components-checkout-step--with-step-number"
159
- disabled={false}
160
- >
161
- <legend
162
- className="screen-reader-text"
163
- >
164
- Lorem Ipsum
165
- </legend>
166
- <div
167
- className="wc-block-components-checkout-step__heading"
168
- >
169
- <h2
170
- aria-hidden="true"
171
- className="wc-block-components-title wc-block-components-checkout-step__title"
172
- >
173
- Lorem Ipsum
174
- </h2>
175
- </div>
176
- <div
177
- className="wc-block-components-checkout-step__container"
178
- >
179
- <p
180
- className="wc-block-components-checkout-step__description"
181
- >
182
- This is the description
183
- </p>
184
- <div
185
- className="wc-block-components-checkout-step__content"
186
- >
187
- Dolor sit amet
188
- </div>
189
- </div>
190
- </fieldset>
191
- `;
192
-
193
- exports[`FormStep should render step heading content 1`] = `
194
- <fieldset
195
- className="wc-block-components-checkout-step wc-block-components-checkout-step--with-step-number"
196
- disabled={false}
197
- >
198
- <legend
199
- className="screen-reader-text"
200
- >
201
- Lorem Ipsum
202
- </legend>
203
- <div
204
- className="wc-block-components-checkout-step__heading"
205
- >
206
- <h2
207
- aria-hidden="true"
208
- className="wc-block-components-title wc-block-components-checkout-step__title"
209
- >
210
- Lorem Ipsum
211
- </h2>
212
- <span
213
- className="wc-block-components-checkout-step__heading-content"
214
- >
215
- <span>
216
- Some context to render next to the heading
217
- </span>
218
- </span>
219
- </div>
220
- <div
221
- className="wc-block-components-checkout-step__container"
222
- >
223
- <div
224
- className="wc-block-components-checkout-step__content"
225
- >
226
- Dolor sit amet
227
- </div>
228
- </div>
229
- </fieldset>
230
- `;
231
-
232
- exports[`FormStep should set disabled prop to the fieldset element when disabled is true 1`] = `
233
- <fieldset
234
- className="wc-block-components-checkout-step wc-block-components-checkout-step--with-step-number wc-block-components-checkout-step--disabled"
235
- disabled={true}
236
- >
237
- <legend
238
- className="screen-reader-text"
239
- >
240
- Lorem Ipsum
241
- </legend>
242
- <div
243
- className="wc-block-components-checkout-step__heading"
244
- >
245
- <h2
246
- aria-hidden="true"
247
- className="wc-block-components-title wc-block-components-checkout-step__title"
248
- >
249
- Lorem Ipsum
250
- </h2>
251
- </div>
252
- <div
253
- className="wc-block-components-checkout-step__container"
254
- >
255
- <div
256
- className="wc-block-components-checkout-step__content"
257
- >
258
- Dolor sit amet
259
- </div>
260
- </div>
261
- </fieldset>
262
- `;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/form-step/test/index.js DELETED
@@ -1,100 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import TestRenderer from 'react-test-renderer';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import FormStep from '..';
10
-
11
- describe( 'FormStep', () => {
12
- test( 'should render a div if no title or legend is provided', () => {
13
- const component = TestRenderer.create(
14
- <FormStep>Dolor sit amet</FormStep>
15
- );
16
-
17
- expect( component.toJSON() ).toMatchSnapshot();
18
- } );
19
-
20
- test( 'should apply id and className props', () => {
21
- const component = TestRenderer.create(
22
- <FormStep id="my-id" className="my-classname">
23
- Dolor sit amet
24
- </FormStep>
25
- );
26
-
27
- expect( component.toJSON() ).toMatchSnapshot();
28
- } );
29
-
30
- test( 'should render a fieldset if a legend is provided', () => {
31
- const component = TestRenderer.create(
32
- <FormStep legend="Lorem Ipsum 2">Dolor sit amet</FormStep>
33
- );
34
-
35
- expect( component.toJSON() ).toMatchSnapshot();
36
- } );
37
-
38
- test( 'should render a fieldset with heading if a title is provided', () => {
39
- const component = TestRenderer.create(
40
- <FormStep title="Lorem Ipsum">Dolor sit amet</FormStep>
41
- );
42
-
43
- expect( component.toJSON() ).toMatchSnapshot();
44
- } );
45
-
46
- test( 'fieldset legend should default to legend prop when title and legend are defined', () => {
47
- const component = TestRenderer.create(
48
- <FormStep title="Lorem Ipsum" legend="Lorem Ipsum 2">
49
- Dolor sit amet
50
- </FormStep>
51
- );
52
-
53
- expect( component.toJSON() ).toMatchSnapshot();
54
- } );
55
-
56
- test( 'should remove step number CSS class if prop is false', () => {
57
- const component = TestRenderer.create(
58
- <FormStep title="Lorem Ipsum" showStepNumber={ false }>
59
- Dolor sit amet
60
- </FormStep>
61
- );
62
-
63
- expect( component.toJSON() ).toMatchSnapshot();
64
- } );
65
-
66
- test( 'should render step heading content', () => {
67
- const component = TestRenderer.create(
68
- <FormStep
69
- title="Lorem Ipsum"
70
- stepHeadingContent={ () => (
71
- <span>Some context to render next to the heading</span>
72
- ) }
73
- >
74
- Dolor sit amet
75
- </FormStep>
76
- );
77
-
78
- expect( component.toJSON() ).toMatchSnapshot();
79
- } );
80
-
81
- test( 'should render step description', () => {
82
- const component = TestRenderer.create(
83
- <FormStep title="Lorem Ipsum" description="This is the description">
84
- Dolor sit amet
85
- </FormStep>
86
- );
87
-
88
- expect( component.toJSON() ).toMatchSnapshot();
89
- } );
90
-
91
- test( 'should set disabled prop to the fieldset element when disabled is true', () => {
92
- const component = TestRenderer.create(
93
- <FormStep title="Lorem Ipsum" disabled={ true }>
94
- Dolor sit amet
95
- </FormStep>
96
- );
97
-
98
- expect( component.toJSON() ).toMatchSnapshot();
99
- } );
100
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/index.js DELETED
@@ -1,20 +0,0 @@
1
- export * from './address-form';
2
- export { default as FormStep } from './form-step';
3
- export { default as OrderSummary } from './order-summary';
4
- export { default as PlaceOrderButton } from './place-order-button';
5
- export { default as Policies } from './policies';
6
- export { default as ProductBackorderBadge } from './product-backorder-badge';
7
- export { default as ProductDetails } from './product-details';
8
- export { default as ProductImage } from './product-image';
9
- export { default as ProductLowStockBadge } from './product-low-stock-badge';
10
- export { default as ProductSummary } from './product-summary';
11
- export { default as ProductMetadata } from './product-metadata';
12
- export { default as ProductSaleBadge } from './product-sale-badge';
13
- export { default as ReturnToCartButton } from './return-to-cart-button';
14
- export { default as ShippingCalculator } from './shipping-calculator';
15
- export { default as ShippingLocation } from './shipping-location';
16
- export { default as ShippingRatesControl } from './shipping-rates-control';
17
- export { default as ShippingRatesControlPackage } from './shipping-rates-control-package';
18
- export { default as PaymentMethodIcons } from './payment-method-icons';
19
- export { default as PaymentMethodLabel } from './payment-method-label';
20
- export * from './totals';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/order-summary/index.js DELETED
@@ -1,54 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import PropTypes from 'prop-types';
6
- import { useContainerWidthContext } from '@woocommerce/base-context';
7
- import { Panel } from '@woocommerce/blocks-checkout';
8
-
9
- /**
10
- * Internal dependencies
11
- */
12
- import OrderSummaryItem from './order-summary-item.js';
13
- import './style.scss';
14
-
15
- const OrderSummary = ( { cartItems = [] } ) => {
16
- const { isLarge, hasContainerWidth } = useContainerWidthContext();
17
-
18
- if ( ! hasContainerWidth ) {
19
- return null;
20
- }
21
-
22
- return (
23
- <Panel
24
- className="wc-block-components-order-summary"
25
- initialOpen={ isLarge }
26
- hasBorder={ false }
27
- title={
28
- <span className="wc-block-components-order-summary__button-text">
29
- { __( 'Order summary', 'woo-gutenberg-products-block' ) }
30
- </span>
31
- }
32
- titleTag="h2"
33
- >
34
- <div className="wc-block-components-order-summary__content">
35
- { cartItems.map( ( cartItem ) => {
36
- return (
37
- <OrderSummaryItem
38
- key={ cartItem.key }
39
- cartItem={ cartItem }
40
- />
41
- );
42
- } ) }
43
- </div>
44
- </Panel>
45
- );
46
- };
47
-
48
- OrderSummary.propTypes = {
49
- cartItems: PropTypes.arrayOf(
50
- PropTypes.shape( { key: PropTypes.string.isRequired } )
51
- ),
52
- };
53
-
54
- export default OrderSummary;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/order-summary/order-summary-item.js DELETED
@@ -1,184 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __, sprintf } from '@wordpress/i18n';
5
- import Label from '@woocommerce/base-components/label';
6
- import ProductPrice from '@woocommerce/base-components/product-price';
7
- import ProductName from '@woocommerce/base-components/product-name';
8
- import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
9
- import {
10
- __experimentalApplyCheckoutFilter,
11
- mustContain,
12
- } from '@woocommerce/blocks-checkout';
13
- import PropTypes from 'prop-types';
14
- import Dinero from 'dinero.js';
15
- import { getSetting } from '@woocommerce/settings';
16
- import { useCallback, useMemo } from '@wordpress/element';
17
- import { useStoreCart } from '@woocommerce/base-context/hooks';
18
-
19
- /**
20
- * Internal dependencies
21
- */
22
- import ProductBackorderBadge from '../product-backorder-badge';
23
- import ProductImage from '../product-image';
24
- import ProductLowStockBadge from '../product-low-stock-badge';
25
- import ProductMetadata from '../product-metadata';
26
-
27
- const OrderSummaryItem = ( { cartItem } ) => {
28
- const {
29
- images,
30
- low_stock_remaining: lowStockRemaining = null,
31
- show_backorder_badge: showBackorderBadge = false,
32
- name: initialName,
33
- permalink,
34
- prices,
35
- quantity,
36
- short_description: shortDescription,
37
- description: fullDescription,
38
- item_data: itemData = [],
39
- variation,
40
- totals,
41
- extensions = {},
42
- } = cartItem;
43
-
44
- // Prepare props to pass to the __experimentalApplyCheckoutFilter filter.
45
- // We need to pluck out receiveCart.
46
- // eslint-disable-next-line no-unused-vars
47
- const { receiveCart, ...cart } = useStoreCart();
48
-
49
- const productPriceValidation = useCallback(
50
- ( value ) => mustContain( value, '<price/>' ),
51
- []
52
- );
53
-
54
- const arg = useMemo(
55
- () => ( {
56
- context: 'summary',
57
- cartItem,
58
- cart,
59
- } ),
60
- [ cartItem, cart ]
61
- );
62
-
63
- const priceCurrency = getCurrencyFromPriceResponse( prices );
64
-
65
- const name = __experimentalApplyCheckoutFilter( {
66
- filterName: 'itemName',
67
- defaultValue: initialName,
68
- extensions,
69
- arg,
70
- } );
71
-
72
- const regularPriceSingle = Dinero( {
73
- amount: parseInt( prices.raw_prices.regular_price, 10 ),
74
- precision: parseInt( prices.raw_prices.precision, 10 ),
75
- } )
76
- .convertPrecision( priceCurrency.minorUnit )
77
- .getAmount();
78
- const priceSingle = Dinero( {
79
- amount: parseInt( prices.raw_prices.price, 10 ),
80
- precision: parseInt( prices.raw_prices.precision, 10 ),
81
- } )
82
- .convertPrecision( priceCurrency.minorUnit )
83
- .getAmount();
84
- const totalsCurrency = getCurrencyFromPriceResponse( totals );
85
-
86
- let lineSubtotal = parseInt( totals.line_subtotal, 10 );
87
- if ( getSetting( 'displayCartPricesIncludingTax', false ) ) {
88
- lineSubtotal += parseInt( totals.line_subtotal_tax, 10 );
89
- }
90
- const subtotalPrice = Dinero( {
91
- amount: lineSubtotal,
92
- precision: totalsCurrency.minorUnit,
93
- } ).getAmount();
94
- const subtotalPriceFormat = __experimentalApplyCheckoutFilter( {
95
- filterName: 'subtotalPriceFormat',
96
- defaultValue: '<price/>',
97
- extensions,
98
- arg,
99
- validation: productPriceValidation,
100
- } );
101
-
102
- // Allow extensions to filter how the price is displayed. Ie: prepending or appending some values.
103
- const productPriceFormat = __experimentalApplyCheckoutFilter( {
104
- filterName: 'cartItemPrice',
105
- defaultValue: '<price/>',
106
- extensions,
107
- arg,
108
- validation: productPriceValidation,
109
- } );
110
-
111
- return (
112
- <div className="wc-block-components-order-summary-item">
113
- <div className="wc-block-components-order-summary-item__image">
114
- <div className="wc-block-components-order-summary-item__quantity">
115
- <Label
116
- label={ quantity }
117
- screenReaderLabel={ sprintf(
118
- /* translators: %d number of products of the same type in the cart */
119
- __( '%d items', 'woo-gutenberg-products-block' ),
120
- quantity
121
- ) }
122
- />
123
- </div>
124
- <ProductImage image={ images.length ? images[ 0 ] : {} } />
125
- </div>
126
- <div className="wc-block-components-order-summary-item__description">
127
- <ProductName
128
- disabled={ true }
129
- name={ name }
130
- permalink={ permalink }
131
- />
132
- <ProductPrice
133
- currency={ priceCurrency }
134
- price={ priceSingle }
135
- regularPrice={ regularPriceSingle }
136
- className="wc-block-components-order-summary-item__individual-prices"
137
- priceClassName="wc-block-components-order-summary-item__individual-price"
138
- regularPriceClassName="wc-block-components-order-summary-item__regular-individual-price"
139
- format={ subtotalPriceFormat }
140
- />
141
- { showBackorderBadge ? (
142
- <ProductBackorderBadge />
143
- ) : (
144
- !! lowStockRemaining && (
145
- <ProductLowStockBadge
146
- lowStockRemaining={ lowStockRemaining }
147
- />
148
- )
149
- ) }
150
- <ProductMetadata
151
- shortDescription={ shortDescription }
152
- fullDescription={ fullDescription }
153
- itemData={ itemData }
154
- variation={ variation }
155
- />
156
- </div>
157
- <div className="wc-block-components-order-summary-item__total-price">
158
- <ProductPrice
159
- currency={ totalsCurrency }
160
- format={ productPriceFormat }
161
- price={ subtotalPrice }
162
- />
163
- </div>
164
- </div>
165
- );
166
- };
167
-
168
- OrderSummaryItem.propTypes = {
169
- cartItems: PropTypes.shape( {
170
- images: PropTypes.array,
171
- low_stock_remaining: PropTypes.number,
172
- name: PropTypes.string.isRequired,
173
- permalink: PropTypes.string,
174
- prices: PropTypes.shape( {
175
- price: PropTypes.string,
176
- regular_price: PropTypes.string,
177
- } ),
178
- quantity: PropTypes.number,
179
- summary: PropTypes.string,
180
- variation: PropTypes.array,
181
- } ),
182
- };
183
-
184
- export default OrderSummaryItem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/order-summary/style.scss DELETED
@@ -1,104 +0,0 @@
1
- .wc-block-components-order-summary {
2
-
3
- .wc-block-components-panel__button {
4
- padding-top: 0;
5
- margin-top: 0;
6
- }
7
-
8
- .wc-block-components-panel__content {
9
- margin-bottom: 0;
10
- }
11
- }
12
-
13
- .wc-block-components-order-summary__content {
14
- display: table;
15
- width: 100%;
16
- }
17
-
18
- .wc-block-components-order-summary-item {
19
- @include with-translucent-border(0 0 1px);
20
- @include font-size(small);
21
- display: flex;
22
- padding-bottom: 1px;
23
- padding-top: $gap;
24
- width: 100%;
25
-
26
- &:first-child {
27
- padding-top: 0;
28
- }
29
-
30
- &:last-child {
31
- > div {
32
- padding-bottom: 0;
33
- }
34
-
35
- &::after {
36
- display: none;
37
- }
38
- }
39
-
40
- .wc-block-components-product-metadata {
41
- @include font-size(regular);
42
- }
43
- }
44
-
45
- .wc-block-components-order-summary-item__image,
46
- .wc-block-components-order-summary-item__description {
47
- display: table-cell;
48
- vertical-align: top;
49
- }
50
-
51
- .wc-block-components-order-summary-item__image {
52
- width: #{$gap-large * 2};
53
- padding-bottom: $gap;
54
- position: relative;
55
-
56
- > img {
57
- width: #{$gap-large * 2};
58
- max-width: #{$gap-large * 2};
59
- }
60
- }
61
-
62
- .wc-block-components-order-summary-item__quantity {
63
- align-items: center;
64
- background: #fff;
65
- border: 2px solid;
66
- border-radius: 1em;
67
- box-shadow: 0 0 0 2px #fff;
68
- color: #000;
69
- display: flex;
70
- line-height: 1;
71
- min-height: 20px;
72
- padding: 0 0.4em;
73
- position: absolute;
74
- justify-content: center;
75
- min-width: 20px;
76
- right: 0;
77
- top: 0;
78
- transform: translate(50%, -50%);
79
- white-space: nowrap;
80
- z-index: 1;
81
- }
82
-
83
- .wc-block-components-order-summary-item__description {
84
- padding-left: $gap-large;
85
- padding-right: $gap-small;
86
- padding-bottom: $gap;
87
-
88
- p,
89
- .wc-block-components-product-metadata {
90
- line-height: 1.375;
91
- margin-top: #{ ( $gap-large - $gap ) / 2 };
92
- }
93
- }
94
-
95
- .wc-block-components-order-summary-item__total-price {
96
- font-weight: bold;
97
- margin-left: auto;
98
- text-align: right;
99
- }
100
-
101
-
102
- .wc-block-components-order-summary-item__individual-prices {
103
- display: block;
104
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/order-summary/test/index.js DELETED
@@ -1,43 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { render, screen } from '@testing-library/react';
5
- import { previewCart } from '@woocommerce/resource-previews';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import OrderSummary from '../index';
11
-
12
- jest.mock( '@woocommerce/base-context', () => ( {
13
- ...jest.requireActual( '@woocommerce/base-context' ),
14
- useContainerWidthContext: () => ( {
15
- isLarge: false,
16
- hasContainerWidth: true,
17
- } ),
18
- } ) );
19
-
20
- describe( 'Order Summary', () => {
21
- it( 'renders correct cart line subtotal when currency has 0 decimals', async () => {
22
- render(
23
- <OrderSummary
24
- cartItems={ [
25
- {
26
- ...previewCart.items[ 0 ],
27
- totals: {
28
- ...previewCart.items[ 0 ].totals,
29
- // Change price format so there are no decimals.
30
- currency_minor_unit: 0,
31
- currency_prefix: '',
32
- currency_suffix: '€',
33
- line_subtotal: '16',
34
- line_total: '18',
35
- },
36
- },
37
- ] }
38
- />
39
- );
40
-
41
- expect( screen.getByText( '16€' ) ).toBeTruthy();
42
- } );
43
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/payment-method-icons/common-icons.js DELETED
@@ -1,118 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { WC_BLOCKS_IMAGE_URL } from '@woocommerce/block-settings';
5
-
6
- /**
7
- * Array of common assets.
8
- */
9
- export const commonIcons = [
10
- {
11
- id: 'alipay',
12
- alt: 'Alipay',
13
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/alipay.svg',
14
- },
15
- {
16
- id: 'amex',
17
- alt: 'American Express',
18
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/amex.svg',
19
- },
20
- {
21
- id: 'bancontact',
22
- alt: 'Bancontact',
23
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/bancontact.svg',
24
- },
25
- {
26
- id: 'diners',
27
- alt: 'Diners Club',
28
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/diners.svg',
29
- },
30
- {
31
- id: 'discover',
32
- alt: 'Discover',
33
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/discover.svg',
34
- },
35
- {
36
- id: 'eps',
37
- alt: 'EPS',
38
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/eps.svg',
39
- },
40
- {
41
- id: 'giropay',
42
- alt: 'Giropay',
43
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/giropay.svg',
44
- },
45
- {
46
- id: 'ideal',
47
- alt: 'iDeal',
48
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/ideal.svg',
49
- },
50
- {
51
- id: 'jcb',
52
- alt: 'JCB',
53
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/jcb.svg',
54
- },
55
- {
56
- id: 'laser',
57
- alt: 'Laser',
58
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/laser.svg',
59
- },
60
- {
61
- id: 'maestro',
62
- alt: 'Maestro',
63
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/maestro.svg',
64
- },
65
- {
66
- id: 'mastercard',
67
- alt: 'Mastercard',
68
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/mastercard.svg',
69
- },
70
- {
71
- id: 'multibanco',
72
- alt: 'Multibanco',
73
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/multibanco.svg',
74
- },
75
- {
76
- id: 'p24',
77
- alt: 'Przelewy24',
78
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/p24.svg',
79
- },
80
- {
81
- id: 'sepa',
82
- alt: 'Sepa',
83
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/sepa.svg',
84
- },
85
- {
86
- id: 'sofort',
87
- alt: 'Sofort',
88
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/sofort.svg',
89
- },
90
- {
91
- id: 'unionpay',
92
- alt: 'Union Pay',
93
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/unionpay.svg',
94
- },
95
- {
96
- id: 'visa',
97
- alt: 'Visa',
98
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/visa.svg',
99
- },
100
- {
101
- id: 'wechat',
102
- alt: 'WeChat',
103
- src: WC_BLOCKS_IMAGE_URL + 'payment-methods/wechat.svg',
104
- },
105
- ];
106
-
107
- /**
108
- * For a given ID, see if a common icon exists and return it's props.
109
- *
110
- * @param {string} id Icon ID.
111
- */
112
- export const getCommonIconProps = ( id ) => {
113
- return (
114
- commonIcons.find( ( icon ) => {
115
- return icon.id === id;
116
- } ) || {}
117
- );
118
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/payment-method-icons/index.js DELETED
@@ -1,57 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classnames from 'classnames';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import PaymentMethodIcon from './payment-method-icon';
10
- import { getCommonIconProps } from './common-icons';
11
- import { normalizeIconConfig } from './utils';
12
- import './style.scss';
13
-
14
- /**
15
- * For a given list of icons, render each as a list item, using common icons
16
- * where available.
17
- *
18
- * @param {Object} props Component props.
19
- * @param {Array} props.icons Array of icons object configs or ids as strings.
20
- * @param {string} props.align How to align the icon.
21
- */
22
- export const PaymentMethodIcons = ( { icons = [], align = 'center' } ) => {
23
- const iconConfigs = normalizeIconConfig( icons );
24
-
25
- if ( iconConfigs.length === 0 ) {
26
- return null;
27
- }
28
-
29
- const containerClass = classnames(
30
- 'wc-block-components-payment-method-icons',
31
- {
32
- 'wc-block-components-payment-method-icons--align-left':
33
- align === 'left',
34
- 'wc-block-components-payment-method-icons--align-right':
35
- align === 'right',
36
- }
37
- );
38
-
39
- return (
40
- <div className={ containerClass }>
41
- { iconConfigs.map( ( icon ) => {
42
- const iconProps = {
43
- ...icon,
44
- ...getCommonIconProps( icon.id ),
45
- };
46
- return (
47
- <PaymentMethodIcon
48
- key={ 'payment-method-icon-' + icon.id }
49
- { ...iconProps }
50
- />
51
- );
52
- } ) }
53
- </div>
54
- );
55
- };
56
-
57
- export default PaymentMethodIcons;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/payment-method-icons/payment-method-icon.js DELETED
@@ -1,25 +0,0 @@
1
- /**
2
- * Get a class name for an icon.
3
- *
4
- * @param {string} id Icon ID.
5
- */
6
- const getIconClassName = ( id ) => {
7
- return `wc-block-components-payment-method-icon wc-block-components-payment-method-icon--${ id }`;
8
- };
9
-
10
- /**
11
- * Return an element for an icon.
12
- *
13
- * @param {Object} props Incoming props for component.
14
- * @param {string} props.id Id for component.
15
- * @param {string|null} props.src Optional src value for icon.
16
- * @param {string} props.alt Optional alt value for icon.
17
- */
18
- const PaymentMethodIcon = ( { id, src = null, alt = '' } ) => {
19
- if ( ! src ) {
20
- return null;
21
- }
22
- return <img className={ getIconClassName( id ) } src={ src } alt={ alt } />;
23
- };
24
-
25
- export default PaymentMethodIcon;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/payment-method-icons/style.scss DELETED
@@ -1,45 +0,0 @@
1
- .wc-block-components-payment-method-icons {
2
- display: block;
3
- text-align: center;
4
- margin: 0 0 #{$gap - 2px};
5
-
6
- .wc-block-components-payment-method-icon {
7
- display: inline-block;
8
- margin: 0 4px 2px;
9
- padding: 0;
10
- width: auto;
11
- height: 24px;
12
- vertical-align: middle;
13
- }
14
-
15
- &--align-left {
16
- text-align: left;
17
-
18
- .wc-block-components-payment-method-icon {
19
- margin-left: 0;
20
- margin-right: 8px;
21
- }
22
- }
23
-
24
- &--align-right {
25
- text-align: right;
26
-
27
- .wc-block-components-payment-method-icon {
28
- margin-right: 0;
29
- margin-left: 8px;
30
- }
31
- }
32
-
33
- &:last-child {
34
- margin-bottom: 0;
35
- }
36
- }
37
-
38
- .is-mobile,
39
- .is-small {
40
- .wc-block-components-payment-method-icons {
41
- .wc-block-components-payment-method-icon {
42
- height: 16px;
43
- }
44
- }
45
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/payment-method-icons/utils.js DELETED
@@ -1,34 +0,0 @@
1
- /**
2
- * For an array of icons, normalize into objects and remove duplicates.
3
- *
4
- * @param {Array} icons Array of icon objects or string based ids.
5
- */
6
- export const normalizeIconConfig = ( icons ) => {
7
- const normalizedIcons = {};
8
-
9
- icons.forEach( ( raw ) => {
10
- let icon = {};
11
-
12
- if ( typeof raw === 'string' ) {
13
- icon = {
14
- id: raw,
15
- alt: raw,
16
- src: null,
17
- };
18
- }
19
-
20
- if ( typeof raw === 'object' ) {
21
- icon = {
22
- id: raw.id || '',
23
- alt: raw.alt || '',
24
- src: raw.src || null,
25
- };
26
- }
27
-
28
- if ( icon.id && ! normalizedIcons[ icon.id ] ) {
29
- normalizedIcons[ icon.id ] = icon;
30
- }
31
- } );
32
-
33
- return Object.values( normalizedIcons );
34
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/payment-method-label/index.js DELETED
@@ -1,44 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classnames from 'classnames';
5
- import { Icon, bank, bill, card, checkPayment } from '@woocommerce/icons';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import './style.scss';
11
-
12
- const namedIcons = {
13
- bank,
14
- bill,
15
- card,
16
- checkPayment,
17
- };
18
-
19
- /**
20
- * Exposed to payment methods for the label shown on checkout. Allows icons to be added as well as
21
- * text.
22
- *
23
- * @param {Object} props Component props.
24
- * @param {*} props.icon Show an icon beside the text if provided. Can be a string to use a named
25
- * icon, or an SVG element.
26
- * @param {string} props.text Text shown next to icon.
27
- */
28
- export const PaymentMethodLabel = ( { icon = '', text = '' } ) => {
29
- const hasIcon = !! icon;
30
- const hasNamedIcon =
31
- hasIcon && typeof icon === 'string' && namedIcons[ icon ];
32
- const className = classnames( 'wc-block-components-payment-method-label', {
33
- 'wc-block-components-payment-method-label--with-icon': hasIcon,
34
- } );
35
-
36
- return (
37
- <span className={ className }>
38
- { hasNamedIcon ? <Icon srcElement={ namedIcons[ icon ] } /> : icon }
39
- { text }
40
- </span>
41
- );
42
- };
43
-
44
- export default PaymentMethodLabel;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/payment-method-label/style.scss DELETED
@@ -1,19 +0,0 @@
1
- .wc-block-components-payment-method-label--with-icon {
2
- display: inline-block;
3
- vertical-align: middle;
4
- > img,
5
- > svg {
6
- vertical-align: middle;
7
- margin: -2px 4px 0 0;
8
- }
9
- }
10
-
11
- .is-mobile,
12
- .is-small {
13
- .wc-block-components-payment-method-label--with-icon {
14
- > img,
15
- > svg {
16
- display: none;
17
- }
18
- }
19
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/place-order-button/index.js DELETED
@@ -1,43 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { useCheckoutSubmit } from '@woocommerce/base-context/hooks';
6
- import { Icon, done } from '@woocommerce/icons';
7
- import Button from '@woocommerce/base-components/button';
8
-
9
- const PlaceOrderButton = () => {
10
- const {
11
- submitButtonText,
12
- onSubmit,
13
- isCalculating,
14
- isDisabled,
15
- waitingForProcessing,
16
- waitingForRedirect,
17
- } = useCheckoutSubmit();
18
-
19
- return (
20
- <Button
21
- className="wc-block-components-checkout-place-order-button"
22
- onClick={ onSubmit }
23
- disabled={
24
- isCalculating ||
25
- isDisabled ||
26
- waitingForProcessing ||
27
- waitingForRedirect
28
- }
29
- showSpinner={ waitingForProcessing }
30
- >
31
- { waitingForRedirect ? (
32
- <Icon
33
- srcElement={ done }
34
- alt={ __( 'Done', 'woo-gutenberg-products-block' ) }
35
- />
36
- ) : (
37
- submitButtonText
38
- ) }
39
- </Button>
40
- );
41
- };
42
-
43
- export default PlaceOrderButton;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/policies/index.tsx DELETED
@@ -1,57 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import {
6
- PRIVACY_URL,
7
- TERMS_URL,
8
- PRIVACY_PAGE_NAME,
9
- TERMS_PAGE_NAME,
10
- } from '@woocommerce/block-settings';
11
- import { decodeEntities } from '@wordpress/html-entities';
12
-
13
- /**
14
- * Internal dependencies
15
- */
16
- import './style.scss';
17
-
18
- const Policies = (): JSX.Element => {
19
- return (
20
- <ul className="wc-block-components-checkout-policies">
21
- { PRIVACY_URL && (
22
- <li className="wc-block-components-checkout-policies__item">
23
- <a
24
- href={ PRIVACY_URL }
25
- target="_blank"
26
- rel="noopener noreferrer"
27
- >
28
- { PRIVACY_PAGE_NAME
29
- ? decodeEntities( PRIVACY_PAGE_NAME )
30
- : __(
31
- 'Privacy Policy',
32
- 'woo-gutenberg-products-block'
33
- ) }
34
- </a>
35
- </li>
36
- ) }
37
- { TERMS_URL && (
38
- <li className="wc-block-components-checkout-policies__item">
39
- <a
40
- href={ TERMS_URL }
41
- target="_blank"
42
- rel="noopener noreferrer"
43
- >
44
- { TERMS_PAGE_NAME
45
- ? decodeEntities( TERMS_PAGE_NAME )
46
- : __(
47
- 'Terms and Conditions',
48
- 'woo-gutenberg-products-block'
49
- ) }
50
- </a>
51
- </li>
52
- ) }
53
- </ul>
54
- );
55
- };
56
-
57
- export default Policies;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/policies/style.scss DELETED
@@ -1,24 +0,0 @@
1
- .editor-styles-wrapper .wc-block-components-checkout-policies,
2
- .wc-block-components-checkout-policies {
3
- @include font-size(smaller);
4
- text-align: center;
5
- list-style: none outside;
6
- line-height: 1;
7
- margin: $gap-large 0;
8
- }
9
-
10
- .wc-block-components-checkout-policies__item {
11
- list-style: none outside;
12
- display: inline-block;
13
- padding: 0 0.25em;
14
- margin: 0;
15
-
16
- &:not(:first-child) {
17
- border-left: 1px solid $gray-400;
18
- }
19
-
20
- > a {
21
- color: inherit;
22
- padding: 0 0.25em;
23
- }
24
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/product-backorder-badge/index.tsx DELETED
@@ -1,22 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import ProductBadge from '../product-badge';
10
-
11
- /**
12
- * Returns a backorder badge.
13
- */
14
- const ProductBackorderBadge = (): JSX.Element => {
15
- return (
16
- <ProductBadge className="wc-block-components-product-backorder-badge">
17
- { __( 'Available on backorder', 'woo-gutenberg-products-block' ) }
18
- </ProductBadge>
19
- );
20
- };
21
-
22
- export default ProductBackorderBadge;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/product-badge/index.tsx DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classNames from 'classnames';
5
- import type { ReactNode } from 'react';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import './style.scss';
11
-
12
- interface ProductBadgeProps {
13
- children?: ReactNode;
14
- className?: string;
15
- }
16
- const ProductBadge = ( {
17
- children,
18
- className,
19
- }: ProductBadgeProps ): JSX.Element => {
20
- return (
21
- <div
22
- className={ classNames(
23
- 'wc-block-components-product-badge',
24
- className
25
- ) }
26
- >
27
- { children }
28
- </div>
29
- );
30
- };
31
-
32
- export default ProductBadge;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/product-badge/style.scss DELETED
@@ -1,10 +0,0 @@
1
- .wc-block-components-product-badge {
2
- @include font-size(smaller);
3
- border-radius: 2px;
4
- border: 1px solid;
5
- display: inline-block;
6
- font-weight: 600;
7
- padding: 0 0.66em;
8
- text-transform: uppercase;
9
- white-space: nowrap;
10
- }
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/product-details/index.tsx DELETED
@@ -1,60 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { kebabCase } from 'lodash';
5
- import { decodeEntities } from '@wordpress/html-entities';
6
- import type { ProductResponseItemData } from '@woocommerce/type-defs/product-response';
7
-
8
- /**
9
- * Internal dependencies
10
- */
11
- import './style.scss';
12
-
13
- interface ProductDetailsProps {
14
- details: ProductResponseItemData[];
15
- }
16
- // Component to display cart item data and variations.
17
- const ProductDetails = ( {
18
- details = [],
19
- }: ProductDetailsProps ): JSX.Element | null => {
20
- if ( ! Array.isArray( details ) ) {
21
- return null;
22
- }
23
-
24
- details = details.filter( ( detail ) => ! detail.hidden );
25
-
26
- if ( details.length === 0 ) {
27
- return null;
28
- }
29
-
30
- return (
31
- <ul className="wc-block-components-product-details">
32
- { details.map( ( detail ) => {
33
- const className = detail.name
34
- ? `wc-block-components-product-details__${ kebabCase(
35
- detail.name
36
- ) }`
37
- : '';
38
- return (
39
- <li
40
- key={ detail.name + ( detail.display || detail.value ) }
41
- className={ className }
42
- >
43
- { detail.name && (
44
- <>
45
- <span className="wc-block-components-product-details__name">
46
- { decodeEntities( detail.name ) }:
47
- </span>{ ' ' }
48
- </>
49
- ) }
50
- <span className="wc-block-components-product-details__value">
51
- { decodeEntities( detail.display || detail.value ) }
52
- </span>
53
- </li>
54
- );
55
- } ) }
56
- </ul>
57
- );
58
- };
59
-
60
- export default ProductDetails;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/product-details/style.scss DELETED
@@ -1,25 +0,0 @@
1
- // Extra class added for specificity so styles are applied in the editor.
2
- .wc-block-components-product-details.wc-block-components-product-details {
3
- list-style: none;
4
- margin: 0.5em 0;
5
- padding: 0;
6
-
7
- &:last-of-type {
8
- margin-bottom: 0;
9
- }
10
-
11
- li {
12
- margin-left: 0;
13
- }
14
- }
15
-
16
- .wc-block-components-product-details__name,
17
- .wc-block-components-product-details__value {
18
- display: inline-block;
19
- }
20
-
21
- .is-large:not(.wc-block-checkout) {
22
- .wc-block-components-product-details__name {
23
- font-weight: bold;
24
- }
25
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/product-details/test/__snapshots__/index.js.snap DELETED
@@ -1,76 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`ProductDetails should not render hidden details 1`] = `
4
- <ul
5
- className="wc-block-components-product-details"
6
- >
7
- <li
8
- className="wc-block-components-product-details__lorem"
9
- >
10
- <span
11
- className="wc-block-components-product-details__name"
12
- >
13
- LOREM
14
- :
15
- </span>
16
-
17
- <span
18
- className="wc-block-components-product-details__value"
19
- >
20
- IPSUM
21
- </span>
22
- </li>
23
- </ul>
24
- `;
25
-
26
- exports[`ProductDetails should not rendering anything if all details are hidden 1`] = `null`;
27
-
28
- exports[`ProductDetails should not rendering anything if details is an empty array 1`] = `null`;
29
-
30
- exports[`ProductDetails should render details 1`] = `
31
- <ul
32
- className="wc-block-components-product-details"
33
- >
34
- <li
35
- className="wc-block-components-product-details__lorem"
36
- >
37
- <span
38
- className="wc-block-components-product-details__name"
39
- >
40
- Lorem
41
- :
42
- </span>
43
-
44
- <span
45
- className="wc-block-components-product-details__value"
46
- >
47
- Ipsum
48
- </span>
49
- </li>
50
- <li
51
- className="wc-block-components-product-details__lorem"
52
- >
53
- <span
54
- className="wc-block-components-product-details__name"
55
- >
56
- LOREM
57
- :
58
- </span>
59
-
60
- <span
61
- className="wc-block-components-product-details__value"
62
- >
63
- IPSUM
64
- </span>
65
- </li>
66
- <li
67
- className=""
68
- >
69
- <span
70
- className="wc-block-components-product-details__value"
71
- >
72
- Ipsum
73
- </span>
74
- </li>
75
- </ul>
76
- `;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/product-details/test/index.js DELETED
@@ -1,57 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import TestRenderer from 'react-test-renderer';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import ProductDetails from '..';
10
-
11
- describe( 'ProductDetails', () => {
12
- test( 'should render details', () => {
13
- const details = [
14
- { name: 'Lorem', value: 'Ipsum' },
15
- { name: 'LOREM', value: 'Ipsum', display: 'IPSUM' },
16
- { value: 'Ipsum' },
17
- ];
18
- const component = TestRenderer.create(
19
- <ProductDetails details={ details } />
20
- );
21
-
22
- expect( component.toJSON() ).toMatchSnapshot();
23
- } );
24
-
25
- test( 'should not render hidden details', () => {
26
- const details = [
27
- { name: 'Lorem', value: 'Ipsum', hidden: true },
28
- { name: 'LOREM', value: 'Ipsum', display: 'IPSUM' },
29
- ];
30
- const component = TestRenderer.create(
31
- <ProductDetails details={ details } />
32
- );
33
-
34
- expect( component.toJSON() ).toMatchSnapshot();
35
- } );
36
-
37
- test( 'should not rendering anything if all details are hidden', () => {
38
- const details = [
39
- { name: 'Lorem', value: 'Ipsum', hidden: true },
40
- { name: 'LOREM', value: 'Ipsum', display: 'IPSUM', hidden: true },
41
- ];
42
- const component = TestRenderer.create(
43
- <ProductDetails details={ details } />
44
- );
45
-
46
- expect( component.toJSON() ).toMatchSnapshot();
47
- } );
48
-
49
- test( 'should not rendering anything if details is an empty array', () => {
50
- const details = [];
51
- const component = TestRenderer.create(
52
- <ProductDetails details={ details } />
53
- );
54
-
55
- expect( component.toJSON() ).toMatchSnapshot();
56
- } );
57
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/product-image/index.tsx DELETED
@@ -1,25 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { decodeEntities } from '@wordpress/html-entities';
5
- import { PLACEHOLDER_IMG_SRC } from '@woocommerce/settings';
6
-
7
- interface ProductImageProps {
8
- image: { alt?: string; thumbnail?: string };
9
- }
10
- /**
11
- * Formats and returns an image element.
12
- *
13
- * @param {Object} props Incoming props for the component.
14
- * @param {Object} props.image Image properties.
15
- */
16
- const ProductImage = ( { image = {} }: ProductImageProps ): JSX.Element => {
17
- const imageProps = {
18
- src: image.thumbnail || PLACEHOLDER_IMG_SRC,
19
- alt: decodeEntities( image.alt ) || '',
20
- };
21
-
22
- return <img { ...imageProps } alt={ imageProps.alt } />;
23
- };
24
-
25
- export default ProductImage;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/product-low-stock-badge/index.tsx DELETED
@@ -1,38 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __, sprintf } from '@wordpress/i18n';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import ProductBadge from '../product-badge';
10
-
11
- interface ProductLowStockBadgeProps {
12
- lowStockRemaining: number | null;
13
- }
14
- /**
15
- * Returns a low stock badge.
16
- *
17
- * @param {Object} props Incoming props for the component.
18
- * @param {number} props.lowStockRemaining Whether or not there is low stock remaining.
19
- */
20
- const ProductLowStockBadge = ( {
21
- lowStockRemaining,
22
- }: ProductLowStockBadgeProps ): JSX.Element | null => {
23
- if ( ! lowStockRemaining ) {
24
- return null;
25
- }
26
-
27
- return (
28
- <ProductBadge className="wc-block-components-product-low-stock-badge">
29
- { sprintf(
30
- /* translators: %d stock amount (number of items in stock for product) */
31
- __( '%d left in stock', 'woo-gutenberg-products-block' ),
32
- lowStockRemaining
33
- ) }
34
- </ProductBadge>
35
- );
36
- };
37
-
38
- export default ProductLowStockBadge;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/product-metadata/index.tsx DELETED
@@ -1,45 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { ProductResponseItemData } from '@woocommerce/type-defs/product-response';
5
- import { CartVariationItem } from '@woocommerce/type-defs/cart';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import ProductDetails from '../product-details';
11
- import ProductSummary from '../product-summary';
12
- import './style.scss';
13
-
14
- interface ProductMetadataProps {
15
- shortDescription?: string;
16
- fullDescription?: string;
17
- itemData: ProductResponseItemData[];
18
- variation?: CartVariationItem[];
19
- }
20
-
21
- const ProductMetadata = ( {
22
- shortDescription = '',
23
- fullDescription = '',
24
- itemData = [],
25
- variation = [],
26
- }: ProductMetadataProps ): JSX.Element => {
27
- return (
28
- <div className="wc-block-components-product-metadata">
29
- <ProductSummary
30
- className="wc-block-components-product-metadata__description"
31
- shortDescription={ shortDescription }
32
- fullDescription={ fullDescription }
33
- />
34
- <ProductDetails details={ itemData } />
35
- <ProductDetails
36
- details={ variation.map( ( { attribute = '', value } ) => ( {
37
- name: attribute,
38
- value,
39
- } ) ) }
40
- />
41
- </div>
42
- );
43
- };
44
-
45
- export default ProductMetadata;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/product-metadata/style.scss DELETED
@@ -1,8 +0,0 @@
1
- .wc-block-components-product-metadata {
2
- @include font-size(smaller);
3
-
4
- .wc-block-components-product-metadata__description > p,
5
- .wc-block-components-product-metadata__variation-data {
6
- margin: 0.25em 0;
7
- }
8
- }
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/product-sale-badge/index.tsx DELETED
@@ -1,62 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { createInterpolateElement } from 'wordpress-element';
5
- import { __, sprintf } from '@wordpress/i18n';
6
- import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
7
- import type { Currency } from '@woocommerce/price-format';
8
-
9
- /**
10
- * Internal dependencies
11
- */
12
- import ProductBadge from '../product-badge';
13
-
14
- interface ProductSaleBadgeProps {
15
- currency: Currency;
16
- saleAmount: number;
17
- format: string;
18
- }
19
- /**
20
- * ProductSaleBadge
21
- *
22
- * @param {Object} props Incoming props.
23
- * @param {Object} props.currency Currency object.
24
- * @param {number} props.saleAmount Discounted amount.
25
- * @param {string} [props.format] Format to change the price.
26
- * @return {*} The component.
27
- */
28
- const ProductSaleBadge = ( {
29
- currency,
30
- saleAmount,
31
- format = '<price/>',
32
- }: ProductSaleBadgeProps ): JSX.Element | null => {
33
- if ( ! saleAmount || saleAmount <= 0 ) {
34
- return null;
35
- }
36
- if ( ! format.includes( '<price/>' ) ) {
37
- format = '<price/>';
38
- // eslint-disable-next-line no-console
39
- console.error( 'Price formats need to include the `<price/>` tag.' );
40
- }
41
-
42
- const formattedMessage = sprintf(
43
- /* translators: %s will be replaced by the discount amount */
44
- __( `Save %s`, 'woo-gutenberg-products-block' ),
45
- format
46
- );
47
-
48
- return (
49
- <ProductBadge className="wc-block-components-sale-badge">
50
- { createInterpolateElement( formattedMessage, {
51
- price: (
52
- <FormattedMonetaryAmount
53
- currency={ currency }
54
- value={ saleAmount }
55
- />
56
- ),
57
- } ) }
58
- </ProductBadge>
59
- );
60
- };
61
-
62
- export default ProductSaleBadge;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/product-summary/index.tsx DELETED
@@ -1,41 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import Summary from '@woocommerce/base-components/summary';
5
- import { blocksConfig } from '@woocommerce/block-settings';
6
-
7
- interface ProductSummaryProps {
8
- className?: string;
9
- shortDescription?: string;
10
- fullDescription?: string;
11
- }
12
- /**
13
- * Returns an element containing a summary of the product.
14
- *
15
- * @param {Object} props Incoming props for the component.
16
- * @param {string} props.className CSS class name used.
17
- * @param {string} props.shortDescription Short description for the product.
18
- * @param {string} props.fullDescription Full description for the product.
19
- */
20
- const ProductSummary = ( {
21
- className,
22
- shortDescription = '',
23
- fullDescription = '',
24
- }: ProductSummaryProps ): JSX.Element | null => {
25
- const source = shortDescription ? shortDescription : fullDescription;
26
-
27
- if ( ! source ) {
28
- return null;
29
- }
30
-
31
- return (
32
- <Summary
33
- className={ className }
34
- source={ source }
35
- maxLength={ 15 }
36
- countType={ blocksConfig.wordCountType || 'words' }
37
- />
38
- );
39
- };
40
-
41
- export default ProductSummary;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/return-to-cart-button/index.js DELETED
@@ -1,25 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { CART_URL } from '@woocommerce/block-settings';
6
- import { Icon, arrowBack } from '@woocommerce/icons';
7
-
8
- /**
9
- * Internal dependencies
10
- */
11
- import './style.scss';
12
-
13
- const ReturnToCartButton = ( { link } ) => {
14
- return (
15
- <a
16
- href={ link || CART_URL }
17
- className="wc-block-components-checkout-return-to-cart-button"
18
- >
19
- <Icon srcElement={ arrowBack } />
20
- { __( 'Return to Cart', 'woo-gutenberg-products-block' ) }
21
- </a>
22
- );
23
- };
24
-
25
- export default ReturnToCartButton;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/return-to-cart-button/style.scss DELETED
@@ -1,14 +0,0 @@
1
- .wc-block-components-checkout-return-to-cart-button {
2
- box-shadow: none;
3
- color: inherit;
4
- padding-left: calc(24px + 0.25em);
5
- position: relative;
6
- text-decoration: none;
7
-
8
- svg {
9
- left: 0;
10
- position: absolute;
11
- transform: translateY(-50%);
12
- top: 50%;
13
- }
14
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/shipping-calculator/address.tsx DELETED
@@ -1,63 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import Button from '@woocommerce/base-components/button';
6
- import { useState } from '@wordpress/element';
7
- import isShallowEqual from '@wordpress/is-shallow-equal';
8
- import { useValidationContext } from '@woocommerce/base-context';
9
- import type { EnteredAddress, AddressFields } from '@woocommerce/settings';
10
-
11
- /**
12
- * Internal dependencies
13
- */
14
- import './style.scss';
15
- import { AddressForm } from '../address-form';
16
-
17
- interface ShippingCalculatorAddressProps {
18
- address: EnteredAddress;
19
- onUpdate: ( address: EnteredAddress ) => void;
20
- addressFields: Partial< keyof AddressFields >[];
21
- }
22
- const ShippingCalculatorAddress = ( {
23
- address: initialAddress,
24
- onUpdate,
25
- addressFields,
26
- }: ShippingCalculatorAddressProps ): JSX.Element => {
27
- const [ address, setAddress ] = useState( initialAddress );
28
- const {
29
- hasValidationErrors,
30
- showAllValidationErrors,
31
- } = useValidationContext();
32
-
33
- const validateSubmit = () => {
34
- showAllValidationErrors();
35
- return ! hasValidationErrors;
36
- };
37
-
38
- return (
39
- <form className="wc-block-components-shipping-calculator-address">
40
- <AddressForm
41
- fields={ addressFields }
42
- onChange={ setAddress }
43
- values={ address }
44
- />
45
- <Button
46
- className="wc-block-components-shipping-calculator-address__button"
47
- disabled={ isShallowEqual( address, initialAddress ) }
48
- onClick={ ( e ) => {
49
- e.preventDefault();
50
- const isAddressValid = validateSubmit();
51
- if ( isAddressValid ) {
52
- return onUpdate( address );
53
- }
54
- } }
55
- type="submit"
56
- >
57
- { __( 'Update', 'woo-gutenberg-products-block' ) }
58
- </Button>
59
- </form>
60
- );
61
- };
62
-
63
- export default ShippingCalculatorAddress;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/shipping-calculator/index.tsx DELETED
@@ -1,39 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { useShippingDataContext } from '@woocommerce/base-context';
5
- import type { EnteredAddress } from '@woocommerce/settings';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import ShippingCalculatorAddress from './address';
11
- import './style.scss';
12
-
13
- interface ShippingCalculatorProps {
14
- onUpdate?: ( newAddress: EnteredAddress ) => void;
15
- addressFields?: Partial< keyof EnteredAddress >[];
16
- }
17
-
18
- const ShippingCalculator = ( {
19
- onUpdate = () => {
20
- /* Do nothing */
21
- },
22
- addressFields = [ 'country', 'state', 'city', 'postcode' ],
23
- }: ShippingCalculatorProps ): JSX.Element => {
24
- const { shippingAddress, setShippingAddress } = useShippingDataContext();
25
- return (
26
- <div className="wc-block-components-shipping-calculator">
27
- <ShippingCalculatorAddress
28
- address={ shippingAddress }
29
- addressFields={ addressFields }
30
- onUpdate={ ( newAddress ) => {
31
- setShippingAddress( newAddress );
32
- onUpdate( newAddress );
33
- } }
34
- />
35
- </div>
36
- );
37
- };
38
-
39
- export default ShippingCalculator;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/shipping-calculator/style.scss DELETED
@@ -1,12 +0,0 @@
1
- .wc-block-components-shipping-calculator-address {
2
- margin-bottom: 0;
3
- }
4
-
5
- .wc-block-components-shipping-calculator-address__button {
6
- width: 100%;
7
- margin-top: em($gap-large);
8
- }
9
-
10
- .wc-block-components-shipping-calculator {
11
- padding: em($gap-smaller) 0 em($gap-small);
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/shipping-location/index.tsx DELETED
@@ -1,70 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __, sprintf } from '@wordpress/i18n';
5
- import { EnteredAddress, getSetting } from '@woocommerce/settings';
6
- import { decodeEntities } from '@wordpress/html-entities';
7
-
8
- interface ShippingLocationProps {
9
- address: EnteredAddress;
10
- }
11
-
12
- /**
13
- * Shows a formatted shipping location.
14
- *
15
- * @param {Object} props Incoming props for the component.
16
- * @param {Object} props.address Incoming address information.
17
- */
18
- const ShippingLocation = ( {
19
- address,
20
- }: ShippingLocationProps ): JSX.Element | null => {
21
- // we bail early if we don't have an address.
22
- if ( Object.values( address ).length === 0 ) {
23
- return null;
24
- }
25
- const shippingCountries = getSetting( 'shippingCountries', {} ) as Record<
26
- string,
27
- string
28
- >;
29
- const shippingStates = getSetting( 'shippingStates', {} ) as Record<
30
- string,
31
- Record< string, string >
32
- >;
33
- const formattedCountry =
34
- typeof shippingCountries[ address.country ] === 'string'
35
- ? decodeEntities( shippingCountries[ address.country ] )
36
- : '';
37
-
38
- const formattedState =
39
- typeof shippingStates[ address.country ] === 'object' &&
40
- typeof shippingStates[ address.country ][ address.state ] === 'string'
41
- ? decodeEntities(
42
- shippingStates[ address.country ][ address.state ]
43
- )
44
- : address.state;
45
-
46
- const addressParts = [];
47
-
48
- addressParts.push( address.postcode.toUpperCase() );
49
- addressParts.push( address.city );
50
- addressParts.push( formattedState );
51
- addressParts.push( formattedCountry );
52
-
53
- const formattedLocation = addressParts.filter( Boolean ).join( ', ' );
54
-
55
- if ( ! formattedLocation ) {
56
- return null;
57
- }
58
-
59
- return (
60
- <span className="wc-block-components-shipping-address">
61
- { sprintf(
62
- /* translators: %s location. */
63
- __( 'Shipping to %s', 'woo-gutenberg-products-block' ),
64
- formattedLocation
65
- ) + ' ' }
66
- </span>
67
- );
68
- };
69
-
70
- export default ShippingLocation;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/shipping-rates-control-package/index.tsx DELETED
@@ -1,152 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classNames from 'classnames';
5
- import { _n, sprintf } from '@wordpress/i18n';
6
- import { decodeEntities } from '@wordpress/html-entities';
7
- import type { ReactElement } from 'react';
8
- import type { PackageRateOption } from '@woocommerce/type-defs/shipping';
9
- import { Panel } from '@woocommerce/blocks-checkout';
10
- import Label from '@woocommerce/base-components/label';
11
- import { useSelectShippingRate } from '@woocommerce/base-context/hooks';
12
- import type { CartShippingPackageShippingRate } from '@woocommerce/type-defs/cart';
13
-
14
- /**
15
- * Internal dependencies
16
- */
17
- import PackageRates from './package-rates';
18
- import './style.scss';
19
-
20
- interface PackageItem {
21
- name: string;
22
- key: string;
23
- quantity: number;
24
- }
25
-
26
- interface Destination {
27
- // eslint-disable-next-line camelcase
28
- address_1: string;
29
- // eslint-disable-next-line camelcase
30
- address_2: string;
31
- city: string;
32
- state: string;
33
- postcode: string;
34
- country: string;
35
- }
36
-
37
- export interface PackageData {
38
- destination: Destination;
39
- name: string;
40
- // eslint-disable-next-line camelcase
41
- shipping_rates: CartShippingPackageShippingRate[];
42
- items: PackageItem[];
43
- }
44
-
45
- export type PackageRateRenderOption = (
46
- option: CartShippingPackageShippingRate
47
- ) => PackageRateOption;
48
-
49
- interface PackageProps {
50
- /* PackageId can be a string, WooCommerce Subscriptions uses strings for example, but WooCommerce core uses numbers */
51
- packageId: string | number;
52
- renderOption: PackageRateRenderOption;
53
- collapse?: boolean;
54
- packageData: PackageData;
55
- className?: string;
56
- collapsible?: boolean;
57
- noResultsMessage: ReactElement;
58
- showItems?: boolean;
59
- }
60
-
61
- export const ShippingRatesControlPackage = ( {
62
- packageId,
63
- className,
64
- noResultsMessage,
65
- renderOption,
66
- packageData,
67
- collapsible = false,
68
- collapse = false,
69
- showItems = false,
70
- }: PackageProps ): ReactElement => {
71
- const { selectShippingRate, selectedShippingRate } = useSelectShippingRate(
72
- packageId,
73
- packageData.shipping_rates
74
- );
75
-
76
- const header = (
77
- <>
78
- { ( showItems || collapsible ) && (
79
- <div className="wc-block-components-shipping-rates-control__package-title">
80
- { packageData.name }
81
- </div>
82
- ) }
83
- { showItems && (
84
- <ul className="wc-block-components-shipping-rates-control__package-items">
85
- { Object.values( packageData.items ).map( ( v ) => {
86
- const name = decodeEntities( v.name );
87
- const quantity = v.quantity;
88
- return (
89
- <li
90
- key={ v.key }
91
- className="wc-block-components-shipping-rates-control__package-item"
92
- >
93
- <Label
94
- label={
95
- quantity > 1
96
- ? `${ name } × ${ quantity }`
97
- : `${ name }`
98
- }
99
- screenReaderLabel={ sprintf(
100
- /* translators: %1$s name of the product (ie: Sunglasses), %2$d number of units in the current cart package */
101
- _n(
102
- '%1$s (%2$d unit)',
103
- '%1$s (%2$d units)',
104
- quantity,
105
- 'woo-gutenberg-products-block'
106
- ),
107
- name,
108
- quantity
109
- ) }
110
- />
111
- </li>
112
- );
113
- } ) }
114
- </ul>
115
- ) }
116
- </>
117
- );
118
- const body = (
119
- <PackageRates
120
- className={ className }
121
- noResultsMessage={ noResultsMessage }
122
- rates={ packageData.shipping_rates }
123
- onSelectRate={ selectShippingRate }
124
- selected={ selectedShippingRate }
125
- renderOption={ renderOption }
126
- />
127
- );
128
- if ( collapsible ) {
129
- return (
130
- <Panel
131
- className="wc-block-components-shipping-rates-control__package"
132
- initialOpen={ ! collapse }
133
- title={ header }
134
- >
135
- { body }
136
- </Panel>
137
- );
138
- }
139
- return (
140
- <div
141
- className={ classNames(
142
- 'wc-block-components-shipping-rates-control__package',
143
- className
144
- ) }
145
- >
146
- { header }
147
- { body }
148
- </div>
149
- );
150
- };
151
-
152
- export default ShippingRatesControlPackage;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/shipping-rates-control-package/package-rates.tsx DELETED
@@ -1,69 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import RadioControl, {
5
- RadioControlOptionLayout,
6
- } from '@woocommerce/base-components/radio-control';
7
- import type { PackageRateOption } from '@woocommerce/type-defs/shipping';
8
- import type { ReactElement } from 'react';
9
- import type { CartShippingPackageShippingRate } from '@woocommerce/type-defs/cart';
10
-
11
- /**
12
- * Internal dependencies
13
- */
14
- import { renderPackageRateOption } from './render-package-rate-option';
15
-
16
- interface PackageRates {
17
- onSelectRate: ( selectedRateId: string ) => void;
18
- rates: CartShippingPackageShippingRate[];
19
- renderOption?: (
20
- option: CartShippingPackageShippingRate
21
- ) => PackageRateOption;
22
- className?: string;
23
- noResultsMessage: ReactElement;
24
- selected?: string;
25
- }
26
-
27
- const PackageRates = ( {
28
- className,
29
- noResultsMessage,
30
- onSelectRate,
31
- rates,
32
- renderOption = renderPackageRateOption,
33
- selected,
34
- }: PackageRates ): ReactElement => {
35
- if ( rates.length === 0 ) {
36
- return noResultsMessage;
37
- }
38
-
39
- if ( rates.length > 1 ) {
40
- return (
41
- <RadioControl
42
- className={ className }
43
- onChange={ ( selectedRateId: string ) => {
44
- onSelectRate( selectedRateId );
45
- } }
46
- selected={ selected }
47
- options={ rates.map( renderOption ) }
48
- />
49
- );
50
- }
51
-
52
- const {
53
- label,
54
- secondaryLabel,
55
- description,
56
- secondaryDescription,
57
- } = renderOption( rates[ 0 ] );
58
-
59
- return (
60
- <RadioControlOptionLayout
61
- label={ label }
62
- secondaryLabel={ secondaryLabel }
63
- description={ description }
64
- secondaryDescription={ secondaryDescription }
65
- />
66
- );
67
- };
68
-
69
- export default PackageRates;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/shipping-rates-control-package/render-package-rate-option.tsx DELETED
@@ -1,46 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { decodeEntities } from '@wordpress/html-entities';
5
- import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
6
- import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
7
- import type { PackageRateOption } from '@woocommerce/type-defs/shipping';
8
- import { getSetting } from '@woocommerce/settings';
9
- import { CartShippingPackageShippingRate } from '@woocommerce/type-defs/cart';
10
-
11
- /**
12
- * Default render function for package rate options.
13
- *
14
- * @param {Object} rate Rate data.
15
- */
16
- export const renderPackageRateOption = (
17
- rate: CartShippingPackageShippingRate
18
- ): PackageRateOption => {
19
- const priceWithTaxes: number = getSetting(
20
- 'displayCartPricesIncludingTax',
21
- false
22
- )
23
- ? parseInt( rate.price, 10 ) + parseInt( rate.taxes, 10 )
24
- : parseInt( rate.price, 10 );
25
-
26
- return {
27
- label: decodeEntities( rate.name ),
28
- value: rate.rate_id,
29
- description: (
30
- <>
31
- { Number.isFinite( priceWithTaxes ) && (
32
- <FormattedMonetaryAmount
33
- currency={ getCurrencyFromPriceResponse( rate ) }
34
- value={ priceWithTaxes }
35
- />
36
- ) }
37
- { Number.isFinite( priceWithTaxes ) && rate.delivery_time
38
- ? ' — '
39
- : null }
40
- { decodeEntities( rate.delivery_time ) }
41
- </>
42
- ),
43
- };
44
- };
45
-
46
- export default renderPackageRateOption;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/shipping-rates-control-package/style.scss DELETED
@@ -1,43 +0,0 @@
1
- .wc-block-components-shipping-rates-control__package {
2
- .wc-block-components-panel__button {
3
- margin-bottom: 0;
4
- margin-top: 0;
5
- padding-bottom: em($gap-small);
6
- padding-top: em($gap-small);
7
- }
8
-
9
- // Remove panel padding because we are adding bottom padding to `.wc-block-components-radio-control`
10
- // and `.wc-block-components-radio-control__option-layout` in the next ruleset.
11
- .wc-block-components-panel__content {
12
- padding-bottom: 0;
13
- }
14
-
15
- .wc-block-components-radio-control,
16
- .wc-block-components-radio-control__option-layout {
17
- padding-bottom: 0;
18
- }
19
-
20
- .wc-block-components-radio-control .wc-block-components-radio-control__option-layout {
21
- padding-bottom: 0;
22
- }
23
- }
24
-
25
- .wc-block-components-shipping-rates-control__package-items {
26
- @include font-size(small);
27
- display: block;
28
- list-style: none;
29
- margin: 0;
30
- padding: 0;
31
- }
32
-
33
- .wc-block-components-shipping-rates-control__package-item {
34
- @include wrap-break-word();
35
- display: inline-block;
36
- margin: 0;
37
- padding: 0;
38
- }
39
-
40
- .wc-block-components-shipping-rates-control__package-item:not(:last-child)::after {
41
- content: ", ";
42
- white-space: pre;
43
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/shipping-rates-control/index.tsx DELETED
@@ -1,187 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __, _n, sprintf } from '@wordpress/i18n';
5
- import { useEffect } from '@wordpress/element';
6
- import { speak } from '@wordpress/a11y';
7
- import LoadingMask from '@woocommerce/base-components/loading-mask';
8
- import { ExperimentalOrderShippingPackages } from '@woocommerce/blocks-checkout';
9
- import {
10
- getShippingRatesPackageCount,
11
- getShippingRatesRateCount,
12
- } from '@woocommerce/base-utils';
13
- import { useStoreCart } from '@woocommerce/base-context/hooks';
14
- import { CartResponseShippingRate } from '@woocommerce/type-defs/cart-response';
15
- import { ReactElement } from 'react';
16
-
17
- /**
18
- * Internal dependencies
19
- */
20
- import ShippingRatesControlPackage, {
21
- PackageRateRenderOption,
22
- } from '../shipping-rates-control-package';
23
-
24
- interface PackagesProps {
25
- packages: CartResponseShippingRate[];
26
- collapse?: boolean;
27
- collapsible?: boolean;
28
- showItems?: boolean;
29
- noResultsMessage: ReactElement;
30
- renderOption: PackageRateRenderOption;
31
- }
32
-
33
- /**
34
- * Renders multiple packages within the slotfill.
35
- *
36
- * @param {Object} props Incoming props.
37
- * @param {Array} props.packages Array of packages.
38
- * @param {boolean} props.collapsible If the package should be rendered as a
39
- * @param {ReactElement} props.noResultsMessage Rendered when there are no rates in a package.
40
- * collapsible panel.
41
- * @param {boolean} props.collapse If the panel should be collapsed by default,
42
- * only works if collapsible is true.
43
- * @param {boolean} props.showItems If we should items below the package name.
44
- * @param {PackageRateRenderOption} [props.renderOption] Function to render a shipping rate.
45
- * @return {JSX.Element|null} Rendered components.
46
- */
47
- const Packages = ( {
48
- packages,
49
- collapse,
50
- showItems,
51
- collapsible,
52
- noResultsMessage,
53
- renderOption,
54
- }: PackagesProps ): JSX.Element | null => {
55
- // If there are no packages, return nothing.
56
- if ( ! packages.length ) {
57
- return null;
58
- }
59
- return (
60
- <>
61
- { packages.map( ( { package_id: packageId, ...packageData } ) => (
62
- <ShippingRatesControlPackage
63
- key={ packageId }
64
- packageId={ packageId }
65
- packageData={ packageData }
66
- collapsible={ collapsible }
67
- collapse={ collapse }
68
- showItems={ showItems }
69
- noResultsMessage={ noResultsMessage }
70
- renderOption={ renderOption }
71
- />
72
- ) ) }
73
- </>
74
- );
75
- };
76
-
77
- interface ShippingRatesControlProps {
78
- collapsible?: boolean;
79
- shippingRates: CartResponseShippingRate[];
80
- className?: string;
81
- shippingRatesLoading: boolean;
82
- noResultsMessage: ReactElement;
83
- renderOption: PackageRateRenderOption;
84
- }
85
- /**
86
- * Renders the shipping rates control element.
87
- *
88
- * @param {Object} props Incoming props.
89
- * @param {Array} props.shippingRates Array of packages containing shipping rates.
90
- * @param {boolean} props.shippingRatesLoading True when rates are being loaded.
91
- * @param {string} props.className Class name for package rates.
92
- * @param {boolean} [props.collapsible] If true, when multiple packages are rendered they can be toggled open and closed.
93
- * @param {ReactElement} props.noResultsMessage Rendered when there are no packages.
94
- * @param {Function} [props.renderOption] Function to render a shipping rate.
95
- */
96
- const ShippingRatesControl = ( {
97
- shippingRates,
98
- shippingRatesLoading,
99
- className,
100
- collapsible = false,
101
- noResultsMessage,
102
- renderOption,
103
- }: ShippingRatesControlProps ): JSX.Element => {
104
- useEffect( () => {
105
- if ( shippingRatesLoading ) {
106
- return;
107
- }
108
- const packageCount = getShippingRatesPackageCount( shippingRates );
109
- const shippingOptions = getShippingRatesRateCount( shippingRates );
110
- if ( packageCount === 1 ) {
111
- speak(
112
- sprintf(
113
- /* translators: %d number of shipping options found. */
114
- _n(
115
- '%d shipping option was found.',
116
- '%d shipping options were found.',
117
- shippingOptions,
118
- 'woo-gutenberg-products-block'
119
- ),
120
- shippingOptions
121
- )
122
- );
123
- } else {
124
- speak(
125
- sprintf(
126
- /* translators: %d number of shipping packages packages. */
127
- _n(
128
- 'Shipping option searched for %d package.',
129
- 'Shipping options searched for %d packages.',
130
- packageCount,
131
- 'woo-gutenberg-products-block'
132
- ),
133
- packageCount
134
- ) +
135
- ' ' +
136
- sprintf(
137
- /* translators: %d number of shipping options available. */
138
- _n(
139
- '%d shipping option was found',
140
- '%d shipping options were found',
141
- shippingOptions,
142
- 'woo-gutenberg-products-block'
143
- ),
144
- shippingOptions
145
- )
146
- );
147
- }
148
- }, [ shippingRatesLoading, shippingRates ] );
149
-
150
- // Prepare props to pass to the ExperimentalOrderShippingPackages slot fill.
151
- // We need to pluck out receiveCart.
152
- // eslint-disable-next-line no-unused-vars
153
- const { extensions, ...cart } = useStoreCart();
154
- const slotFillProps = {
155
- className,
156
- collapsible,
157
- noResultsMessage,
158
- renderOption,
159
- extensions,
160
- cart,
161
- components: {
162
- ShippingRatesControlPackage,
163
- },
164
- };
165
-
166
- return (
167
- <LoadingMask
168
- isLoading={ shippingRatesLoading }
169
- screenReaderLabel={ __(
170
- 'Loading shipping rates…',
171
- 'woo-gutenberg-products-block'
172
- ) }
173
- showSpinner={ true }
174
- >
175
- <ExperimentalOrderShippingPackages.Slot { ...slotFillProps } />
176
- <ExperimentalOrderShippingPackages>
177
- <Packages
178
- packages={ shippingRates }
179
- noResultsMessage={ noResultsMessage }
180
- renderOption={ renderOption }
181
- />
182
- </ExperimentalOrderShippingPackages>
183
- </LoadingMask>
184
- );
185
- };
186
-
187
- export default ShippingRatesControl;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/coupon/index.js DELETED
@@ -1,121 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { useState, useEffect, useRef } from '@wordpress/element';
6
- import Button from '@woocommerce/base-components/button';
7
- import { ValidatedTextInput } from '@woocommerce/base-components/text-input';
8
- import Label from '@woocommerce/base-components/label';
9
- import LoadingMask from '@woocommerce/base-components/loading-mask';
10
- import PropTypes from 'prop-types';
11
- import { withInstanceId } from '@woocommerce/base-hocs/with-instance-id';
12
- import {
13
- ValidationInputError,
14
- useValidationContext,
15
- } from '@woocommerce/base-context';
16
- import { Panel } from '@woocommerce/blocks-checkout';
17
-
18
- /**
19
- * Internal dependencies
20
- */
21
- import './style.scss';
22
-
23
- const TotalsCoupon = ( {
24
- instanceId,
25
- isLoading = false,
26
- initialOpen = false,
27
- onSubmit = () => {},
28
- } ) => {
29
- const [ couponValue, setCouponValue ] = useState( '' );
30
- const currentIsLoading = useRef( false );
31
- const { getValidationError, getValidationErrorId } = useValidationContext();
32
- const validationError = getValidationError( 'coupon' );
33
-
34
- useEffect( () => {
35
- if ( currentIsLoading.current !== isLoading ) {
36
- if ( ! isLoading && couponValue && ! validationError ) {
37
- setCouponValue( '' );
38
- }
39
- currentIsLoading.current = isLoading;
40
- }
41
- }, [ isLoading, couponValue, validationError ] );
42
-
43
- const textInputId = `wc-block-components-totals-coupon__input-${ instanceId }`;
44
-
45
- return (
46
- <Panel
47
- className="wc-block-components-totals-coupon"
48
- hasBorder={ false }
49
- initialOpen={ initialOpen }
50
- title={
51
- <Label
52
- label={ __(
53
- 'Coupon code',
54
- 'woo-gutenberg-products-block'
55
- ) }
56
- screenReaderLabel={ __(
57
- 'Apply a coupon code',
58
- 'woo-gutenberg-products-block'
59
- ) }
60
- htmlFor={ textInputId }
61
- />
62
- }
63
- >
64
- <LoadingMask
65
- screenReaderLabel={ __(
66
- 'Applying coupon…',
67
- 'woo-gutenberg-products-block'
68
- ) }
69
- isLoading={ isLoading }
70
- showSpinner={ false }
71
- >
72
- <div className="wc-block-components-totals-coupon__content">
73
- <form className="wc-block-components-totals-coupon__form">
74
- <ValidatedTextInput
75
- id={ textInputId }
76
- errorId="coupon"
77
- className="wc-block-components-totals-coupon__input"
78
- label={ __(
79
- 'Enter code',
80
- 'woo-gutenberg-products-block'
81
- ) }
82
- value={ couponValue }
83
- ariaDescribedBy={ getValidationErrorId(
84
- textInputId
85
- ) }
86
- onChange={ ( newCouponValue ) => {
87
- setCouponValue( newCouponValue );
88
- } }
89
- validateOnMount={ false }
90
- focusOnMount={ true }
91
- showError={ false }
92
- />
93
- <Button
94
- className="wc-block-components-totals-coupon__button"
95
- disabled={ isLoading || ! couponValue }
96
- showSpinner={ isLoading }
97
- onClick={ ( e ) => {
98
- e.preventDefault();
99
- onSubmit( couponValue );
100
- } }
101
- type="submit"
102
- >
103
- { __( 'Apply', 'woo-gutenberg-products-block' ) }
104
- </Button>
105
- </form>
106
- <ValidationInputError
107
- propertyName="coupon"
108
- elementId={ textInputId }
109
- />
110
- </div>
111
- </LoadingMask>
112
- </Panel>
113
- );
114
- };
115
-
116
- TotalsCoupon.propTypes = {
117
- onSubmit: PropTypes.func,
118
- isLoading: PropTypes.bool,
119
- };
120
-
121
- export default withInstanceId( TotalsCoupon );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/coupon/stories/index.js DELETED
@@ -1,47 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { text, boolean } from '@storybook/addon-knobs';
5
- import {
6
- useValidationContext,
7
- ValidationContextProvider,
8
- } from '@woocommerce/base-context';
9
-
10
- /**
11
- * Internal dependencies
12
- */
13
- import TotalsCoupon from '../';
14
-
15
- export default {
16
- title:
17
- 'WooCommerce Blocks/@base-components/cart-checkout/totals/TotalsCoupon',
18
- component: TotalsCoupon,
19
- };
20
-
21
- const StoryComponent = ( { validCoupon, isLoading, invalidCouponText } ) => {
22
- const { setValidationErrors } = useValidationContext();
23
- const onSubmit = ( coupon ) => {
24
- if ( coupon !== validCoupon ) {
25
- setValidationErrors( { coupon: invalidCouponText } );
26
- }
27
- };
28
- return <TotalsCoupon isLoading={ isLoading } onSubmit={ onSubmit } />;
29
- };
30
-
31
- export const Default = () => {
32
- const validCoupon = text( 'A valid coupon code', 'validcoupon' );
33
- const invalidCouponText = text(
34
- 'Error message for invalid code',
35
- 'Invalid coupon code.'
36
- );
37
- const isLoading = boolean( 'Toggle isLoading state', false );
38
- return (
39
- <ValidationContextProvider>
40
- <StoryComponent
41
- validCoupon={ validCoupon }
42
- isLoading={ isLoading }
43
- invalidCouponText={ invalidCouponText }
44
- />
45
- </ValidationContextProvider>
46
- );
47
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/coupon/style.scss DELETED
@@ -1,41 +0,0 @@
1
- .wc-block-components-totals-coupon {
2
-
3
- .wc-block-components-panel__button {
4
- margin-top: 0;
5
- padding-top: 0;
6
- }
7
-
8
- .wc-block-components-panel__content {
9
- padding-bottom: 0;
10
- }
11
- }
12
-
13
- .wc-block-components-totals-coupon__form {
14
- display: flex;
15
- width: 100%;
16
- margin-bottom: 0;
17
-
18
- .wc-block-components-totals-coupon__input {
19
- margin-bottom: 0;
20
- margin-top: 0;
21
- flex-grow: 1;
22
- }
23
-
24
- .wc-block-components-totals-coupon__button {
25
- height: em(48px);
26
- flex-shrink: 0;
27
- margin-left: $gap-smaller;
28
- padding-left: $gap-large;
29
- padding-right: $gap-large;
30
- white-space: nowrap;
31
- }
32
-
33
- .wc-block-components-totals-coupon__button.no-margin {
34
- margin: 0;
35
- }
36
- }
37
-
38
- .wc-block-components-totals-coupon__content {
39
- flex-direction: column;
40
- position: relative;
41
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/discount/index.js DELETED
@@ -1,126 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __, sprintf } from '@wordpress/i18n';
5
- import LoadingMask from '@woocommerce/base-components/loading-mask';
6
- import { RemovableChip } from '@woocommerce/base-components/chip';
7
- import PropTypes from 'prop-types';
8
- import {
9
- __experimentalApplyCheckoutFilter,
10
- TotalsItem,
11
- } from '@woocommerce/blocks-checkout';
12
- import { getSetting } from '@woocommerce/settings';
13
-
14
- /**
15
- * Internal dependencies
16
- */
17
- import './style.scss';
18
-
19
- const TotalsDiscount = ( {
20
- cartCoupons = [],
21
- currency,
22
- isRemovingCoupon,
23
- removeCoupon,
24
- values,
25
- } ) => {
26
- const {
27
- total_discount: totalDiscount,
28
- total_discount_tax: totalDiscountTax,
29
- } = values;
30
- const discountValue = parseInt( totalDiscount, 10 );
31
-
32
- if ( ! discountValue && cartCoupons.length === 0 ) {
33
- return null;
34
- }
35
-
36
- const discountTaxValue = parseInt( totalDiscountTax, 10 );
37
- const discountTotalValue = getSetting(
38
- 'displayCartPricesIncludingTax',
39
- false
40
- )
41
- ? discountValue + discountTaxValue
42
- : discountValue;
43
-
44
- const filteredCartCoupons = __experimentalApplyCheckoutFilter( {
45
- arg: {
46
- context: 'summary',
47
- },
48
- filterName: 'coupons',
49
- defaultValue: cartCoupons,
50
- } );
51
-
52
- return (
53
- <TotalsItem
54
- className="wc-block-components-totals-discount"
55
- currency={ currency }
56
- description={
57
- filteredCartCoupons.length !== 0 && (
58
- <LoadingMask
59
- screenReaderLabel={ __(
60
- 'Removing coupon…',
61
- 'woo-gutenberg-products-block'
62
- ) }
63
- isLoading={ isRemovingCoupon }
64
- showSpinner={ false }
65
- >
66
- <ul className="wc-block-components-totals-discount__coupon-list">
67
- { filteredCartCoupons.map( ( cartCoupon ) => {
68
- return (
69
- <RemovableChip
70
- key={ 'coupon-' + cartCoupon.code }
71
- className="wc-block-components-totals-discount__coupon-list-item"
72
- text={ cartCoupon.label }
73
- screenReaderText={ sprintf(
74
- /* translators: %s Coupon code. */
75
- __(
76
- 'Coupon: %s',
77
- 'woo-gutenberg-products-block'
78
- ),
79
- cartCoupon.label
80
- ) }
81
- disabled={ isRemovingCoupon }
82
- onRemove={ () => {
83
- removeCoupon( cartCoupon.code );
84
- } }
85
- radius="large"
86
- ariaLabel={ sprintf(
87
- /* translators: %s is a coupon code. */
88
- __(
89
- 'Remove coupon "%s"',
90
- 'woo-gutenberg-products-block'
91
- ),
92
- cartCoupon.label
93
- ) }
94
- />
95
- );
96
- } ) }
97
- </ul>
98
- </LoadingMask>
99
- )
100
- }
101
- label={
102
- !! discountTotalValue
103
- ? __( 'Discount', 'woo-gutenberg-products-block' )
104
- : __( 'Coupons', 'woo-gutenberg-products-block' )
105
- }
106
- value={ discountTotalValue ? discountTotalValue * -1 : '-' }
107
- />
108
- );
109
- };
110
-
111
- TotalsDiscount.propTypes = {
112
- cartCoupons: PropTypes.arrayOf(
113
- PropTypes.shape( {
114
- code: PropTypes.string.isRequired,
115
- } )
116
- ),
117
- currency: PropTypes.object.isRequired,
118
- isRemovingCoupon: PropTypes.bool.isRequired,
119
- removeCoupon: PropTypes.func.isRequired,
120
- values: PropTypes.shape( {
121
- total_discount: PropTypes.string,
122
- total_discount_tax: PropTypes.string,
123
- } ).isRequired,
124
- };
125
-
126
- export default TotalsDiscount;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/discount/stories/index.js DELETED
@@ -1,37 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { text, boolean } from '@storybook/addon-knobs';
5
- import { currencyKnob } from '@woocommerce/knobs';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import TotalsDiscount from '../';
11
-
12
- export default {
13
- title:
14
- 'WooCommerce Blocks/@base-components/cart-checkout/totals/TotalsDiscount',
15
- component: TotalsDiscount,
16
- };
17
-
18
- export const Default = () => {
19
- const cartCoupons = [ { code: 'COUPON' } ];
20
- const currency = currencyKnob();
21
- const isRemovingCoupon = boolean( 'Toggle isRemovingCoupon state', false );
22
- const totalDiscount = text( 'Total discount', '1000' );
23
- const totalDiscountTax = text( 'Total discount tax', '200' );
24
-
25
- return (
26
- <TotalsDiscount
27
- cartCoupons={ cartCoupons }
28
- currency={ currency }
29
- isRemovingCoupon={ isRemovingCoupon }
30
- removeCoupon={ () => void null }
31
- values={ {
32
- total_discount: totalDiscount,
33
- total_discount_tax: totalDiscountTax,
34
- } }
35
- />
36
- );
37
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/discount/style.scss DELETED
@@ -1,9 +0,0 @@
1
- .wc-block-components-totals-discount__coupon-list {
2
- list-style: none;
3
- margin: 0;
4
- padding: 0;
5
- }
6
-
7
- .wc-block-components-totals-discount .wc-block-components-totals-item__value {
8
- color: $discount-color;
9
- }
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/footer-item/index.js DELETED
@@ -1,80 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { createInterpolateElement } from 'wordpress-element';
6
- import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
7
- import PropTypes from 'prop-types';
8
- import {
9
- __experimentalApplyCheckoutFilter,
10
- TotalsItem,
11
- } from '@woocommerce/blocks-checkout';
12
- import { useStoreCart } from '@woocommerce/base-context/hooks';
13
- import { getSetting } from '@woocommerce/settings';
14
-
15
- /**
16
- * Internal dependencies
17
- */
18
- import './style.scss';
19
-
20
- const TotalsFooterItem = ( { currency, values } ) => {
21
- const SHOW_TAXES =
22
- getSetting( 'taxesEnabled', true ) &&
23
- getSetting( 'displayCartPricesIncludingTax', false );
24
-
25
- const { total_price: totalPrice, total_tax: totalTax } = values;
26
-
27
- // Prepare props to pass to the __experimentalApplyCheckoutFilter filter.
28
- // We need to pluck out receiveCart.
29
- // eslint-disable-next-line no-unused-vars
30
- const { receiveCart, ...cart } = useStoreCart();
31
- const label = __experimentalApplyCheckoutFilter( {
32
- filterName: 'totalLabel',
33
- defaultValue: __( 'Total', 'woo-gutenberg-products-block' ),
34
- extensions: cart.extensions,
35
- arg: { cart },
36
- } );
37
-
38
- const parsedTaxValue = parseInt( totalTax, 10 );
39
-
40
- return (
41
- <TotalsItem
42
- className="wc-block-components-totals-footer-item"
43
- currency={ currency }
44
- label={ label }
45
- value={ parseInt( totalPrice, 10 ) }
46
- description={
47
- SHOW_TAXES &&
48
- parsedTaxValue !== 0 && (
49
- <p className="wc-block-components-totals-footer-item-tax">
50
- { createInterpolateElement(
51
- __(
52
- 'Including <TaxAmount/> in taxes',
53
- 'woo-gutenberg-products-block'
54
- ),
55
- {
56
- TaxAmount: (
57
- <FormattedMonetaryAmount
58
- className="wc-block-components-totals-footer-item-tax-value"
59
- currency={ currency }
60
- value={ parsedTaxValue }
61
- />
62
- ),
63
- }
64
- ) }
65
- </p>
66
- )
67
- }
68
- />
69
- );
70
- };
71
-
72
- TotalsFooterItem.propTypes = {
73
- currency: PropTypes.object.isRequired,
74
- values: PropTypes.shape( {
75
- total_price: PropTypes.string,
76
- total_tax: PropTypes.string,
77
- } ).isRequired,
78
- };
79
-
80
- export default TotalsFooterItem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/footer-item/stories/index.js DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { text } from '@storybook/addon-knobs';
5
- import { currencyKnob } from '@woocommerce/knobs';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import TotalsFooterItem from '../';
11
-
12
- export default {
13
- title:
14
- 'WooCommerce Blocks/@base-components/cart-checkout/totals/TotalsFooterItem',
15
- component: TotalsFooterItem,
16
- };
17
-
18
- export const Default = () => {
19
- const currency = currencyKnob();
20
- const totalPrice = text( 'Total price', '1200' );
21
- const totalTax = text( 'Total tax', '200' );
22
-
23
- return (
24
- <TotalsFooterItem
25
- currency={ currency }
26
- values={ {
27
- total_price: totalPrice,
28
- total_tax: totalTax,
29
- } }
30
- />
31
- );
32
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/footer-item/style.scss DELETED
@@ -1,14 +0,0 @@
1
- .wc-block-components-totals-footer-item {
2
- .wc-block-components-totals-item__value,
3
- .wc-block-components-totals-item__label {
4
- @include font-size(large);
5
- }
6
-
7
- .wc-block-components-totals-item__label {
8
- font-weight: 700;
9
- }
10
-
11
- .wc-block-components-totals-footer-item-tax {
12
- margin-bottom: 0;
13
- }
14
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/footer-item/test/__snapshots__/index.js.snap DELETED
@@ -1,79 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`TotalsFooterItem Does not show the "including %s of tax" line if tax is 0 1`] = `
4
- <div>
5
- <div
6
- class="wc-block-components-totals-item wc-block-components-totals-footer-item"
7
- >
8
- <span
9
- class="wc-block-components-totals-item__label"
10
- >
11
- Total
12
- </span>
13
- <span
14
- class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
15
- >
16
- £85.00
17
- </span>
18
- <div
19
- class="wc-block-components-totals-item__description"
20
- />
21
- </div>
22
- </div>
23
- `;
24
-
25
- exports[`TotalsFooterItem Does not show the "including %s of tax" line if tax is disabled 1`] = `
26
- <div>
27
- <div
28
- class="wc-block-components-totals-item wc-block-components-totals-footer-item"
29
- >
30
- <span
31
- class="wc-block-components-totals-item__label"
32
- >
33
- Total
34
- </span>
35
- <span
36
- class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
37
- >
38
- £85.00
39
- </span>
40
- <div
41
- class="wc-block-components-totals-item__description"
42
- />
43
- </div>
44
- </div>
45
- `;
46
-
47
- exports[`TotalsFooterItem Shows the "including %s of tax" line if tax is greater than 0 1`] = `
48
- <div>
49
- <div
50
- class="wc-block-components-totals-item wc-block-components-totals-footer-item"
51
- >
52
- <span
53
- class="wc-block-components-totals-item__label"
54
- >
55
- Total
56
- </span>
57
- <span
58
- class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
59
- >
60
- £85.00
61
- </span>
62
- <div
63
- class="wc-block-components-totals-item__description"
64
- >
65
- <p
66
- class="wc-block-components-totals-footer-item-tax"
67
- >
68
- Including
69
- <span
70
- class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-footer-item-tax-value"
71
- >
72
- £1.00
73
- </span>
74
- in taxes
75
- </p>
76
- </div>
77
- </div>
78
- </div>
79
- `;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/footer-item/test/index.js DELETED
@@ -1,81 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { render } from '@testing-library/react';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import TotalsFooterItem from '../index';
10
- import { allSettings } from '../../../../../../settings/shared/settings-init';
11
-
12
- describe( 'TotalsFooterItem', () => {
13
- beforeEach( () => {
14
- allSettings.taxesEnabled = true;
15
- allSettings.displayCartPricesIncludingTax = true;
16
- } );
17
- const currency = {
18
- code: 'GBP',
19
- decimalSeparator: '.',
20
- minorUnit: 2,
21
- prefix: '£',
22
- suffix: '',
23
- symbol: '£',
24
- thousandSeparator: ',',
25
- };
26
-
27
- const values = {
28
- currency_code: 'GBP',
29
- currency_decimal_separator: '.',
30
- currency_minor_unit: 2,
31
- currency_prefix: '£',
32
- currency_suffix: '',
33
- currency_symbol: '£',
34
- currency_thousand_separator: ',',
35
- tax_lines: [],
36
- length: 2,
37
- total_discount: '0',
38
- total_discount_tax: '0',
39
- total_fees: '0',
40
- total_fees_tax: '0',
41
- total_items: '7100',
42
- total_items_tax: '0',
43
- total_price: '8500',
44
- total_shipping: '0',
45
- total_shipping_tax: '0',
46
- total_tax: '0',
47
- };
48
-
49
- it( 'Does not show the "including %s of tax" line if tax is 0', () => {
50
- const { container } = render(
51
- <TotalsFooterItem currency={ currency } values={ values } />
52
- );
53
- expect( container ).toMatchSnapshot();
54
- } );
55
-
56
- it( 'Does not show the "including %s of tax" line if tax is disabled', () => {
57
- allSettings.taxesEnabled = false;
58
- /* This shouldn't ever happen if taxes are disabled, but this is to test whether the taxesEnabled setting works */
59
- const valuesWithTax = {
60
- ...values,
61
- total_tax: '100',
62
- total_items_tax: '100',
63
- };
64
- const { container } = render(
65
- <TotalsFooterItem currency={ currency } values={ valuesWithTax } />
66
- );
67
- expect( container ).toMatchSnapshot();
68
- } );
69
-
70
- it( 'Shows the "including %s of tax" line if tax is greater than 0', () => {
71
- const valuesWithTax = {
72
- ...values,
73
- total_tax: '100',
74
- total_items_tax: '100',
75
- };
76
- const { container } = render(
77
- <TotalsFooterItem currency={ currency } values={ valuesWithTax } />
78
- );
79
- expect( container ).toMatchSnapshot();
80
- } );
81
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/index.js DELETED
@@ -1,4 +0,0 @@
1
- export { default as TotalsCoupon } from './coupon';
2
- export { default as TotalsDiscount } from './discount';
3
- export { default as TotalsFooterItem } from './footer-item';
4
- export { default as TotalsShipping } from './shipping';
 
 
 
 
assets/js/base/components/cart-checkout/totals/shipping/has-shipping-rate.js DELETED
@@ -1,14 +0,0 @@
1
- /**
2
- * Searches an array of packages/rates to see if there are actually any rates
3
- * available.
4
- *
5
- * @param {Array} shippingRatePackages An array of packages and rates.
6
- * @return {boolean} True if a rate exists.
7
- */
8
- const hasShippingRate = ( shippingRatePackages ) => {
9
- return shippingRatePackages.some(
10
- ( shippingRatePackage ) => shippingRatePackage.shipping_rates.length
11
- );
12
- };
13
-
14
- export default hasShippingRate;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/shipping/index.tsx DELETED
@@ -1,215 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classnames from 'classnames';
5
- import { __ } from '@wordpress/i18n';
6
- import { useState } from '@wordpress/element';
7
- import { useStoreCart } from '@woocommerce/base-context/hooks';
8
- import { TotalsItem } from '@woocommerce/blocks-checkout';
9
- import type { Currency } from '@woocommerce/price-format';
10
- import type { ReactElement } from 'react';
11
- import { getSetting, EnteredAddress } from '@woocommerce/settings';
12
- import { ShippingVia } from '@woocommerce/base-components/cart-checkout/totals/shipping/shipping-via';
13
-
14
- /**
15
- * Internal dependencies
16
- */
17
- import ShippingRateSelector from './shipping-rate-selector';
18
- import hasShippingRate from './has-shipping-rate';
19
- import ShippingCalculator from '../../shipping-calculator';
20
- import ShippingLocation from '../../shipping-location';
21
- import './style.scss';
22
-
23
- interface CalculatorButtonProps {
24
- label?: string;
25
- isShippingCalculatorOpen: boolean;
26
- setIsShippingCalculatorOpen: ( isShippingCalculatorOpen: boolean ) => void;
27
- }
28
-
29
- const CalculatorButton = ( {
30
- label = __( 'Calculate', 'woo-gutenberg-products-block' ),
31
- isShippingCalculatorOpen,
32
- setIsShippingCalculatorOpen,
33
- }: CalculatorButtonProps ): ReactElement => {
34
- return (
35
- <button
36
- className="wc-block-components-totals-shipping__change-address-button"
37
- onClick={ () => {
38
- setIsShippingCalculatorOpen( ! isShippingCalculatorOpen );
39
- } }
40
- aria-expanded={ isShippingCalculatorOpen }
41
- >
42
- { label }
43
- </button>
44
- );
45
- };
46
-
47
- interface ShippingAddressProps {
48
- showCalculator: boolean;
49
- isShippingCalculatorOpen: boolean;
50
- setIsShippingCalculatorOpen: CalculatorButtonProps[ 'setIsShippingCalculatorOpen' ];
51
- shippingAddress: EnteredAddress;
52
- }
53
-
54
- const ShippingAddress = ( {
55
- showCalculator,
56
- isShippingCalculatorOpen,
57
- setIsShippingCalculatorOpen,
58
- shippingAddress,
59
- }: ShippingAddressProps ): ReactElement | null => {
60
- return (
61
- <>
62
- <ShippingLocation address={ shippingAddress } />
63
- { showCalculator && (
64
- <CalculatorButton
65
- label={ __(
66
- '(change address)',
67
- 'woo-gutenberg-products-block'
68
- ) }
69
- isShippingCalculatorOpen={ isShippingCalculatorOpen }
70
- setIsShippingCalculatorOpen={ setIsShippingCalculatorOpen }
71
- />
72
- ) }
73
- </>
74
- );
75
- };
76
-
77
- interface NoShippingPlaceholderProps {
78
- showCalculator: boolean;
79
- isShippingCalculatorOpen: boolean;
80
- setIsShippingCalculatorOpen: CalculatorButtonProps[ 'setIsShippingCalculatorOpen' ];
81
- }
82
-
83
- const NoShippingPlaceholder = ( {
84
- showCalculator,
85
- isShippingCalculatorOpen,
86
- setIsShippingCalculatorOpen,
87
- }: NoShippingPlaceholderProps ): ReactElement => {
88
- if ( ! showCalculator ) {
89
- return (
90
- <em>
91
- { __(
92
- 'Calculated during checkout',
93
- 'woo-gutenberg-products-block'
94
- ) }
95
- </em>
96
- );
97
- }
98
-
99
- return (
100
- <CalculatorButton
101
- isShippingCalculatorOpen={ isShippingCalculatorOpen }
102
- setIsShippingCalculatorOpen={ setIsShippingCalculatorOpen }
103
- />
104
- );
105
- };
106
-
107
- interface TotalShippingProps {
108
- currency: Currency;
109
- values: {
110
- // eslint-disable-next-line camelcase
111
- total_shipping: string;
112
- // eslint-disable-next-line camelcase
113
- total_shipping_tax: string;
114
- }; // Values in use
115
- showCalculator?: boolean; //Whether to display the rate selector below the shipping total.
116
- showRateSelector?: boolean; // Whether to show shipping calculator or not.
117
- className?: string;
118
- }
119
-
120
- const TotalsShipping = ( {
121
- currency,
122
- values,
123
- showCalculator = true,
124
- showRateSelector = true,
125
- className,
126
- }: TotalShippingProps ): ReactElement => {
127
- const [ isShippingCalculatorOpen, setIsShippingCalculatorOpen ] = useState(
128
- false
129
- );
130
- const {
131
- shippingAddress,
132
- cartHasCalculatedShipping,
133
- shippingRates,
134
- shippingRatesLoading,
135
- } = useStoreCart();
136
-
137
- const totalShippingValue = getSetting(
138
- 'displayCartPricesIncludingTax',
139
- false
140
- )
141
- ? parseInt( values.total_shipping, 10 ) +
142
- parseInt( values.total_shipping_tax, 10 )
143
- : parseInt( values.total_shipping, 10 );
144
- const hasRates = hasShippingRate( shippingRates ) || totalShippingValue;
145
- const calculatorButtonProps = {
146
- isShippingCalculatorOpen,
147
- setIsShippingCalculatorOpen,
148
- };
149
-
150
- const selectedShippingRates = shippingRates.flatMap(
151
- ( shippingPackage ) => {
152
- return shippingPackage.shipping_rates
153
- .filter( ( rate ) => rate.selected )
154
- .flatMap( ( rate ) => rate.name );
155
- }
156
- );
157
-
158
- return (
159
- <div
160
- className={ classnames(
161
- 'wc-block-components-totals-shipping',
162
- className
163
- ) }
164
- >
165
- <TotalsItem
166
- label={ __( 'Shipping', 'woo-gutenberg-products-block' ) }
167
- value={
168
- cartHasCalculatedShipping ? (
169
- totalShippingValue
170
- ) : (
171
- <NoShippingPlaceholder
172
- showCalculator={ showCalculator }
173
- { ...calculatorButtonProps }
174
- />
175
- )
176
- }
177
- description={
178
- <>
179
- { cartHasCalculatedShipping && (
180
- <>
181
- <ShippingVia
182
- selectedShippingRates={
183
- selectedShippingRates
184
- }
185
- />
186
- <ShippingAddress
187
- shippingAddress={ shippingAddress }
188
- showCalculator={ showCalculator }
189
- { ...calculatorButtonProps }
190
- />
191
- </>
192
- ) }
193
- </>
194
- }
195
- currency={ currency }
196
- />
197
- { showCalculator && isShippingCalculatorOpen && (
198
- <ShippingCalculator
199
- onUpdate={ () => {
200
- setIsShippingCalculatorOpen( false );
201
- } }
202
- />
203
- ) }
204
- { showRateSelector && cartHasCalculatedShipping && (
205
- <ShippingRateSelector
206
- hasRates={ hasRates }
207
- shippingRates={ shippingRates }
208
- shippingRatesLoading={ shippingRatesLoading }
209
- />
210
- ) }
211
- </div>
212
- );
213
- };
214
-
215
- export default TotalsShipping;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/shipping/shipping-rate-selector.js DELETED
@@ -1,48 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import { Notice } from 'wordpress-components';
6
- import classnames from 'classnames';
7
-
8
- /**
9
- * Internal dependencies
10
- */
11
- import ShippingRatesControl from '../../shipping-rates-control';
12
-
13
- const ShippingRateSelector = ( {
14
- hasRates,
15
- shippingRates,
16
- shippingRatesLoading,
17
- } ) => {
18
- const legend = hasRates
19
- ? __( 'Shipping options', 'woo-gutenberg-products-block' )
20
- : __( 'Choose a shipping option', 'woo-gutenberg-products-block' );
21
- return (
22
- <fieldset className="wc-block-components-totals-shipping__fieldset">
23
- <legend className="screen-reader-text">{ legend }</legend>
24
- <ShippingRatesControl
25
- className="wc-block-components-totals-shipping__options"
26
- collapsible={ true }
27
- noResultsMessage={
28
- <Notice
29
- isDismissible={ false }
30
- className={ classnames(
31
- 'wc-block-components-shipping-rates-control__no-results-notice',
32
- 'woocommerce-error'
33
- ) }
34
- >
35
- { __(
36
- 'No shipping options were found.',
37
- 'woo-gutenberg-products-block'
38
- ) }
39
- </Notice>
40
- }
41
- shippingRates={ shippingRates }
42
- shippingRatesLoading={ shippingRatesLoading }
43
- />
44
- </fieldset>
45
- );
46
- };
47
-
48
- export default ShippingRateSelector;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/shipping/shipping-via.tsx DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
-
6
- export const ShippingVia = ( {
7
- selectedShippingRates,
8
- }: {
9
- selectedShippingRates: string[];
10
- } ): JSX.Element => {
11
- return (
12
- <div className="wc-block-components-totals-item__description wc-block-components-totals-shipping__via">
13
- { __( 'via', 'woo-gutenberg-products-block' ) }{ ' ' }
14
- { selectedShippingRates.join( ', ' ) }
15
- </div>
16
- );
17
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/shipping/stories/index.js DELETED
@@ -1,35 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { boolean, text } from '@storybook/addon-knobs';
5
- import { currencyKnob } from '@woocommerce/knobs';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import TotalsShipping from '../';
11
-
12
- export default {
13
- title: 'WooCommerce Blocks/@blocks-checkout/TotalsShipping',
14
- component: TotalsShipping,
15
- };
16
-
17
- export const Default = () => {
18
- const currency = currencyKnob();
19
- const showCalculator = boolean( 'Show calculator', true );
20
- const showRateSelector = boolean( 'Show rate selector', true );
21
- const totalShipping = text( 'Total shipping', '1000' );
22
- const totalShippingTax = text( 'Total shipping tax', '200' );
23
-
24
- return (
25
- <TotalsShipping
26
- currency={ currency }
27
- showCalculator={ showCalculator }
28
- showRateSelector={ showRateSelector }
29
- values={ {
30
- total_shipping: totalShipping,
31
- total_shipping_tax: totalShippingTax,
32
- } }
33
- />
34
- );
35
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/cart-checkout/totals/shipping/style.scss DELETED
@@ -1,42 +0,0 @@
1
- .wc-block-components-totals-shipping {
2
- // Added extra label for specificity.
3
- fieldset.wc-block-components-totals-shipping__fieldset {
4
- background-color: transparent;
5
- margin: 0;
6
- padding: 0;
7
- border: 0;
8
- }
9
-
10
- .wc-block-components-totals-shipping__via {
11
- margin-bottom: $gap;
12
- }
13
-
14
- .wc-block-components-totals-shipping__options {
15
- .wc-block-components-radio-control__label,
16
- .wc-block-components-radio-control__description,
17
- .wc-block-components-radio-control__secondary-label,
18
- .wc-block-components-radio-control__secondary-description {
19
- flex-basis: 100%;
20
- text-align: left;
21
- }
22
- }
23
-
24
- .wc-block-components-shipping-rates-control__no-results-notice {
25
- margin: 0 0 em($gap-small);
26
- }
27
-
28
- .wc-block-components-totals-shipping__change-address-button {
29
- @include link-button();
30
-
31
- &:hover,
32
- &:focus,
33
- &:active {
34
- opacity: 0.8;
35
- }
36
- }
37
- }
38
-
39
- // Extra classes for specificity.
40
- .theme-twentytwentyone.theme-twentytwentyone.theme-twentytwentyone .wc-block-components-totals-shipping__change-address-button {
41
- @include link-button();
42
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/checkbox-control/index.js DELETED
@@ -1,72 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { withInstanceId } from '@woocommerce/base-hocs/with-instance-id';
5
- import PropTypes from 'prop-types';
6
- import classNames from 'classnames';
7
-
8
- /**
9
- * Internal dependencies
10
- */
11
- import './style.scss';
12
-
13
- /**
14
- * Component used to show a checkbox control with styles.
15
- *
16
- * @param {Object} props Incoming props for the component.
17
- * @param {string} props.className CSS class used.
18
- * @param {string} props.label Label for component.
19
- * @param {string} props.id Id for component.
20
- * @param {string} props.instanceId Unique id for instance of component.
21
- * @param {function():any} props.onChange Function called when input changes.
22
- * @param {Object} props.rest Rest of properties spread.
23
- */
24
- const CheckboxControl = ( {
25
- className,
26
- label,
27
- id,
28
- instanceId,
29
- onChange,
30
- ...rest
31
- } ) => {
32
- const checkboxId = id || `checkbox-control-${ instanceId }`;
33
-
34
- return (
35
- <label
36
- className={ classNames(
37
- 'wc-block-components-checkbox',
38
- className
39
- ) }
40
- htmlFor={ checkboxId }
41
- >
42
- <input
43
- id={ checkboxId }
44
- className="wc-block-components-checkbox__input"
45
- type="checkbox"
46
- onChange={ ( event ) => onChange( event.target.checked ) }
47
- { ...rest }
48
- />
49
- <svg
50
- className="wc-block-components-checkbox__mark"
51
- aria-hidden="true"
52
- xmlns="http://www.w3.org/2000/svg"
53
- viewBox="0 0 24 20"
54
- >
55
- <path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z" />
56
- </svg>
57
-
58
- <span className="wc-block-components-checkbox__label">
59
- { label }
60
- </span>
61
- </label>
62
- );
63
- };
64
-
65
- CheckboxControl.propTypes = {
66
- className: PropTypes.string,
67
- label: PropTypes.string,
68
- id: PropTypes.string,
69
- onChange: PropTypes.func,
70
- };
71
-
72
- export default withInstanceId( CheckboxControl );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/checkbox-control/stories/index.js DELETED
@@ -1,27 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { text } from '@storybook/addon-knobs';
5
- import { useState } from 'react';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import CheckboxControl from '../';
11
-
12
- export default {
13
- title: 'WooCommerce Blocks/@base-components/CheckboxControl',
14
- component: CheckboxControl,
15
- };
16
-
17
- export const Default = () => {
18
- const [ checked, setChecked ] = useState( false );
19
-
20
- return (
21
- <CheckboxControl
22
- label={ text( 'Label', 'Yes please' ) }
23
- checked={ checked }
24
- onChange={ ( value ) => setChecked( value ) }
25
- />
26
- );
27
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/checkbox-control/style.scss DELETED
@@ -1,93 +0,0 @@
1
- .wc-block-components-checkbox {
2
- @include reset-typography();
3
- align-items: center;
4
- display: flex;
5
- height: 1em;
6
- position: relative;
7
-
8
- .wc-block-components-checkbox__input[type="checkbox"] {
9
- font-size: 1em;
10
- appearance: none;
11
- border: 2px solid $input-border-gray;
12
- border-radius: 2px;
13
- height: em(24px);
14
- width: em(24px);
15
- margin: 0;
16
- min-height: 24px;
17
- min-width: 24px;
18
- overflow: hidden;
19
- position: static;
20
- vertical-align: middle;
21
- background-color: #fff;
22
-
23
- &:checked {
24
- background: #fff;
25
- border-color: $input-border-gray;
26
- }
27
-
28
- &::before,
29
- &::after {
30
- content: "";
31
- }
32
-
33
- &:not(:checked) + .wc-block-components-checkbox__mark {
34
- display: none;
35
- }
36
-
37
- .has-dark-controls & {
38
- border-color: $controls-border-dark;
39
- background-color: $input-background-dark;
40
-
41
- &:checked {
42
- background: $input-background-dark;
43
- border-color: $controls-border-dark;
44
- }
45
- }
46
- }
47
-
48
- .wc-block-components-checkbox__mark {
49
- fill: #000;
50
- position: absolute;
51
- left: em(3px);
52
- top: em(-2px);
53
- width: em(18px);
54
- height: em(18px);
55
-
56
- .has-dark-controls & {
57
- fill: #fff;
58
- }
59
- }
60
-
61
- .wc-block-components-checkbox__label {
62
- padding-left: $gap;
63
- vertical-align: middle;
64
- }
65
- }
66
-
67
- // Hack to hide the check mark in IE11
68
- // See comment: https://github.com/woocommerce/woocommerce-gutenberg-products-block/pull/2320/#issuecomment-621936576
69
- @include ie11() {
70
- .wc-block-components-checkbox__mark {
71
- display: none;
72
- }
73
- }
74
-
75
- .theme-twentytwentyone {
76
- .wc-block-components-checkbox__input[type="checkbox"],
77
- .has-dark-controls .wc-block-components-checkbox__input[type="checkbox"] {
78
- background-color: #fff;
79
- border-color: var(--form--border-color);
80
- position: relative;
81
- }
82
-
83
- .wc-block-components-checkbox__input[type="checkbox"]:checked,
84
- .has-dark-controls
85
- .wc-block-components-checkbox__input[type="checkbox"]:checked {
86
- background-color: #fff;
87
- border-color: var(--form--border-color);
88
- }
89
-
90
- .wc-block-components-checkbox__mark {
91
- display: none;
92
- }
93
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/checkbox-list/index.js CHANGED
@@ -13,15 +13,6 @@ import './style.scss';
13
 
14
  /**
15
  * Component used to show a list of checkboxes in a group.
16
- *
17
- * @param {Object} props Incoming props for the component.
18
- * @param {string} props.className CSS class used.
19
- * @param {function(string):any} props.onChange Function called when inputs change.
20
- * @param {Array} props.options Options for list.
21
- * @param {Array} props.checked Which items are checked.
22
- * @param {boolean} props.isLoading If loading or not.
23
- * @param {boolean} props.isDisabled If inputs are disabled or not.
24
- * @param {number} props.limit Whether to limit the number of inputs showing.
25
  */
26
  const CheckboxList = ( {
27
  className,
@@ -58,7 +49,6 @@ const CheckboxList = ( {
58
  } }
59
  aria-expanded={ false }
60
  aria-label={ sprintf(
61
- /* translators: %s is referring the remaining count of options */
62
  _n(
63
  'Show %s more option',
64
  'Show %s more options',
@@ -69,7 +59,7 @@ const CheckboxList = ( {
69
  ) }
70
  >
71
  { sprintf(
72
- /* translators: %s number of options to reveal. */
73
  _n(
74
  'Show %s more',
75
  'Show %s more',
@@ -110,9 +100,9 @@ const CheckboxList = ( {
110
  const optionCount = options.length;
111
  const shouldTruncateOptions = optionCount > limit + 5;
112
  return (
113
- <>
114
  { options.map( ( option, index ) => (
115
- <Fragment key={ option.value }>
116
  <li
117
  { ...( shouldTruncateOptions &&
118
  ! showExpanded &&
@@ -120,15 +110,13 @@ const CheckboxList = ( {
120
  >
121
  <input
122
  type="checkbox"
123
- id={ option.value }
124
- value={ option.value }
125
- onChange={ ( event ) => {
126
- onChange( event.target.value );
127
- } }
128
- checked={ checked.includes( option.value ) }
129
  disabled={ isDisabled }
130
  />
131
- <label htmlFor={ option.value }>
132
  { option.label }
133
  </label>
134
  </li>
@@ -138,11 +126,10 @@ const CheckboxList = ( {
138
  </Fragment>
139
  ) ) }
140
  { shouldTruncateOptions && renderedShowLess }
141
- </>
142
  );
143
  }, [
144
  options,
145
- onChange,
146
  checked,
147
  showExpanded,
148
  limit,
@@ -153,7 +140,6 @@ const CheckboxList = ( {
153
 
154
  const classes = classNames(
155
  'wc-block-checkbox-list',
156
- 'wc-block-components-checkbox-list',
157
  {
158
  'is-loading': isLoading,
159
  },
@@ -171,8 +157,8 @@ CheckboxList.propTypes = {
171
  onChange: PropTypes.func,
172
  options: PropTypes.arrayOf(
173
  PropTypes.shape( {
 
174
  label: PropTypes.node.isRequired,
175
- value: PropTypes.string.isRequired,
176
  } )
177
  ),
178
  checked: PropTypes.array,
13
 
14
  /**
15
  * Component used to show a list of checkboxes in a group.
 
 
 
 
 
 
 
 
 
16
  */
17
  const CheckboxList = ( {
18
  className,
49
  } }
50
  aria-expanded={ false }
51
  aria-label={ sprintf(
 
52
  _n(
53
  'Show %s more option',
54
  'Show %s more options',
59
  ) }
60
  >
61
  { sprintf(
62
+ // translators: %s number of options to reveal.
63
  _n(
64
  'Show %s more',
65
  'Show %s more',
100
  const optionCount = options.length;
101
  const shouldTruncateOptions = optionCount > limit + 5;
102
  return (
103
+ <Fragment>
104
  { options.map( ( option, index ) => (
105
+ <Fragment key={ option.key }>
106
  <li
107
  { ...( shouldTruncateOptions &&
108
  ! showExpanded &&
110
  >
111
  <input
112
  type="checkbox"
113
+ id={ option.key }
114
+ value={ option.key }
115
+ onChange={ onChange }
116
+ checked={ checked.includes( option.key ) }
 
 
117
  disabled={ isDisabled }
118
  />
119
+ <label htmlFor={ option.key }>
120
  { option.label }
121
  </label>
122
  </li>
126
  </Fragment>
127
  ) ) }
128
  { shouldTruncateOptions && renderedShowLess }
129
+ </Fragment>
130
  );
131
  }, [
132
  options,
 
133
  checked,
134
  showExpanded,
135
  limit,
140
 
141
  const classes = classNames(
142
  'wc-block-checkbox-list',
 
143
  {
144
  'is-loading': isLoading,
145
  },
157
  onChange: PropTypes.func,
158
  options: PropTypes.arrayOf(
159
  PropTypes.shape( {
160
+ key: PropTypes.string.isRequired,
161
  label: PropTypes.node.isRequired,
 
162
  } )
163
  ),
164
  checked: PropTypes.array,
assets/js/base/components/checkbox-list/style.scss CHANGED
@@ -1,5 +1,5 @@
1
- .editor-styles-wrapper .wc-block-components-checkbox-list,
2
- .wc-block-components-checkbox-list {
3
  margin: 0;
4
  padding: 0;
5
  list-style: none outside;
1
+ .editor-styles-wrapper .wc-block-checkbox-list,
2
+ .wc-block-checkbox-list {
3
  margin: 0;
4
  padding: 0;
5
  list-style: none outside;
assets/js/base/components/checkout/form-step/index.js ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import classnames from 'classnames';
5
+ import PropTypes from 'prop-types';
6
+ import { __, sprintf } from '@wordpress/i18n';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import Label from '../../label';
12
+ import './style.scss';
13
+
14
+ const StepNumber = ( { stepNumber } ) => {
15
+ return (
16
+ <div className="wc-components-checkout-step__number">
17
+ <Label
18
+ label={ stepNumber }
19
+ screenReaderLabel={ sprintf(
20
+ __(
21
+ // translators: %s is a step number (1, 2, 3...)
22
+ 'Step %d',
23
+ 'woo-gutenberg-products-block'
24
+ ),
25
+ stepNumber
26
+ ) }
27
+ />
28
+ </div>
29
+ );
30
+ };
31
+
32
+ const StepHeading = ( { title, stepHeadingContent } ) => (
33
+ <div className="wc-components-checkout-step__heading">
34
+ <h4 className="wc-components-checkout-step__title">{ title }</h4>
35
+ <span className="wc-components-checkout-step__heading-content">
36
+ { stepHeadingContent }
37
+ </span>
38
+ </div>
39
+ );
40
+
41
+ const FormStep = ( {
42
+ id,
43
+ className,
44
+ stepNumber,
45
+ title,
46
+ description,
47
+ children,
48
+ stepHeadingContent = () => null,
49
+ } ) => {
50
+ return (
51
+ <div
52
+ className={ classnames( className, 'wc-components-checkout-step' ) }
53
+ id={ id }
54
+ >
55
+ <StepNumber stepNumber={ stepNumber } />
56
+ <StepHeading
57
+ title={ title }
58
+ stepHeadingContent={ stepHeadingContent() }
59
+ />
60
+ <span className="wc-components-checkout-step__description">
61
+ { description }
62
+ </span>
63
+ <div className="wc-components-checkout-step__content">
64
+ { children }
65
+ </div>
66
+ </div>
67
+ );
68
+ };
69
+
70
+ FormStep.propTypes = {
71
+ id: PropTypes.string,
72
+ className: PropTypes.string,
73
+ stepNumber: PropTypes.number,
74
+ title: PropTypes.string,
75
+ description: PropTypes.string,
76
+ children: PropTypes.node,
77
+ stepHeadingContent: PropTypes.func,
78
+ };
79
+
80
+ export default FormStep;
assets/js/base/components/chip/chip.js DELETED
@@ -1,74 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import PropTypes from 'prop-types';
5
- import classNames from 'classnames';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import './style.scss';
11
-
12
- /** @typedef {import('react')} React */
13
-
14
- /**
15
- * Component used to render a "chip" -- a list item containing some text.
16
- *
17
- * Each chip defaults to a list element but this can be customized by providing
18
- * a wrapperElement.
19
- *
20
- * @param {Object} props Incoming props for the component.
21
- * @param {string} props.text Text for chip content.
22
- * @param {string} props.screenReaderText Screenreader text for the content.
23
- * @param {string} props.element The element type for the chip.
24
- * @param {string} props.className CSS class used.
25
- * @param {string} props.radius Radius size.
26
- * @param {React.ReactChildren|null} props.children React children.
27
- * @param {Object} props.props Rest of props passed through to component.
28
- */
29
- const Chip = ( {
30
- text,
31
- screenReaderText = '',
32
- element = 'li',
33
- className = '',
34
- radius = 'small',
35
- children = null,
36
- ...props
37
- } ) => {
38
- const Wrapper = element;
39
- const wrapperClassName = classNames(
40
- className,
41
- 'wc-block-components-chip',
42
- 'wc-block-components-chip--radius-' + radius
43
- );
44
-
45
- const showScreenReaderText = Boolean(
46
- screenReaderText && screenReaderText !== text
47
- );
48
-
49
- return (
50
- // @ts-ignore
51
- <Wrapper className={ wrapperClassName } { ...props }>
52
- <span
53
- aria-hidden={ showScreenReaderText }
54
- className="wc-block-components-chip__text"
55
- >
56
- { text }
57
- </span>
58
- { showScreenReaderText && (
59
- <span className="screen-reader-text">{ screenReaderText }</span>
60
- ) }
61
- { children }
62
- </Wrapper>
63
- );
64
- };
65
-
66
- Chip.propTypes = {
67
- text: PropTypes.node.isRequired,
68
- screenReaderText: PropTypes.string,
69
- element: PropTypes.elementType,
70
- className: PropTypes.string,
71
- radius: PropTypes.oneOf( [ 'none', 'small', 'medium', 'large' ] ),
72
- };
73
-
74
- export default Chip;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/chip/index.js DELETED
@@ -1,2 +0,0 @@
1
- export { default as Chip } from './chip';
2
- export { default as RemovableChip } from './removable-chip';
 
 
assets/js/base/components/chip/removable-chip.js DELETED
@@ -1,105 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import PropTypes from 'prop-types';
5
- import classNames from 'classnames';
6
- import { __, sprintf } from '@wordpress/i18n';
7
- import { Icon, noAlt } from '@woocommerce/icons';
8
-
9
- /**
10
- * Internal dependencies
11
- */
12
- import Chip from './chip.js';
13
-
14
- /**
15
- * Component used to render a "chip" -- an item containing some text with
16
- * an X button to remove/dismiss each chip.
17
- *
18
- * @param {Object} props Incoming props for the component.
19
- * @param {string} props.ariaLabel Aria label content.
20
- * @param {string} props.className CSS class used.
21
- * @param {boolean} props.disabled Whether action is disabled or not.
22
- * @param {function():any} props.onRemove Function to call when remove event is fired.
23
- * @param {boolean} props.removeOnAnyClick Whether to expand click area for remove event.
24
- * @param {string} props.text The text for the chip.
25
- * @param {string} props.screenReaderText The screen reader text for the chip.
26
- * @param {Object} props.props Rest of props passed into component.
27
- */
28
- const RemovableChip = ( {
29
- ariaLabel = '',
30
- className = '',
31
- disabled = false,
32
- onRemove = () => void null,
33
- removeOnAnyClick = false,
34
- text,
35
- screenReaderText = '',
36
- ...props
37
- } ) => {
38
- const RemoveElement = removeOnAnyClick ? 'span' : 'button';
39
-
40
- if ( ! ariaLabel ) {
41
- const ariaLabelText =
42
- screenReaderText && typeof screenReaderText === 'string'
43
- ? screenReaderText
44
- : text;
45
- ariaLabel =
46
- typeof ariaLabelText !== 'string'
47
- ? /* translators: Remove chip. */
48
- __( 'Remove', 'woo-gutenberg-products-block' )
49
- : sprintf(
50
- /* translators: %s text of the chip to remove. */
51
- __( 'Remove "%s"', 'woo-gutenberg-products-block' ),
52
- ariaLabelText
53
- );
54
- }
55
-
56
- const clickableElementProps = {
57
- 'aria-label': ariaLabel,
58
- disabled,
59
- onClick: onRemove,
60
- onKeyDown: ( e ) => {
61
- if ( e.key === 'Backspace' || e.key === 'Delete' ) {
62
- onRemove();
63
- }
64
- },
65
- };
66
-
67
- const chipProps = removeOnAnyClick ? clickableElementProps : {};
68
- const removeProps = removeOnAnyClick
69
- ? { 'aria-hidden': true }
70
- : clickableElementProps;
71
-
72
- return (
73
- <Chip
74
- { ...props }
75
- { ...chipProps }
76
- className={ classNames( className, 'is-removable' ) }
77
- element={ removeOnAnyClick ? 'button' : props.element }
78
- screenReaderText={ screenReaderText }
79
- text={ text }
80
- >
81
- <RemoveElement
82
- className="wc-block-components-chip__remove"
83
- { ...removeProps }
84
- >
85
- <Icon
86
- className="wc-block-components-chip__remove-icon"
87
- srcElement={ noAlt }
88
- size={ 16 }
89
- />
90
- </RemoveElement>
91
- </Chip>
92
- );
93
- };
94
-
95
- RemovableChip.propTypes = {
96
- text: PropTypes.node.isRequired,
97
- ariaLabel: PropTypes.string,
98
- className: PropTypes.string,
99
- disabled: PropTypes.bool,
100
- onRemove: PropTypes.func,
101
- removeOnAnyClick: PropTypes.bool,
102
- screenReaderText: PropTypes.string,
103
- };
104
-
105
- export default RemovableChip;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/chip/stories/index.js DELETED
@@ -1,42 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { text, select, boolean } from '@storybook/addon-knobs';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import * as components from '../';
10
-
11
- export default {
12
- title: 'WooCommerce Blocks/@base-components/Chip',
13
- component: Chip,
14
- };
15
-
16
- const radii = [ 'none', 'small', 'medium', 'large' ];
17
-
18
- export const Chip = () => (
19
- <components.Chip
20
- text={ text( 'Text', 'example' ) }
21
- radius={ select( 'Radius', radii ) }
22
- screenReaderText={ text(
23
- 'Screen reader text',
24
- 'Example screen reader text'
25
- ) }
26
- element={ select( 'Element', [ 'li', 'div', 'span' ], 'li' ) }
27
- />
28
- );
29
-
30
- export const RemovableChip = () => (
31
- <components.RemovableChip
32
- text={ text( 'Text', 'example' ) }
33
- radius={ select( 'Radius', radii ) }
34
- screenReaderText={ text(
35
- 'Screen reader text',
36
- 'Example screen reader text'
37
- ) }
38
- disabled={ boolean( 'Disabled', false ) }
39
- removeOnAnyClick={ boolean( 'Remove on any click', false ) }
40
- element={ select( 'Element', [ 'li', 'div', 'span' ], 'li' ) }
41
- />
42
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/chip/style.scss DELETED
@@ -1,65 +0,0 @@
1
- .wc-block-components-chip {
2
- @include reset-typography();
3
- align-items: center;
4
- border: 0;
5
- display: inline-flex;
6
- padding: em($gap-smallest / 2) 0.5em em($gap-smallest);
7
- margin: 0 0.365em 0.365em 0;
8
- border-radius: 0;
9
- line-height: 1;
10
- max-width: 100%;
11
-
12
- // Chip might be a button, so we need to override theme styles.
13
- &,
14
- &:hover,
15
- &:focus,
16
- &:active {
17
- background: $gray-200;
18
- color: $gray-900;
19
- }
20
-
21
- &.wc-block-components-chip--radius-small {
22
- border-radius: 3px;
23
- }
24
- &.wc-block-components-chip--radius-medium {
25
- border-radius: 0.433em;
26
- }
27
- &.wc-block-components-chip--radius-large {
28
- border-radius: 2em;
29
- padding-left: 0.75em;
30
- padding-right: 0.75em;
31
- }
32
- .wc-block-components-chip__text {
33
- flex-grow: 1;
34
- }
35
- &.is-removable {
36
- padding-right: 0.5em;
37
- }
38
- &.is-removable .wc-block-components-chip__text {
39
- padding-right: 0.25em;
40
- }
41
- .wc-block-components-chip__remove {
42
- @include font-size(smaller);
43
- background: transparent;
44
- border: 0;
45
- appearance: none;
46
- padding: 0;
47
- }
48
-
49
- .wc-block-components-chip__remove-icon {
50
- vertical-align: middle;
51
- }
52
- }
53
-
54
- button.wc-block-components-chip:hover > .wc-block-components-chip__remove,
55
- button.wc-block-components-chip:focus > .wc-block-components-chip__remove,
56
- .wc-block-components-chip__remove:hover,
57
- .wc-block-components-chip__remove:focus {
58
- fill: $alert-red;
59
- }
60
-
61
- button.wc-block-components-chip:disabled > .wc-block-components-chip__remove,
62
- .wc-block-components-chip__remove:disabled {
63
- fill: $gray-600;
64
- cursor: not-allowed;
65
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/chip/test/__snapshots__/index.js.snap DELETED
@@ -1,312 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`Chip should render children nodes 1`] = `
4
- <li
5
- className="wc-block-components-chip wc-block-components-chip--radius-small"
6
- >
7
- <span
8
- aria-hidden={false}
9
- className="wc-block-components-chip__text"
10
- >
11
- Test
12
- </span>
13
- Lorem Ipsum
14
- </li>
15
- `;
16
-
17
- exports[`Chip should render defined radius 1`] = `
18
- <li
19
- className="wc-block-components-chip wc-block-components-chip--radius-large"
20
- >
21
- <span
22
- aria-hidden={false}
23
- className="wc-block-components-chip__text"
24
- >
25
- Test
26
- </span>
27
- </li>
28
- `;
29
-
30
- exports[`Chip should render nodes as the text 1`] = `
31
- <li
32
- className="wc-block-components-chip wc-block-components-chip--radius-small"
33
- >
34
- <span
35
- aria-hidden={false}
36
- className="wc-block-components-chip__text"
37
- >
38
- <h1>
39
- Test
40
- </h1>
41
- </span>
42
- </li>
43
- `;
44
-
45
- exports[`Chip should render screen reader text 1`] = `
46
- <li
47
- className="wc-block-components-chip wc-block-components-chip--radius-small"
48
- >
49
- <span
50
- aria-hidden={true}
51
- className="wc-block-components-chip__text"
52
- >
53
- Test
54
- </span>
55
- <span
56
- className="screen-reader-text"
57
- >
58
- Test 2
59
- </span>
60
- </li>
61
- `;
62
-
63
- exports[`Chip should render text 1`] = `
64
- <li
65
- className="wc-block-components-chip wc-block-components-chip--radius-small"
66
- >
67
- <span
68
- aria-hidden={false}
69
- className="wc-block-components-chip__text"
70
- >
71
- Test
72
- </span>
73
- </li>
74
- `;
75
-
76
- exports[`Chip with custom wrapper should render a chip made up of a div instead of a li 1`] = `
77
- <div
78
- className="wc-block-components-chip wc-block-components-chip--radius-small"
79
- >
80
- <span
81
- aria-hidden={false}
82
- className="wc-block-components-chip__text"
83
- >
84
- Test
85
- </span>
86
- </div>
87
- `;
88
-
89
- exports[`RemovableChip should render custom aria label 1`] = `
90
- <li
91
- className="is-removable wc-block-components-chip wc-block-components-chip--radius-small"
92
- >
93
- <span
94
- aria-hidden={false}
95
- className="wc-block-components-chip__text"
96
- >
97
- <h1>
98
- Test
99
- </h1>
100
- </span>
101
- <button
102
- aria-label="Aria test"
103
- className="wc-block-components-chip__remove"
104
- disabled={false}
105
- onClick={[Function]}
106
- onKeyDown={[Function]}
107
- >
108
- <svg
109
- aria-hidden={true}
110
- className="wc-block-components-chip__remove-icon"
111
- focusable={false}
112
- height={16}
113
- role="img"
114
- viewBox="0 0 20 20"
115
- width={16}
116
- xmlns="http://www.w3.org/2000/svg"
117
- >
118
- <path
119
- d="M14.95 6.46L11.41 10l3.54 3.54-1.41 1.41L10 11.42l-3.53 3.53-1.42-1.42L8.58 10 5.05 6.47l1.42-1.42L10 8.58l3.54-3.53z"
120
- />
121
- </svg>
122
- </button>
123
- </li>
124
- `;
125
-
126
- exports[`RemovableChip should render default aria label if text is a node 1`] = `
127
- <li
128
- className="is-removable wc-block-components-chip wc-block-components-chip--radius-small"
129
- >
130
- <span
131
- aria-hidden={true}
132
- className="wc-block-components-chip__text"
133
- >
134
- <h1>
135
- Test
136
- </h1>
137
- </span>
138
- <span
139
- className="screen-reader-text"
140
- >
141
- Test 2
142
- </span>
143
- <button
144
- aria-label="Remove \\"Test 2\\""
145
- className="wc-block-components-chip__remove"
146
- disabled={false}
147
- onClick={[Function]}
148
- onKeyDown={[Function]}
149
- >
150
- <svg
151
- aria-hidden={true}
152
- className="wc-block-components-chip__remove-icon"
153
- focusable={false}
154
- height={16}
155
- role="img"
156
- viewBox="0 0 20 20"
157
- width={16}
158
- xmlns="http://www.w3.org/2000/svg"
159
- >
160
- <path
161
- d="M14.95 6.46L11.41 10l3.54 3.54-1.41 1.41L10 11.42l-3.53 3.53-1.42-1.42L8.58 10 5.05 6.47l1.42-1.42L10 8.58l3.54-3.53z"
162
- />
163
- </svg>
164
- </button>
165
- </li>
166
- `;
167
-
168
- exports[`RemovableChip should render screen reader text aria label 1`] = `
169
- <li
170
- className="is-removable wc-block-components-chip wc-block-components-chip--radius-small"
171
- >
172
- <span
173
- aria-hidden={true}
174
- className="wc-block-components-chip__text"
175
- >
176
- Test
177
- </span>
178
- <span
179
- className="screen-reader-text"
180
- >
181
- Test 2
182
- </span>
183
- <button
184
- aria-label="Remove \\"Test 2\\""
185
- className="wc-block-components-chip__remove"
186
- disabled={false}
187
- onClick={[Function]}
188
- onKeyDown={[Function]}
189
- >
190
- <svg
191
- aria-hidden={true}
192
- className="wc-block-components-chip__remove-icon"
193
- focusable={false}
194
- height={16}
195
- role="img"
196
- viewBox="0 0 20 20"
197
- width={16}
198
- xmlns="http://www.w3.org/2000/svg"
199
- >
200
- <path
201
- d="M14.95 6.46L11.41 10l3.54 3.54-1.41 1.41L10 11.42l-3.53 3.53-1.42-1.42L8.58 10 5.05 6.47l1.42-1.42L10 8.58l3.54-3.53z"
202
- />
203
- </svg>
204
- </button>
205
- </li>
206
- `;
207
-
208
- exports[`RemovableChip should render text and the remove button 1`] = `
209
- <li
210
- className="is-removable wc-block-components-chip wc-block-components-chip--radius-small"
211
- >
212
- <span
213
- aria-hidden={false}
214
- className="wc-block-components-chip__text"
215
- >
216
- Test
217
- </span>
218
- <button
219
- aria-label="Remove \\"Test\\""
220
- className="wc-block-components-chip__remove"
221
- disabled={false}
222
- onClick={[Function]}
223
- onKeyDown={[Function]}
224
- >
225
- <svg
226
- aria-hidden={true}
227
- className="wc-block-components-chip__remove-icon"
228
- focusable={false}
229
- height={16}
230
- role="img"
231
- viewBox="0 0 20 20"
232
- width={16}
233
- xmlns="http://www.w3.org/2000/svg"
234
- >
235
- <path
236
- d="M14.95 6.46L11.41 10l3.54 3.54-1.41 1.41L10 11.42l-3.53 3.53-1.42-1.42L8.58 10 5.05 6.47l1.42-1.42L10 8.58l3.54-3.53z"
237
- />
238
- </svg>
239
- </button>
240
- </li>
241
- `;
242
-
243
- exports[`RemovableChip should render with disabled remove button 1`] = `
244
- <li
245
- className="is-removable wc-block-components-chip wc-block-components-chip--radius-small"
246
- >
247
- <span
248
- aria-hidden={false}
249
- className="wc-block-components-chip__text"
250
- >
251
- Test
252
- </span>
253
- <button
254
- aria-label="Remove \\"Test\\""
255
- className="wc-block-components-chip__remove"
256
- disabled={true}
257
- onClick={[Function]}
258
- onKeyDown={[Function]}
259
- >
260
- <svg
261
- aria-hidden={true}
262
- className="wc-block-components-chip__remove-icon"
263
- focusable={false}
264
- height={16}
265
- role="img"
266
- viewBox="0 0 20 20"
267
- width={16}
268
- xmlns="http://www.w3.org/2000/svg"
269
- >
270
- <path
271
- d="M14.95 6.46L11.41 10l3.54 3.54-1.41 1.41L10 11.42l-3.53 3.53-1.42-1.42L8.58 10 5.05 6.47l1.42-1.42L10 8.58l3.54-3.53z"
272
- />
273
- </svg>
274
- </button>
275
- </li>
276
- `;
277
-
278
- exports[`RemovableChip with removeOnAnyClick should be a button when removeOnAnyClick is set to true 1`] = `
279
- <button
280
- aria-label="Remove \\"Test\\""
281
- className="is-removable wc-block-components-chip wc-block-components-chip--radius-small"
282
- disabled={false}
283
- onClick={[Function]}
284
- onKeyDown={[Function]}
285
- >
286
- <span
287
- aria-hidden={false}
288
- className="wc-block-components-chip__text"
289
- >
290
- Test
291
- </span>
292
- <span
293
- aria-hidden={true}
294
- className="wc-block-components-chip__remove"
295
- >
296
- <svg
297
- aria-hidden={true}
298
- className="wc-block-components-chip__remove-icon"
299
- focusable={false}
300
- height={16}
301
- role="img"
302
- viewBox="0 0 20 20"
303
- width={16}
304
- xmlns="http://www.w3.org/2000/svg"
305
- >
306
- <path
307
- d="M14.95 6.46L11.41 10l3.54 3.54-1.41 1.41L10 11.42l-3.53 3.53-1.42-1.42L8.58 10 5.05 6.47l1.42-1.42L10 8.58l3.54-3.53z"
308
- />
309
- </svg>
310
- </span>
311
- </button>
312
- `;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/chip/test/index.js DELETED
@@ -1,109 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import TestRenderer from 'react-test-renderer';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import { Chip, RemovableChip } from '..';
10
-
11
- describe( 'Chip', () => {
12
- test( 'should render text', () => {
13
- const component = TestRenderer.create( <Chip text="Test" /> );
14
-
15
- expect( component.toJSON() ).toMatchSnapshot();
16
- } );
17
-
18
- test( 'should render nodes as the text', () => {
19
- const component = TestRenderer.create(
20
- <Chip text={ <h1>Test</h1> } />
21
- );
22
-
23
- expect( component.toJSON() ).toMatchSnapshot();
24
- } );
25
-
26
- test( 'should render defined radius', () => {
27
- const component = TestRenderer.create(
28
- <Chip text="Test" radius="large" />
29
- );
30
-
31
- expect( component.toJSON() ).toMatchSnapshot();
32
- } );
33
-
34
- test( 'should render screen reader text', () => {
35
- const component = TestRenderer.create(
36
- <Chip text="Test" screenReaderText="Test 2" />
37
- );
38
-
39
- expect( component.toJSON() ).toMatchSnapshot();
40
- } );
41
-
42
- test( 'should render children nodes', () => {
43
- const component = TestRenderer.create(
44
- <Chip text="Test">Lorem Ipsum</Chip>
45
- );
46
-
47
- expect( component.toJSON() ).toMatchSnapshot();
48
- } );
49
-
50
- describe( 'with custom wrapper', () => {
51
- test( 'should render a chip made up of a div instead of a li', () => {
52
- const component = TestRenderer.create(
53
- <Chip text="Test" element="div" />
54
- );
55
-
56
- expect( component.toJSON() ).toMatchSnapshot();
57
- } );
58
- } );
59
- } );
60
-
61
- describe( 'RemovableChip', () => {
62
- test( 'should render text and the remove button', () => {
63
- const component = TestRenderer.create( <RemovableChip text="Test" /> );
64
-
65
- expect( component.toJSON() ).toMatchSnapshot();
66
- } );
67
-
68
- test( 'should render with disabled remove button', () => {
69
- const component = TestRenderer.create(
70
- <RemovableChip text="Test" disabled={ true } />
71
- );
72
-
73
- expect( component.toJSON() ).toMatchSnapshot();
74
- } );
75
-
76
- test( 'should render custom aria label', () => {
77
- const component = TestRenderer.create(
78
- <RemovableChip text={ <h1>Test</h1> } ariaLabel="Aria test" />
79
- );
80
-
81
- expect( component.toJSON() ).toMatchSnapshot();
82
- } );
83
-
84
- test( 'should render default aria label if text is a node', () => {
85
- const component = TestRenderer.create(
86
- <RemovableChip text={ <h1>Test</h1> } screenReaderText="Test 2" />
87
- );
88
-
89
- expect( component.toJSON() ).toMatchSnapshot();
90
- } );
91
-
92
- test( 'should render screen reader text aria label', () => {
93
- const component = TestRenderer.create(
94
- <RemovableChip text="Test" screenReaderText="Test 2" />
95
- );
96
-
97
- expect( component.toJSON() ).toMatchSnapshot();
98
- } );
99
-
100
- describe( 'with removeOnAnyClick', () => {
101
- test( 'should be a button when removeOnAnyClick is set to true', () => {
102
- const component = TestRenderer.create(
103
- <RemovableChip text="Test" removeOnAnyClick={ true } />
104
- );
105
-
106
- expect( component.toJSON() ).toMatchSnapshot();
107
- } );
108
- } );
109
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/country-input/CountryInputProps.ts DELETED
@@ -1,15 +0,0 @@
1
- export interface CountryInputProps {
2
- className?: string;
3
- label: string;
4
- id: string;
5
- autoComplete?: string;
6
- value: string;
7
- onChange: ( value: string ) => void;
8
- required?: boolean;
9
- errorMessage?: string;
10
- errorId: null | 'shipping-missing-country';
11
- }
12
-
13
- export type CountryInputWithCountriesProps = CountryInputProps & {
14
- countries: Record< string, string >;
15
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/country-input/billing-country-input.tsx DELETED
@@ -1,16 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { ALLOWED_COUNTRIES } from '@woocommerce/block-settings';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import CountryInput from './country-input';
10
- import type { CountryInputProps } from './CountryInputProps';
11
-
12
- const BillingCountryInput = ( props: CountryInputProps ): JSX.Element => {
13
- return <CountryInput countries={ ALLOWED_COUNTRIES } { ...props } />;
14
- };
15
-
16
- export default BillingCountryInput;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/country-input/country-input.tsx DELETED
@@ -1,84 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { useMemo } from '@wordpress/element';
5
- import { __ } from '@wordpress/i18n';
6
- import { decodeEntities } from '@wordpress/html-entities';
7
- import classnames from 'classnames';
8
-
9
- /**
10
- * Internal dependencies
11
- */
12
- import { ValidatedSelect } from '../select';
13
- import './style.scss';
14
- import type { CountryInputWithCountriesProps } from './CountryInputProps';
15
-
16
- const CountryInput = ( {
17
- className,
18
- countries,
19
- id,
20
- label,
21
- onChange,
22
- value = '',
23
- autoComplete = 'off',
24
- required = false,
25
- errorId,
26
- errorMessage = __(
27
- 'Please select a country.',
28
- 'woo-gutenberg-products-block'
29
- ),
30
- }: CountryInputWithCountriesProps ): JSX.Element => {
31
- const options = useMemo(
32
- () =>
33
- Object.keys( countries ).map( ( key ) => ( {
34
- key,
35
- name: decodeEntities( countries[ key ] ),
36
- } ) ),
37
- [ countries ]
38
- );
39
-
40
- return (
41
- <div
42
- className={ classnames(
43
- className,
44
- 'wc-block-components-country-input'
45
- ) }
46
- >
47
- <ValidatedSelect
48
- id={ id }
49
- label={ label }
50
- onChange={ onChange }
51
- options={ options }
52
- value={ options.find( ( option ) => option.key === value ) }
53
- errorId={ errorId }
54
- errorMessage={ errorMessage }
55
- required={ required }
56
- />
57
- { autoComplete !== 'off' && (
58
- <input
59
- type="text"
60
- aria-hidden={ true }
61
- autoComplete={ autoComplete }
62
- value={ value }
63
- onChange={ ( event ) => {
64
- const textValue = event.target.value;
65
- const foundOption = options.find(
66
- ( option ) => option.key === textValue
67
- );
68
- onChange( foundOption ? foundOption.key : '' );
69
- } }
70
- style={ {
71
- minHeight: '0',
72
- height: '0',
73
- border: '0',
74
- padding: '0',
75
- position: 'absolute',
76
- } }
77
- tabIndex={ -1 }
78
- />
79
- ) }
80
- </div>
81
- );
82
- };
83
-
84
- export default CountryInput;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/country-input/index.ts DELETED
@@ -1,3 +0,0 @@
1
- export { default as CountryInput } from './country-input';
2
- export { default as BillingCountryInput } from './billing-country-input';
3
- export { default as ShippingCountryInput } from './shipping-country-input';
 
 
 
assets/js/base/components/country-input/shipping-country-input.tsx DELETED
@@ -1,16 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { SHIPPING_COUNTRIES } from '@woocommerce/block-settings';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import CountryInput from './country-input';
10
- import { CountryInputProps } from './CountryInputProps';
11
-
12
- const ShippingCountryInput = ( props: CountryInputProps ): JSX.Element => {
13
- return <CountryInput countries={ SHIPPING_COUNTRIES } { ...props } />;
14
- };
15
-
16
- export default ShippingCountryInput;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/country-input/stories/countries-filler.js DELETED
@@ -1,251 +0,0 @@
1
- export const countries = {
2
- AX: '&#197;land Islands',
3
- AF: 'Afghanistan',
4
- AL: 'Albania',
5
- DZ: 'Algeria',
6
- AS: 'American Samoa',
7
- AD: 'Andorra',
8
- AO: 'Angola',
9
- AI: 'Anguilla',
10
- AQ: 'Antarctica',
11
- AG: 'Antigua and Barbuda',
12
- AR: 'Argentina',
13
- AM: 'Armenia',
14
- AW: 'Aruba',
15
- AU: 'Australia',
16
- AT: 'Austria',
17
- AZ: 'Azerbaijan',
18
- BS: 'Bahamas',
19
- BH: 'Bahrain',
20
- BD: 'Bangladesh',
21
- BB: 'Barbados',
22
- BY: 'Belarus',
23
- PW: 'Belau',
24
- BE: 'Belgium',
25
- BZ: 'Belize',
26
- BJ: 'Benin',
27
- BM: 'Bermuda',
28
- BT: 'Bhutan',
29
- BO: 'Bolivia',
30
- BQ: 'Bonaire, Saint Eustatius and Saba',
31
- BA: 'Bosnia and Herzegovina',
32
- BW: 'Botswana',
33
- BV: 'Bouvet Island',
34
- BR: 'Brazil',
35
- IO: 'British Indian Ocean Territory',
36
- BN: 'Brunei',
37
- BG: 'Bulgaria',
38
- BF: 'Burkina Faso',
39
- BI: 'Burundi',
40
- KH: 'Cambodia',
41
- CM: 'Cameroon',
42
- CA: 'Canada',
43
- CV: 'Cape Verde',
44
- KY: 'Cayman Islands',
45
- CF: 'Central African Republic',
46
- TD: 'Chad',
47
- CL: 'Chile',
48
- CN: 'China',
49
- CX: 'Christmas Island',
50
- CC: 'Cocos (Keeling) Islands',
51
- CO: 'Colombia',
52
- KM: 'Comoros',
53
- CG: 'Congo (Brazzaville)',
54
- CD: 'Congo (Kinshasa)',
55
- CK: 'Cook Islands',
56
- CR: 'Costa Rica',
57
- HR: 'Croatia',
58
- CU: 'Cuba',
59
- CW: 'Cura&ccedil;ao',
60
- CY: 'Cyprus',
61
- CZ: 'Czech Republic',
62
- DK: 'Denmark',
63
- DJ: 'Djibouti',
64
- DM: 'Dominica',
65
- DO: 'Dominican Republic',
66
- EC: 'Ecuador',
67
- EG: 'Egypt',
68
- SV: 'El Salvador',
69
- GQ: 'Equatorial Guinea',
70
- ER: 'Eritrea',
71
- EE: 'Estonia',
72
- ET: 'Ethiopia',
73
- FK: 'Falkland Islands',
74
- FO: 'Faroe Islands',
75
- FJ: 'Fiji',
76
- FI: 'Finland',
77
- FR: 'France',
78
- GF: 'French Guiana',
79
- PF: 'French Polynesia',
80
- TF: 'French Southern Territories',
81
- GA: 'Gabon',
82
- GM: 'Gambia',
83
- GE: 'Georgia',
84
- DE: 'Germany',
85
- GH: 'Ghana',
86
- GI: 'Gibraltar',
87
- GR: 'Greece',
88
- GL: 'Greenland',
89
- GD: 'Grenada',
90
- GP: 'Guadeloupe',
91
- GU: 'Guam',
92
- GT: 'Guatemala',
93
- GG: 'Guernsey',
94
- GN: 'Guinea',
95
- GW: 'Guinea-Bissau',
96
- GY: 'Guyana',
97
- HT: 'Haiti',
98
- HM: 'Heard Island and McDonald Islands',
99
- HN: 'Honduras',
100
- HK: 'Hong Kong',
101
- HU: 'Hungary',
102
- IS: 'Iceland',
103
- IN: 'India',
104
- ID: 'Indonesia',
105
- IR: 'Iran',
106
- IQ: 'Iraq',
107
- IE: 'Ireland',
108
- IM: 'Isle of Man',
109
- IL: 'Israel',
110
- IT: 'Italy',
111
- CI: 'Ivory Coast',
112
- JM: 'Jamaica',
113
- JP: 'Japan',
114
- JE: 'Jersey',
115
- JO: 'Jordan',
116
- KZ: 'Kazakhstan',
117
- KE: 'Kenya',
118
- KI: 'Kiribati',
119
- KW: 'Kuwait',
120
- KG: 'Kyrgyzstan',
121
- LA: 'Laos',
122
- LV: 'Latvia',
123
- LB: 'Lebanon',
124
- LS: 'Lesotho',
125
- LR: 'Liberia',
126
- LY: 'Libya',
127
- LI: 'Liechtenstein',
128
- LT: 'Lithuania',
129
- LU: 'Luxembourg',
130
- MO: 'Macao',
131
- MG: 'Madagascar',
132
- MW: 'Malawi',
133
- MY: 'Malaysia',
134
- MV: 'Maldives',
135
- ML: 'Mali',
136
- MT: 'Malta',
137
- MH: 'Marshall Islands',
138
- MQ: 'Martinique',
139
- MR: 'Mauritania',
140
- MU: 'Mauritius',
141
- YT: 'Mayotte',
142
- MX: 'Mexico',
143
- FM: 'Micronesia',
144
- MD: 'Moldova',
145
- MC: 'Monaco',
146
- MN: 'Mongolia',
147
- ME: 'Montenegro',
148
- MS: 'Montserrat',
149
- MA: 'Morocco',
150
- MZ: 'Mozambique',
151
- MM: 'Myanmar',
152
- NA: 'Namibia',
153
- NR: 'Nauru',
154
- NP: 'Nepal',
155
- NL: 'Netherlands',
156
- NC: 'New Caledonia',
157
- NZ: 'New Zealand',
158
- NI: 'Nicaragua',
159
- NE: 'Niger',
160
- NG: 'Nigeria',
161
- NU: 'Niue',
162
- NF: 'Norfolk Island',
163
- KP: 'North Korea',
164
- MK: 'North Macedonia',
165
- MP: 'Northern Mariana Islands',
166
- NO: 'Norway',
167
- OM: 'Oman',
168
- PK: 'Pakistan',
169
- PS: 'Palestinian Territory',
170
- PA: 'Panama',
171
- PG: 'Papua New Guinea',
172
- PY: 'Paraguay',
173
- PE: 'Peru',
174
- PH: 'Philippines',
175
- PN: 'Pitcairn',
176
- PL: 'Poland',
177
- PT: 'Portugal',
178
- PR: 'Puerto Rico',
179
- QA: 'Qatar',
180
- RE: 'Reunion',
181
- RO: 'Romania',
182
- RU: 'Russia',
183
- RW: 'Rwanda',
184
- ST: 'S&atilde;o Tom&eacute; and Pr&iacute;ncipe',
185
- BL: 'Saint Barth&eacute;lemy',
186
- SH: 'Saint Helena',
187
- KN: 'Saint Kitts and Nevis',
188
- LC: 'Saint Lucia',
189
- SX: 'Saint Martin (Dutch part)',
190
- MF: 'Saint Martin (French part)',
191
- PM: 'Saint Pierre and Miquelon',
192
- VC: 'Saint Vincent and the Grenadines',
193
- WS: 'Samoa',
194
- SM: 'San Marino',
195
- SA: 'Saudi Arabia',
196
- SN: 'Senegal',
197
- RS: 'Serbia',
198
- SC: 'Seychelles',
199
- SL: 'Sierra Leone',
200
- SG: 'Singapore',
201
- SK: 'Slovakia',
202
- SI: 'Slovenia',
203
- SB: 'Solomon Islands',
204
- SO: 'Somalia',
205
- ZA: 'South Africa',
206
- GS: 'South Georgia/Sandwich Islands',
207
- KR: 'South Korea',
208
- SS: 'South Sudan',
209
- ES: 'Spain',
210
- LK: 'Sri Lanka',
211
- SD: 'Sudan',
212
- SR: 'Suriname',
213
- SJ: 'Svalbard and Jan Mayen',
214
- SZ: 'Swaziland',
215
- SE: 'Sweden',
216
- CH: 'Switzerland',
217
- SY: 'Syria',
218
- TW: 'Taiwan',
219
- TJ: 'Tajikistan',
220
- TZ: 'Tanzania',
221
- TH: 'Thailand',
222
- TL: 'Timor-Leste',
223
- TG: 'Togo',
224
- TK: 'Tokelau',
225
- TO: 'Tonga',
226
- TT: 'Trinidad and Tobago',
227
- TN: 'Tunisia',
228
- TR: 'Turkey',
229
- TM: 'Turkmenistan',
230
- TC: 'Turks and Caicos Islands',
231
- TV: 'Tuvalu',
232
- UG: 'Uganda',
233
- UA: 'Ukraine',
234
- AE: 'United Arab Emirates',
235
- GB: 'United Kingdom (UK)',
236
- US: 'United States (US)',
237
- UM: 'United States (US) Minor Outlying Islands',
238
- UY: 'Uruguay',
239
- UZ: 'Uzbekistan',
240
- VU: 'Vanuatu',
241
- VA: 'Vatican',
242
- VE: 'Venezuela',
243
- VN: 'Vietnam',
244
- VG: 'Virgin Islands (British)',
245
- VI: 'Virgin Islands (US)',
246
- WF: 'Wallis and Futuna',
247
- EH: 'Western Sahara',
248
- YE: 'Yemen',
249
- ZM: 'Zambia',
250
- ZW: 'Zimbabwe',
251
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/country-input/stories/index.js DELETED
@@ -1,53 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { text } from '@storybook/addon-knobs';
5
- import { useState, useEffect } from '@wordpress/element';
6
- import {
7
- ValidationContextProvider,
8
- useValidationContext,
9
- } from '@woocommerce/base-context';
10
-
11
- /**
12
- * Internal dependencies
13
- */
14
- import { CountryInput } from '../';
15
- import { countries as exampleCountries } from './countries-filler';
16
-
17
- export default {
18
- title: 'WooCommerce Blocks/@base-components/CountryInput',
19
- component: CountryInput,
20
- };
21
-
22
- const StoryComponent = ( { label, errorMessage } ) => {
23
- const [ selectedCountry, selectCountry ] = useState();
24
- const {
25
- setValidationErrors,
26
- clearValidationError,
27
- } = useValidationContext();
28
- useEffect( () => {
29
- setValidationErrors( { country: errorMessage } );
30
- }, [ errorMessage, setValidationErrors ] );
31
- const updateCountry = ( country ) => {
32
- clearValidationError( 'country' );
33
- selectCountry( country );
34
- };
35
- return (
36
- <CountryInput
37
- countries={ exampleCountries }
38
- label={ label }
39
- value={ selectedCountry }
40
- onChange={ updateCountry }
41
- />
42
- );
43
- };
44
-
45
- export const Default = () => {
46
- const label = text( 'Input Label', 'Countries:' );
47
- const errorMessage = text( 'Error Message', '' );
48
- return (
49
- <ValidationContextProvider>
50
- <StoryComponent label={ label } errorMessage={ errorMessage } />
51
- </ValidationContextProvider>
52
- );
53
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/country-input/style.scss DELETED
@@ -1,3 +0,0 @@
1
- .wc-block-components-country-input {
2
- margin-top: em($gap-large);
3
- }
 
 
 
assets/js/base/components/dropdown-selector/index.js DELETED
@@ -1,212 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import PropTypes from 'prop-types';
5
- import { useCallback, useRef } from '@wordpress/element';
6
- import classNames from 'classnames';
7
- import Downshift from 'downshift';
8
- import { __, sprintf } from '@wordpress/i18n';
9
-
10
- /**
11
- * Internal dependencies
12
- */
13
- import DropdownSelectorInput from './input';
14
- import DropdownSelectorInputWrapper from './input-wrapper';
15
- import DropdownSelectorMenu from './menu';
16
- import DropdownSelectorSelectedChip from './selected-chip';
17
- import DropdownSelectorSelectedValue from './selected-value';
18
- import './style.scss';
19
-
20
- /**
21
- * Component used to show an input box with a dropdown with suggestions.
22
- *
23
- * @param {Object} props Incoming props for the component.
24
- * @param {string} props.attributeLabel Label for the attributes.
25
- * @param {string} props.className CSS class used.
26
- * @param {Array} props.checked Which items are checked.
27
- * @param {string} props.inputLabel Label used for the input.
28
- * @param {boolean} props.isDisabled Whether the input is disabled or not.
29
- * @param {boolean} props.isLoading Whether the input is loading.
30
- * @param {boolean} props.multiple Whether multi-select is allowed.
31
- * @param {function():any} props.onChange Function to be called when onChange event fires.
32
- * @param {Array} props.options The option values to show in the select.
33
- */
34
- const DropdownSelector = ( {
35
- attributeLabel = '',
36
- className,
37
- checked = [],
38
- inputLabel = '',
39
- isDisabled = false,
40
- isLoading = false,
41
- multiple = false,
42
- onChange = () => {},
43
- options = [],
44
- } ) => {
45
- const inputRef = useRef( null );
46
-
47
- const classes = classNames(
48
- className,
49
- 'wc-block-dropdown-selector',
50
- 'wc-block-components-dropdown-selector',
51
- {
52
- 'is-disabled': isDisabled,
53
- 'is-loading': isLoading,
54
- }
55
- );
56
-
57
- /**
58
- * State reducer for the downshift component.
59
- * See: https://github.com/downshift-js/downshift#statereducer
60
- */
61
- const stateReducer = useCallback(
62
- ( state, changes ) => {
63
- switch ( changes.type ) {
64
- case Downshift.stateChangeTypes.keyDownEnter:
65
- case Downshift.stateChangeTypes.clickItem:
66
- return {
67
- ...changes,
68
- highlightedIndex: state.highlightedIndex,
69
- isOpen: multiple,
70
- inputValue: '',
71
- };
72
- case Downshift.stateChangeTypes.blurInput:
73
- case Downshift.stateChangeTypes.mouseUp:
74
- return {
75
- ...changes,
76
- inputValue: state.inputValue,
77
- };
78
- default:
79
- return changes;
80
- }
81
- },
82
- [ multiple ]
83
- );
84
-
85
- return (
86
- <Downshift
87
- onChange={ onChange }
88
- selectedItem={ null }
89
- stateReducer={ stateReducer }
90
- >
91
- { ( {
92
- getInputProps,
93
- getItemProps,
94
- getLabelProps,
95
- getMenuProps,
96
- highlightedIndex,
97
- inputValue,
98
- isOpen,
99
- openMenu,
100
- } ) => (
101
- <div
102
- className={ classNames( classes, {
103
- 'is-multiple': multiple,
104
- 'is-single': ! multiple,
105
- 'has-checked': checked.length > 0,
106
- 'is-open': isOpen,
107
- } ) }
108
- >
109
- { /* eslint-disable-next-line jsx-a11y/label-has-for */ }
110
- <label
111
- { ...getLabelProps( {
112
- className: 'screen-reader-text',
113
- } ) }
114
- >
115
- { inputLabel }
116
- </label>
117
- <DropdownSelectorInputWrapper
118
- isOpen={ isOpen }
119
- onClick={ () => inputRef.current.focus() }
120
- >
121
- { checked.map( ( value ) => {
122
- const option = options.find(
123
- ( o ) => o.value === value
124
- );
125
- const onRemoveItem = ( val ) => {
126
- onChange( val );
127
- inputRef.current.focus();
128
- };
129
- return multiple ? (
130
- <DropdownSelectorSelectedChip
131
- key={ value }
132
- onRemoveItem={ onRemoveItem }
133
- option={ option }
134
- />
135
- ) : (
136
- <DropdownSelectorSelectedValue
137
- key={ value }
138
- onClick={ () => inputRef.current.focus() }
139
- onRemoveItem={ onRemoveItem }
140
- option={ option }
141
- />
142
- );
143
- } ) }
144
- <DropdownSelectorInput
145
- checked={ checked }
146
- getInputProps={ getInputProps }
147
- inputRef={ inputRef }
148
- isDisabled={ isDisabled }
149
- onFocus={ openMenu }
150
- onRemoveItem={ ( val ) => {
151
- onChange( val );
152
- inputRef.current.focus();
153
- } }
154
- placeholder={
155
- checked.length > 0 && multiple
156
- ? null
157
- : sprintf(
158
- /* translators: %s attribute name. */
159
- __(
160
- 'Any %s',
161
- 'woo-gutenberg-products-block'
162
- ),
163
- attributeLabel
164
- )
165
- }
166
- tabIndex={
167
- // When it's a single selector and there is one element selected,
168
- // we make the input non-focusable with the keyboard because it's
169
- // visually hidden. The input is still rendered, though, because it
170
- // must be possible to focus it when pressing the select value chip.
171
- ! multiple && checked.length > 0 ? '-1' : '0'
172
- }
173
- value={ inputValue }
174
- />
175
- </DropdownSelectorInputWrapper>
176
- { isOpen && ! isDisabled && (
177
- <DropdownSelectorMenu
178
- checked={ checked }
179
- getItemProps={ getItemProps }
180
- getMenuProps={ getMenuProps }
181
- highlightedIndex={ highlightedIndex }
182
- options={ options.filter(
183
- ( option ) =>
184
- ! inputValue ||
185
- option.value.startsWith( inputValue )
186
- ) }
187
- />
188
- ) }
189
- </div>
190
- ) }
191
- </Downshift>
192
- );
193
- };
194
-
195
- DropdownSelector.propTypes = {
196
- attributeLabel: PropTypes.string,
197
- checked: PropTypes.array,
198
- className: PropTypes.string,
199
- inputLabel: PropTypes.string,
200
- isDisabled: PropTypes.bool,
201
- isLoading: PropTypes.bool,
202
- limit: PropTypes.number,
203
- onChange: PropTypes.func,
204
- options: PropTypes.arrayOf(
205
- PropTypes.shape( {
206
- label: PropTypes.node.isRequired,
207
- value: PropTypes.string.isRequired,
208
- } )
209
- ),
210
- };
211
-
212
- export default DropdownSelector;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/dropdown-selector/input-wrapper.js DELETED
@@ -1,13 +0,0 @@
1
- const DropdownSelectorInputWrapper = ( { children, onClick } ) => {
2
- return (
3
- /* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */
4
- <div
5
- className="wc-block-dropdown-selector__input-wrapper wc-block-components-dropdown-selector__input-wrapper"
6
- onClick={ onClick }
7
- >
8
- { children }
9
- </div>
10
- );
11
- };
12
-
13
- export default DropdownSelectorInputWrapper;
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/dropdown-selector/input.js DELETED
@@ -1,36 +0,0 @@
1
- const DropdownSelectorInput = ( {
2
- checked,
3
- getInputProps,
4
- inputRef,
5
- isDisabled,
6
- onFocus,
7
- onRemoveItem,
8
- placeholder,
9
- tabIndex,
10
- value,
11
- } ) => {
12
- return (
13
- <input
14
- { ...getInputProps( {
15
- ref: inputRef,
16
- className:
17
- 'wc-block-dropdown-selector__input wc-block-components-dropdown-selector__input',
18
- disabled: isDisabled,
19
- onFocus,
20
- onKeyDown( e ) {
21
- if (
22
- e.key === 'Backspace' &&
23
- ! value &&
24
- checked.length > 0
25
- ) {
26
- onRemoveItem( checked[ checked.length - 1 ] );
27
- }
28
- },
29
- placeholder,
30
- tabIndex,
31
- } ) }
32
- />
33
- );
34
- };
35
-
36
- export default DropdownSelectorInput;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/dropdown-selector/menu.js DELETED
@@ -1,59 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __, sprintf } from '@wordpress/i18n';
5
- import classNames from 'classnames';
6
-
7
- const DropdownSelectorMenu = ( {
8
- checked,
9
- getItemProps,
10
- getMenuProps,
11
- highlightedIndex,
12
- options,
13
- } ) => {
14
- return (
15
- <ul
16
- { ...getMenuProps( {
17
- className:
18
- 'wc-block-dropdown-selector__list wc-block-components-dropdown-selector__list',
19
- } ) }
20
- >
21
- { options.map( ( option, index ) => {
22
- const selected = checked.includes( option.value );
23
- return (
24
- // eslint-disable-next-line react/jsx-key
25
- <li
26
- { ...getItemProps( {
27
- key: option.value,
28
- className: classNames(
29
- 'wc-block-dropdown-selector__list-item',
30
- 'wc-block-components-dropdown-selector__list-item',
31
- {
32
- 'is-selected': selected,
33
- 'is-highlighted':
34
- highlightedIndex === index,
35
- }
36
- ),
37
- index,
38
- item: option.value,
39
- 'aria-label': selected
40
- ? sprintf(
41
- /* translators: %s is referring to the filter option being removed. */
42
- __(
43
- 'Remove %s filter',
44
- 'woo-gutenberg-products-block'
45
- ),
46
- option.name
47
- )
48
- : null,
49
- } ) }
50
- >
51
- { option.label }
52
- </li>
53
- );
54
- } ) }
55
- </ul>
56
- );
57
- };
58
-
59
- export default DropdownSelectorMenu;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/dropdown-selector/selected-chip.js DELETED
@@ -1,26 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __, sprintf } from '@wordpress/i18n';
5
- import { RemovableChip } from '@woocommerce/base-components/chip';
6
-
7
- const DropdownSelectorSelectedChip = ( { onRemoveItem, option } ) => {
8
- return (
9
- <RemovableChip
10
- className="wc-block-dropdown-selector__selected-chip wc-block-components-dropdown-selector__selected-chip"
11
- removeOnAnyClick={ true }
12
- onRemove={ () => {
13
- onRemoveItem( option.value );
14
- } }
15
- ariaLabel={ sprintf(
16
- /* translators: %s is referring to the filter option being removed. */
17
- __( 'Remove %s filter', 'woo-gutenberg-products-block' ),
18
- option.name
19
- ) }
20
- text={ option.label }
21
- radius="large"
22
- />
23
- );
24
- };
25
-
26
- export default DropdownSelectorSelectedChip;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/dropdown-selector/selected-value.js DELETED
@@ -1,57 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __, sprintf } from '@wordpress/i18n';
5
- import { useEffect, useRef } from '@wordpress/element';
6
- import { Icon, noAlt } from '@woocommerce/icons';
7
-
8
- const DropdownSelectorSelectedValue = ( { onClick, onRemoveItem, option } ) => {
9
- const labelRef = useRef( null );
10
-
11
- useEffect( () => {
12
- labelRef.current.focus();
13
- }, [ labelRef ] );
14
-
15
- return (
16
- <div className="wc-block-dropdown-selector__selected-value wc-block-components-dropdown-selector__selected-value">
17
- <button
18
- ref={ labelRef }
19
- className="wc-block-dropdown-selector__selected-value__label wc-block-components-dropdown-selector__selected-value__label"
20
- onClick={ ( e ) => {
21
- e.stopPropagation();
22
- onClick( option.value );
23
- } }
24
- aria-label={ sprintf(
25
- /* translators: %s attribute value used in the filter. For example: yellow, green, small, large. */
26
- __(
27
- 'Replace current %s filter',
28
- 'woo-gutenberg-products-block'
29
- ),
30
- option.name
31
- ) }
32
- >
33
- { option.label }
34
- </button>
35
- <button
36
- className="wc-block-dropdown-selector__selected-value__remove wc-block-components-dropdown-selector__selected-value__remove"
37
- onClick={ () => {
38
- onRemoveItem( option.value );
39
- } }
40
- onKeyDown={ ( e ) => {
41
- if ( e.key === 'Backspace' || e.key === 'Delete' ) {
42
- onRemoveItem( option.value );
43
- }
44
- } }
45
- aria-label={ sprintf(
46
- /* translators: %s attribute value used in the filter. For example: yellow, green, small, large. */
47
- __( 'Remove %s filter', 'woo-gutenberg-products-block' ),
48
- option.name
49
- ) }
50
- >
51
- <Icon srcElement={ noAlt } size={ 16 } />
52
- </button>
53
- </div>
54
- );
55
- };
56
-
57
- export default DropdownSelectorSelectedValue;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/dropdown-selector/style.scss DELETED
@@ -1,175 +0,0 @@
1
- // 18px is the minimum input field line-height and 14px is the font-size of
2
- // the drop down selector elements.
3
- $dropdown-selector-line-height: 18/14;
4
-
5
- .wc-block-components-dropdown-selector {
6
- max-width: 300px;
7
- position: relative;
8
- width: 100%;
9
- }
10
-
11
- .wc-block-components-dropdown-selector__input-wrapper {
12
- background: #fff;
13
- border: 1px solid $input-border-gray;
14
- color: $input-text-active;
15
- align-items: center;
16
- border-radius: 4px;
17
- cursor: text;
18
- display: flex;
19
- flex-wrap: wrap;
20
- padding: 2px $gap-smaller;
21
-
22
- .is-disabled & {
23
- background-color: $gray-200;
24
- }
25
-
26
- .is-multiple.has-checked > & {
27
- padding: 2px $gap-smallest;
28
- }
29
-
30
- .is-open > & {
31
- border-radius: 4px 4px 0 0;
32
- }
33
- }
34
-
35
- .wc-block-components-dropdown-selector__input {
36
- @include font-size(small);
37
- line-height: $dropdown-selector-line-height;
38
- margin: em($gap-small/4) 0;
39
- min-width: 0;
40
- padding: em($gap-smallest * 0.75) 0 em($gap-smallest * 0.75);
41
-
42
- .is-single & {
43
- width: 100%;
44
-
45
- &:hover,
46
- &:focus,
47
- &:active {
48
- outline: 0;
49
- }
50
- }
51
-
52
- .is-single.has-checked.is-open & {
53
- margin-bottom: 1.5px;
54
- margin-top: 1.5px;
55
- }
56
-
57
- .is-single.has-checked:not(.is-open) & {
58
- @include visually-hidden();
59
- // Fixes an issue in Firefox that `flex: wrap` in the container was making
60
- // this element to still occupy one line.
61
- position: absolute;
62
- }
63
-
64
- .is-multiple & {
65
- flex: 1;
66
- min-width: 0;
67
- }
68
- }
69
-
70
- // Visually hide the input
71
- .is-single .wc-block-components-dropdown-selector__input:first-child,
72
- .is-multiple .wc-block-components-dropdown-selector__input {
73
- background: transparent;
74
- border: 0;
75
-
76
- &:hover,
77
- &:focus,
78
- &:active {
79
- outline: 0;
80
- }
81
- }
82
-
83
- .wc-block-components-dropdown-selector {
84
- // Reset <button> styles
85
- .wc-block-components-dropdown-selector__selected-value__label,
86
- .wc-block-components-dropdown-selector__selected-value__remove {
87
- background-color: transparent;
88
- border: 0;
89
- color: inherit;
90
- font-size: inherit;
91
- font-weight: inherit;
92
- text-transform: initial;
93
-
94
- &:hover,
95
- &:focus,
96
- &:active {
97
- background-color: transparent;
98
- text-decoration: none;
99
- }
100
- }
101
-
102
- .wc-block-components-dropdown-selector__selected-value {
103
- @include font-size(small);
104
- align-items: center;
105
- color: $gray-700;
106
- display: inline-flex;
107
- margin: em($gap-small/4) 0;
108
- padding: em($gap-smallest * 0.75) 0 em($gap-smallest * 0.75);
109
- width: 100%;
110
- }
111
-
112
- .wc-block-components-dropdown-selector__selected-value__label {
113
- flex-grow: 1;
114
- line-height: $dropdown-selector-line-height;
115
- padding: 0;
116
- text-align: left;
117
- }
118
-
119
- .wc-block-components-dropdown-selector__selected-value__remove {
120
- background-color: transparent;
121
- border: 0;
122
- display: inline-block;
123
- line-height: 1;
124
- padding: 0 0 0 0.3em;
125
-
126
- > svg {
127
- display: block;
128
- }
129
- }
130
-
131
- .wc-block-components-dropdown-selector__selected-chip {
132
- @include font-size(small);
133
- margin-top: em($gap-small/4);
134
- margin-bottom: em($gap-small/4);
135
- line-height: $dropdown-selector-line-height;
136
- }
137
- }
138
-
139
- .wc-block-components-dropdown-selector__list {
140
- background-color: #fff;
141
- margin: -1px 0 0;
142
- padding: 0;
143
- position: absolute;
144
- left: 0;
145
- right: 0;
146
- top: 100%;
147
- max-height: 300px;
148
- overflow-y: auto;
149
- z-index: 1;
150
-
151
- &:not(:empty) {
152
- border: 1px solid #9f9f9f;
153
- }
154
- }
155
-
156
- .wc-block-components-dropdown-selector__list-item {
157
- @include font-size(small);
158
- color: $gray-700;
159
- cursor: default;
160
- list-style: none;
161
- margin: 0;
162
- padding: 0 $gap-smallest;
163
-
164
- &.is-selected {
165
- background-color: $gray-300;
166
- }
167
-
168
- &:hover,
169
- &:focus,
170
- &.is-highlighted,
171
- &:active {
172
- background-color: #00669e;
173
- color: #fff;
174
- }
175
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/filter-submit-button/index.js DELETED
@@ -1,56 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import PropTypes from 'prop-types';
6
- import classNames from 'classnames';
7
- import Label from '@woocommerce/base-components/label';
8
-
9
- /**
10
- * Internal dependencies
11
- */
12
- import './style.scss';
13
-
14
- const FilterSubmitButton = ( {
15
- className,
16
- disabled,
17
- /* translators: Submit button text for filters. */
18
- label = __( 'Go', 'woo-gutenberg-products-block' ),
19
- onClick,
20
- screenReaderLabel = __( 'Apply filter', 'woo-gutenberg-products-block' ),
21
- } ) => {
22
- return (
23
- <button
24
- type="submit"
25
- className={ classNames(
26
- 'wc-block-filter-submit-button',
27
- 'wc-block-components-filter-submit-button',
28
- className
29
- ) }
30
- disabled={ disabled }
31
- onClick={ onClick }
32
- >
33
- <Label label={ label } screenReaderLabel={ screenReaderLabel } />
34
- </button>
35
- );
36
- };
37
-
38
- FilterSubmitButton.propTypes = {
39
- className: PropTypes.string,
40
- /**
41
- * Is the button disabled?
42
- */
43
- disabled: PropTypes.bool,
44
- /**
45
- * On click callback.
46
- */
47
- onClick: PropTypes.func.isRequired,
48
- label: PropTypes.string,
49
- screenReaderLabel: PropTypes.string,
50
- };
51
-
52
- FilterSubmitButton.defaultProps = {
53
- disabled: false,
54
- };
55
-
56
- export default FilterSubmitButton;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/filter-submit-button/style.scss DELETED
@@ -1,5 +0,0 @@
1
- .wc-block-components-filter-submit-button {
2
- display: block;
3
- margin-left: auto;
4
- white-space: nowrap;
5
- }
 
 
 
 
 
assets/js/base/components/form/index.js DELETED
@@ -1,33 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classnames from 'classnames';
5
- import PropTypes from 'prop-types';
6
-
7
- const Form = ( {
8
- className,
9
- children,
10
- onSubmit = ( event ) => void event,
11
- } ) => {
12
- const formOnSubmit = ( event ) => {
13
- event.preventDefault();
14
- onSubmit( event );
15
- };
16
-
17
- return (
18
- <form
19
- className={ classnames( 'wc-block-components-form', className ) }
20
- onSubmit={ formOnSubmit }
21
- >
22
- { children }
23
- </form>
24
- );
25
- };
26
-
27
- Form.propTypes = {
28
- className: PropTypes.string,
29
- children: PropTypes.node,
30
- onSubmit: PropTypes.func,
31
- };
32
-
33
- export default Form;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/formatted-monetary-amount/index.tsx DELETED
@@ -1,104 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import NumberFormat, {
5
- NumberFormatValues,
6
- NumberFormatProps,
7
- } from 'react-number-format';
8
- import classNames from 'classnames';
9
- import type { Currency } from '@woocommerce/price-format';
10
- import type { ReactElement } from 'react';
11
-
12
- /**
13
- * Internal dependencies
14
- */
15
- import './style.scss';
16
-
17
- interface FormattedMonetaryAmountProps {
18
- className?: string;
19
- displayType?: NumberFormatProps[ 'displayType' ];
20
- value: number | string; // Value of money amount.
21
- currency: Currency | Record< string, never >; // Currency configuration object.
22
- onValueChange?: ( unit: number ) => void; // Function to call when value changes.
23
- }
24
-
25
- /**
26
- * Formats currency data into the expected format for NumberFormat.
27
- */
28
- const currencyToNumberFormat = (
29
- currency: FormattedMonetaryAmountProps[ 'currency' ]
30
- ) => {
31
- return {
32
- thousandSeparator: currency.thousandSeparator,
33
- decimalSeparator: currency.decimalSeparator,
34
- decimalScale: currency.minorUnit,
35
- fixedDecimalScale: true,
36
- prefix: currency.prefix,
37
- suffix: currency.suffix,
38
- isNumericString: true,
39
- };
40
- };
41
-
42
- /**
43
- * FormattedMonetaryAmount component.
44
- *
45
- * Takes a price and returns a formatted price using the NumberFormat component.
46
- */
47
- const FormattedMonetaryAmount = ( {
48
- className,
49
- value: rawValue,
50
- currency,
51
- onValueChange,
52
- displayType = 'text',
53
- ...props
54
- }: FormattedMonetaryAmountProps ): ReactElement | null => {
55
- const value =
56
- typeof rawValue === 'string' ? parseInt( rawValue, 10 ) : rawValue;
57
-
58
- if ( ! Number.isFinite( value ) ) {
59
- return null;
60
- }
61
-
62
- const priceValue = value / 10 ** currency.minorUnit;
63
-
64
- if ( ! Number.isFinite( priceValue ) ) {
65
- return null;
66
- }
67
-
68
- const classes = classNames(
69
- 'wc-block-formatted-money-amount',
70
- 'wc-block-components-formatted-money-amount',
71
- className
72
- );
73
- const numberFormatProps = {
74
- ...props,
75
- ...currencyToNumberFormat( currency ),
76
- value: undefined,
77
- currency: undefined,
78
- onValueChange: undefined,
79
- };
80
-
81
- // Wrapper for NumberFormat onValueChange which handles subunit conversion.
82
- const onValueChangeWrapper = onValueChange
83
- ? ( values: NumberFormatValues ) => {
84
- const minorUnitValue =
85
- ( ( values.value as unknown ) as number ) *
86
- 10 ** currency.minorUnit;
87
- onValueChange( minorUnitValue );
88
- }
89
- : () => {
90
- /* not used */
91
- };
92
-
93
- return (
94
- <NumberFormat
95
- className={ classes }
96
- displayType={ displayType }
97
- { ...numberFormatProps }
98
- value={ priceValue }
99
- onValueChange={ onValueChangeWrapper }
100
- />
101
- );
102
- };
103
-
104
- export default FormattedMonetaryAmount;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/formatted-monetary-amount/style.scss DELETED
@@ -1,3 +0,0 @@
1
- .wc-block-components-formatted-money-amount {
2
- white-space: nowrap;
3
- }
 
 
 
assets/js/base/components/label/index.js ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import { Fragment } from 'react';
6
+ import classNames from 'classnames';
7
+
8
+ /**
9
+ * Component used to render an accessible text given a label and/or a
10
+ * screenReaderLabel. The wrapper element and wrapper props can also be
11
+ * specified via props.
12
+ */
13
+ const Label = ( {
14
+ label,
15
+ screenReaderLabel,
16
+ wrapperElement,
17
+ wrapperProps,
18
+ } ) => {
19
+ let Wrapper;
20
+
21
+ if ( ! label && screenReaderLabel ) {
22
+ Wrapper = wrapperElement || 'span';
23
+ wrapperProps = {
24
+ ...wrapperProps,
25
+ className: classNames(
26
+ wrapperProps.className,
27
+ 'screen-reader-text'
28
+ ),
29
+ };
30
+
31
+ return <Wrapper { ...wrapperProps }>{ screenReaderLabel }</Wrapper>;
32
+ }
33
+
34
+ Wrapper = wrapperElement || Fragment;
35
+
36
+ if ( label && screenReaderLabel && label !== screenReaderLabel ) {
37
+ return (
38
+ <Wrapper { ...wrapperProps }>
39
+ <span aria-hidden="true">{ label }</span>
40
+ <span className="screen-reader-text">
41
+ { screenReaderLabel }
42
+ </span>
43
+ </Wrapper>
44
+ );
45
+ }
46
+
47
+ return <Wrapper { ...wrapperProps }>{ label }</Wrapper>;
48
+ };
49
+
50
+ Label.propTypes = {
51
+ label: PropTypes.string,
52
+ screenReaderLabel: PropTypes.string,
53
+ wrapperElement: PropTypes.elementType,
54
+ wrapperProps: PropTypes.object,
55
+ };
56
+
57
+ Label.defaultProps = {
58
+ wrapperProps: {},
59
+ };
60
+
61
+ export default Label;
assets/js/base/components/label/index.tsx DELETED
@@ -1,62 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { Fragment } from '@wordpress/element';
5
- import classNames from 'classnames';
6
- import type { ReactElement, HTMLProps } from 'react';
7
-
8
- interface LabelProps extends HTMLProps< HTMLElement > {
9
- label?: string;
10
- screenReaderLabel?: string;
11
- wrapperElement?: string;
12
- wrapperProps?: HTMLProps< HTMLElement >;
13
- }
14
-
15
- /**
16
- * Component used to render an accessible text given a label and/or a
17
- * screenReaderLabel. The wrapper element and wrapper props can also be
18
- * specified via props.
19
- *
20
- */
21
- const Label = ( {
22
- label,
23
- screenReaderLabel,
24
- wrapperElement,
25
- wrapperProps = {},
26
- }: LabelProps ): ReactElement => {
27
- let Wrapper;
28
-
29
- const hasLabel = typeof label !== 'undefined' && label !== null;
30
- const hasScreenReaderLabel =
31
- typeof screenReaderLabel !== 'undefined' && screenReaderLabel !== null;
32
-
33
- if ( ! hasLabel && hasScreenReaderLabel ) {
34
- Wrapper = wrapperElement || 'span';
35
- wrapperProps = {
36
- ...wrapperProps,
37
- className: classNames(
38
- wrapperProps.className,
39
- 'screen-reader-text'
40
- ),
41
- };
42
-
43
- return <Wrapper { ...wrapperProps }>{ screenReaderLabel }</Wrapper>;
44
- }
45
-
46
- Wrapper = wrapperElement || Fragment;
47
-
48
- if ( hasLabel && hasScreenReaderLabel && label !== screenReaderLabel ) {
49
- return (
50
- <Wrapper { ...wrapperProps }>
51
- <span aria-hidden="true">{ label }</span>
52
- <span className="screen-reader-text">
53
- { screenReaderLabel }
54
- </span>
55
- </Wrapper>
56
- );
57
- }
58
-
59
- return <Wrapper { ...wrapperProps }>{ label }</Wrapper>;
60
- };
61
-
62
- export default Label;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/load-more-button/index.js CHANGED
@@ -12,7 +12,7 @@ import './style.scss';
12
 
13
  export const LoadMoreButton = ( { onClick, label, screenReaderLabel } ) => {
14
  return (
15
- <div className="wp-block-button wc-block-load-more wc-block-components-load-more">
16
  <button className="wp-block-button__link" onClick={ onClick }>
17
  <Label
18
  label={ label }
12
 
13
  export const LoadMoreButton = ( { onClick, label, screenReaderLabel } ) => {
14
  return (
15
+ <div className="wp-block-button wc-block-load-more">
16
  <button className="wp-block-button__link" onClick={ onClick }>
17
  <Label
18
  label={ label }
assets/js/base/components/load-more-button/style.scss CHANGED
@@ -1,4 +1,4 @@
1
- .wc-block-components-load-more {
2
  text-align: center;
3
  width: 100%;
4
  }
1
+ .wc-block-load-more {
2
  text-align: center;
3
  width: 100%;
4
  }
assets/js/base/components/loading-mask/index.js DELETED
@@ -1,54 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import PropTypes from 'prop-types';
6
- import classNames from 'classnames';
7
-
8
- /**
9
- * Internal dependencies
10
- */
11
- import './style.scss';
12
- import Spinner from '../spinner';
13
-
14
- // @todo Find a way to block buttons/form components when LoadingMask isLoading
15
- const LoadingMask = ( {
16
- children,
17
- className,
18
- screenReaderLabel,
19
- showSpinner = false,
20
- isLoading = true,
21
- } ) => {
22
- return (
23
- <div
24
- className={ classNames( className, {
25
- 'wc-block-components-loading-mask': isLoading,
26
- } ) }
27
- >
28
- { isLoading && showSpinner && <Spinner /> }
29
- <div
30
- className={ classNames( {
31
- 'wc-block-components-loading-mask__children': isLoading,
32
- } ) }
33
- aria-hidden={ isLoading }
34
- >
35
- { children }
36
- </div>
37
- { isLoading && (
38
- <span className="screen-reader-text">
39
- { screenReaderLabel ||
40
- __( 'Loading…', 'woo-gutenberg-products-block' ) }
41
- </span>
42
- ) }
43
- </div>
44
- );
45
- };
46
-
47
- LoadingMask.propTypes = {
48
- className: PropTypes.string,
49
- screenReaderLabel: PropTypes.string,
50
- showSpinner: PropTypes.bool,
51
- isLoading: PropTypes.bool,
52
- };
53
-
54
- export default LoadingMask;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/loading-mask/style.scss DELETED
@@ -1,17 +0,0 @@
1
- .wc-block-components-loading-mask {
2
- position: relative;
3
- min-height: 18px + $gap;
4
- pointer-events: none;
5
-
6
- .components-spinner {
7
- position: absolute;
8
- margin: 0;
9
- top: 50%;
10
- left: 50%;
11
- transform: translate(-50%, -50%);
12
- }
13
-
14
- .wc-block-components-loading-mask__children {
15
- opacity: 0.25;
16
- }
17
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/pagination/index.js CHANGED
@@ -1,7 +1,7 @@
1
  /**
2
  * External dependencies
3
  */
4
- import { __, sprintf } from '@wordpress/i18n';
5
  import PropTypes from 'prop-types';
6
  import classNames from 'classnames';
7
  import Label from '@woocommerce/base-components/label';
@@ -49,7 +49,7 @@ const Pagination = ( {
49
  }
50
 
51
  return (
52
- <div className="wc-block-pagination wc-block-components-pagination">
53
  <Label
54
  screenReaderLabel={ __(
55
  'Navigate to another page',
@@ -58,7 +58,7 @@ const Pagination = ( {
58
  />
59
  { displayNextAndPreviousArrows && (
60
  <button
61
- className="wc-block-pagination-page wc-block-components-pagination__page"
62
  onClick={ () => onPageChange( currentPage - 1 ) }
63
  title={ __(
64
  'Previous page',
@@ -77,32 +77,18 @@ const Pagination = ( {
77
  ) }
78
  { showFirstPage && (
79
  <button
80
- className={ classNames(
81
- 'wc-block-pagination-page',
82
- 'wc-block-components-pagination__page',
83
- {
84
- 'wc-block-pagination-page--active':
85
- currentPage === 1,
86
- 'wc-block-components-pagination__page--active':
87
- currentPage === 1,
88
- }
89
- ) }
90
  onClick={ () => onPageChange( 1 ) }
91
  disabled={ currentPage === 1 }
92
  >
93
- <Label
94
- label={ 1 }
95
- screenReaderLabel={ sprintf(
96
- /* translators: %d is the page number (1, 2, 3...). */
97
- __( 'Page %d', 'woo-gutenberg-products-block' ),
98
- 1
99
- ) }
100
- />
101
  </button>
102
  ) }
103
  { showFirstPageEllipsis && (
104
  <span
105
- className="wc-block-pagination-ellipsis wc-block-components-pagination__ellipsis"
106
  aria-hidden="true"
107
  >
108
  { __( '…', 'woo-gutenberg-products-block' ) }
@@ -112,16 +98,10 @@ const Pagination = ( {
112
  return (
113
  <button
114
  key={ page }
115
- className={ classNames(
116
- 'wc-block-pagination-page',
117
- 'wc-block-components-pagination__page',
118
- {
119
- 'wc-block-pagination-page--active':
120
- currentPage === page,
121
- 'wc-block-components-pagination__page--active':
122
- currentPage === page,
123
- }
124
- ) }
125
  onClick={
126
  currentPage === page
127
  ? null
@@ -129,20 +109,13 @@ const Pagination = ( {
129
  }
130
  disabled={ currentPage === page }
131
  >
132
- <Label
133
- label={ page }
134
- screenReaderLabel={ sprintf(
135
- /* translators: %d is the page number (1, 2, 3...). */
136
- __( 'Page %d', 'woo-gutenberg-products-block' ),
137
- page
138
- ) }
139
- />
140
  </button>
141
  );
142
  } ) }
143
  { showLastPageEllipsis && (
144
  <span
145
- className="wc-block-pagination-ellipsis wc-block-components-pagination__ellipsis"
146
  aria-hidden="true"
147
  >
148
  { __( '…', 'woo-gutenberg-products-block' ) }
@@ -150,32 +123,19 @@ const Pagination = ( {
150
  ) }
151
  { showLastPage && (
152
  <button
153
- className={ classNames(
154
- 'wc-block-pagination-page',
155
- 'wc-block-components-pagination__page',
156
- {
157
- 'wc-block-pagination-page--active':
158
- currentPage === totalPages,
159
- 'wc-block-components-pagination__page--active':
160
- currentPage === totalPages,
161
- }
162
- ) }
163
  onClick={ () => onPageChange( totalPages ) }
164
  disabled={ currentPage === totalPages }
165
  >
166
- <Label
167
- label={ totalPages }
168
- screenReaderLabel={ sprintf(
169
- /* translators: %d is the page number (1, 2, 3...). */
170
- __( 'Page %d', 'woo-gutenberg-products-block' ),
171
- totalPages
172
- ) }
173
- />
174
  </button>
175
  ) }
176
  { displayNextAndPreviousArrows && (
177
  <button
178
- className="wc-block-pagination-page wc-block-components-pagination__page"
179
  onClick={ () => onPageChange( currentPage + 1 ) }
180
  title={ __( 'Next page', 'woo-gutenberg-products-block' ) }
181
  disabled={ currentPage >= totalPages }
1
  /**
2
  * External dependencies
3
  */
4
+ import { __ } from '@wordpress/i18n';
5
  import PropTypes from 'prop-types';
6
  import classNames from 'classnames';
7
  import Label from '@woocommerce/base-components/label';
49
  }
50
 
51
  return (
52
+ <div className="wc-block-pagination">
53
  <Label
54
  screenReaderLabel={ __(
55
  'Navigate to another page',
58
  />
59
  { displayNextAndPreviousArrows && (
60
  <button
61
+ className="wc-block-pagination-page"
62
  onClick={ () => onPageChange( currentPage - 1 ) }
63
  title={ __(
64
  'Previous page',
77
  ) }
78
  { showFirstPage && (
79
  <button
80
+ className={ classNames( 'wc-block-pagination-page', {
81
+ 'wc-block-pagination-page--active': currentPage === 1,
82
+ } ) }
 
 
 
 
 
 
 
83
  onClick={ () => onPageChange( 1 ) }
84
  disabled={ currentPage === 1 }
85
  >
86
+ 1
 
 
 
 
 
 
 
87
  </button>
88
  ) }
89
  { showFirstPageEllipsis && (
90
  <span
91
+ className="wc-block-pagination-ellipsis"
92
  aria-hidden="true"
93
  >
94
  { __( '…', 'woo-gutenberg-products-block' ) }
98
  return (
99
  <button
100
  key={ page }
101
+ className={ classNames( 'wc-block-pagination-page', {
102
+ 'wc-block-pagination-page--active':
103
+ currentPage === page,
104
+ } ) }
 
 
 
 
 
 
105
  onClick={
106
  currentPage === page
107
  ? null
109
  }
110
  disabled={ currentPage === page }
111
  >
112
+ { page }
 
 
 
 
 
 
 
113
  </button>
114
  );
115
  } ) }
116
  { showLastPageEllipsis && (
117
  <span
118
+ className="wc-block-pagination-ellipsis"
119
  aria-hidden="true"
120
  >
121
  { __( '…', 'woo-gutenberg-products-block' ) }
123
  ) }
124
  { showLastPage && (
125
  <button
126
+ className={ classNames( 'wc-block-pagination-page', {
127
+ 'wc-block-pagination-page--active':
128
+ currentPage === totalPages,
129
+ } ) }
 
 
 
 
 
 
130
  onClick={ () => onPageChange( totalPages ) }
131
  disabled={ currentPage === totalPages }
132
  >
133
+ { totalPages }
 
 
 
 
 
 
 
134
  </button>
135
  ) }
136
  { displayNextAndPreviousArrows && (
137
  <button
138
+ className="wc-block-pagination-page"
139
  onClick={ () => onPageChange( currentPage + 1 ) }
140
  title={ __( 'Next page', 'woo-gutenberg-products-block' ) }
141
  disabled={ currentPage >= totalPages }
assets/js/base/components/pagination/style.scss CHANGED
@@ -1,16 +1,16 @@
1
- .wc-block-components-pagination {
2
  margin: 0 auto $gap;
3
  }
4
 
5
- .wc-block-components-pagination__page,
6
- .wc-block-components-pagination__ellipsis {
7
- @include font-size(regular);
8
  color: #333;
9
  display: inline-block;
 
10
  font-weight: normal;
11
  }
12
 
13
- .wc-block-components-pagination__page {
14
  border-color: transparent;
15
  padding: 0.3em 0.6em;
16
  min-width: 2.2em;
@@ -29,7 +29,7 @@
29
  }
30
  }
31
 
32
- .wc-block-components-pagination__ellipsis {
33
  padding: 0.3em;
34
 
35
  @include breakpoint( "<782px" ) {
@@ -37,7 +37,7 @@
37
  }
38
  }
39
 
40
- .wc-block-components-pagination__page--active[disabled] {
41
  color: #333;
42
  font-weight: bold;
43
  opacity: 1 !important;
1
+ .wc-block-pagination {
2
  margin: 0 auto $gap;
3
  }
4
 
5
+ .wc-block-pagination-page,
6
+ .wc-block-pagination-ellipsis {
 
7
  color: #333;
8
  display: inline-block;
9
+ font-size: 1em;
10
  font-weight: normal;
11
  }
12
 
13
+ .wc-block-pagination-page {
14
  border-color: transparent;
15
  padding: 0.3em 0.6em;
16
  min-width: 2.2em;
29
  }
30
  }
31
 
32
+ .wc-block-pagination-ellipsis {
33
  padding: 0.3em;
34
 
35
  @include breakpoint( "<782px" ) {
37
  }
38
  }
39
 
40
+ .wc-block-pagination-page--active[disabled] {
41
  color: #333;
42
  font-weight: bold;
43
  opacity: 1 !important;
assets/js/base/components/pagination/utils.js CHANGED
@@ -2,9 +2,9 @@
2
  * Given the number of pages to display, the current page and the total pages,
3
  * returns the min and max index of the pages to display in the pagination component.
4
  *
5
- * @param {number} pagesToDisplay Maximum number of pages to display in the pagination component.
6
- * @param {number} currentPage Page currently visible.
7
- * @param {number} totalPages Total pages available.
8
  * @return {Object} Object containing the min and max index to display in the pagination component.
9
  */
10
  export const getIndexes = ( pagesToDisplay, currentPage, totalPages ) => {
2
  * Given the number of pages to display, the current page and the total pages,
3
  * returns the min and max index of the pages to display in the pagination component.
4
  *
5
+ * @param {integer} pagesToDisplay Maximum number of pages to display in the pagination component.
6
+ * @param {integer} currentPage Page currently visible.
7
+ * @param {integer} totalPages Total pages available.
8
  * @return {Object} Object containing the min and max index to display in the pagination component.
9
  */
10
  export const getIndexes = ( pagesToDisplay, currentPage, totalPages ) => {
assets/js/base/components/price-slider/constrain-range-slider-values.js CHANGED
@@ -1,12 +1,12 @@
1
  /**
2
- * Validate a min and max value for a range slider against defined constraints (min, max, step).
3
  *
4
  * @param {Array} values Array containing min and max values.
5
- * @param {number|null} min Min allowed value for the sliders.
6
- * @param {number|null} max Max allowed value for the sliders.
7
- * @param {number} step Step value for the sliders.
8
  * @param {boolean} isMin Whether we're currently interacting with the min range slider or not, so we update the correct values.
9
- * @return {Array} Validated and updated min/max values that fit within the range slider constraints.
10
  */
11
  export const constrainRangeSliderValues = (
12
  values,
1
  /**
2
+ * Validate a min and max value for a range slider againt defined constraints (min, max, step).
3
  *
4
  * @param {Array} values Array containing min and max values.
5
+ * @param {int} min Min allowed value for the sliders.
6
+ * @param {int} max Max allowed value for the sliders.
7
+ * @param {step} step Step value for the sliders.
8
  * @param {boolean} isMin Whether we're currently interacting with the min range slider or not, so we update the correct values.
9
+ * @returns {Array} Validated and updated min/max values that fit within the range slider constraints.
10
  */
11
  export const constrainRangeSliderValues = (
12
  values,
assets/js/base/components/price-slider/index.js CHANGED
@@ -3,6 +3,7 @@
3
  */
4
  import { __ } from '@wordpress/i18n';
5
  import {
 
6
  useState,
7
  useEffect,
8
  useCallback,
@@ -11,40 +12,26 @@ import {
11
  } from '@wordpress/element';
12
  import PropTypes from 'prop-types';
13
  import classnames from 'classnames';
14
- import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
15
- import { isObject } from '@woocommerce/types';
16
 
17
  /**
18
  * Internal dependencies
19
  */
20
  import './style.scss';
21
  import { constrainRangeSliderValues } from './constrain-range-slider-values';
22
- import FilterSubmitButton from '../filter-submit-button';
 
 
 
23
 
24
- /**
25
- * Price slider component.
26
- *
27
- * @param {Object} props Component props.
28
- * @param {number} props.minPrice Minimum price for slider.
29
- * @param {number} props.maxPrice Maximum price for slider.
30
- * @param {number} props.minConstraint Minimum constraint.
31
- * @param {number} props.maxConstraint Maximum constraint.
32
- * @param {function(any):any} props.onChange Function to call on the change event.
33
- * @param {number} props.step What step values the slider uses.
34
- * @param {Object} props.currency Currency configuration object.
35
- * @param {boolean} props.showInputFields Whether to show input fields for the values or not.
36
- * @param {boolean} props.showFilterButton Whether to show the filter button for the slider.
37
- * @param {boolean} props.isLoading Whether values are loading or not.
38
- * @param {function():any} props.onSubmit Function to call when submit event fires.
39
- */
40
  const PriceSlider = ( {
41
  minPrice,
42
  maxPrice,
43
  minConstraint,
44
  maxConstraint,
45
  onChange = () => {},
46
- step,
47
- currency,
 
48
  showInputFields = true,
49
  showFilterButton = false,
50
  isLoading = false,
@@ -53,19 +40,24 @@ const PriceSlider = ( {
53
  const minRange = useRef();
54
  const maxRange = useRef();
55
 
56
- // We want step to default to 10 major units, e.g. $10.
57
- const stepValue = step ? step : 10 * 10 ** currency.minorUnit;
58
-
59
- const [ minPriceInput, setMinPriceInput ] = useState( minPrice );
60
- const [ maxPriceInput, setMaxPriceInput ] = useState( maxPrice );
 
61
 
62
  useEffect( () => {
63
- setMinPriceInput( minPrice );
64
- }, [ minPrice ] );
 
 
65
 
66
  useEffect( () => {
67
- setMaxPriceInput( maxPrice );
68
- }, [ maxPrice ] );
 
 
69
 
70
  /**
71
  * Checks if the min and max constraints are valid.
@@ -112,13 +104,14 @@ const PriceSlider = ( {
112
  minConstraint,
113
  maxConstraint,
114
  hasValidConstraints,
 
115
  ] );
116
 
117
  /**
118
  * Works around an IE issue where only one range selector is visible by changing the display order
119
  * based on the mouse position.
120
  *
121
- * @param {Object} event event data.
122
  */
123
  const findClosestRange = useCallback(
124
  ( event ) => {
@@ -155,8 +148,7 @@ const PriceSlider = ( {
155
 
156
  /**
157
  * Called when the slider is dragged.
158
- *
159
- * @param {Object} event Event object.
160
  */
161
  const rangeInputOnChange = useCallback(
162
  ( event ) => {
@@ -165,19 +157,13 @@ const PriceSlider = ( {
165
  );
166
  const targetValue = event.target.value;
167
  const currentValues = isMin
168
- ? [
169
- Math.round( targetValue / stepValue ) * stepValue,
170
- maxPrice,
171
- ]
172
- : [
173
- minPrice,
174
- Math.round( targetValue / stepValue ) * stepValue,
175
- ];
176
  const values = constrainRangeSliderValues(
177
  currentValues,
178
  minConstraint,
179
  maxConstraint,
180
- stepValue,
181
  isMin
182
  );
183
  onChange( [
@@ -185,87 +171,103 @@ const PriceSlider = ( {
185
  parseInt( values[ 1 ], 10 ),
186
  ] );
187
  },
188
- [
189
- onChange,
190
- minPrice,
191
- maxPrice,
192
- minConstraint,
193
- maxConstraint,
194
- stepValue,
195
- ]
196
  );
197
 
198
  /**
199
  * Called when a price input loses focus - commit changes to slider.
200
- *
201
- * @param {Object} event Event object.
202
  */
203
  const priceInputOnBlur = useCallback(
204
  ( event ) => {
205
- // Only refresh when finished editing the min and max fields.
206
- if (
207
- event.relatedTarget &&
208
- event.relatedTarget.classList &&
209
- event.relatedTarget.classList.contains(
210
- 'wc-block-price-filter__amount'
211
- )
212
- ) {
213
- return;
214
- }
215
  const isMin = event.target.classList.contains(
216
  'wc-block-price-filter__amount--min'
217
  );
 
 
 
 
218
  const values = constrainRangeSliderValues(
219
- [ minPriceInput, maxPriceInput ],
220
  null,
221
  null,
222
- stepValue,
223
  isMin
224
  );
225
  onChange( [
226
  parseInt( values[ 0 ], 10 ),
227
  parseInt( values[ 1 ], 10 ),
228
  ] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
229
  },
230
- [ onChange, stepValue, minPriceInput, maxPriceInput ]
231
  );
232
 
233
  const classes = classnames(
234
  'wc-block-price-filter',
235
- 'wc-block-components-price-slider',
236
  showInputFields && 'wc-block-price-filter--has-input-fields',
237
- showInputFields && 'wc-block-components-price-slider--has-input-fields',
238
  showFilterButton && 'wc-block-price-filter--has-filter-button',
239
- showFilterButton &&
240
- 'wc-block-components-price-slider--has-filter-button',
241
  isLoading && 'is-loading',
242
  ! hasValidConstraints && 'is-disabled'
243
  );
244
 
245
- const activeElement = isObject( minRange.current )
246
- ? minRange.current.ownerDocument.activeElement
247
- : undefined;
248
  const minRangeStep =
249
- activeElement && activeElement === minRange.current ? stepValue : 1;
250
  const maxRangeStep =
251
- activeElement && activeElement === maxRange.current ? stepValue : 1;
252
 
253
  return (
254
  <div className={ classes }>
255
  <div
256
- className="wc-block-price-filter__range-input-wrapper wc-block-components-price-slider__range-input-wrapper"
257
  onMouseMove={ findClosestRange }
258
  onFocus={ findClosestRange }
259
  >
260
  { hasValidConstraints && (
261
- <div aria-hidden={ showInputFields }>
262
  <div
263
- className="wc-block-price-filter__range-input-progress wc-block-components-price-slider__range-input-progress"
264
  style={ progressStyles }
265
  />
266
  <input
267
  type="range"
268
- className="wc-block-price-filter__range-input wc-block-price-filter__range-input--min wc-block-components-price-slider__range-input wc-block-components-price-slider__range-input--min"
269
  aria-label={ __(
270
  'Filter products by minimum price',
271
  'woo-gutenberg-products-block'
@@ -281,11 +283,10 @@ const PriceSlider = ( {
281
  max={ maxConstraint }
282
  ref={ minRange }
283
  disabled={ isLoading }
284
- tabIndex={ showInputFields ? '-1' : '0' }
285
  />
286
  <input
287
  type="range"
288
- className="wc-block-price-filter__range-input wc-block-price-filter__range-input--max wc-block-components-price-slider__range-input wc-block-components-price-slider__range-input--max"
289
  aria-label={ __(
290
  'Filter products by maximum price',
291
  'woo-gutenberg-products-block'
@@ -301,79 +302,29 @@ const PriceSlider = ( {
301
  max={ maxConstraint }
302
  ref={ maxRange }
303
  disabled={ isLoading }
304
- tabIndex={ showInputFields ? '-1' : '0' }
305
  />
306
- </div>
307
  ) }
308
  </div>
309
- <div className="wc-block-price-filter__controls wc-block-components-price-slider__controls">
310
- { showInputFields && (
311
- <>
312
- <FormattedMonetaryAmount
313
- currency={ currency }
314
- displayType="input"
315
- className="wc-block-price-filter__amount wc-block-price-filter__amount--min wc-block-form-text-input wc-block-components-price-slider__amount wc-block-components-price-slider__amount--min"
316
- aria-label={ __(
317
- 'Filter products by minimum price',
318
- 'woo-gutenberg-products-block'
319
- ) }
320
- onValueChange={ ( value ) => {
321
- if ( value === minPriceInput ) {
322
- return;
323
- }
324
- setMinPriceInput( value );
325
- } }
326
- onBlur={ priceInputOnBlur }
327
- disabled={ isLoading || ! hasValidConstraints }
328
- value={ minPriceInput }
329
- />
330
- <FormattedMonetaryAmount
331
- currency={ currency }
332
- displayType="input"
333
- className="wc-block-price-filter__amount wc-block-price-filter__amount--max wc-block-form-text-input wc-block-components-price-slider__amount wc-block-components-price-slider__amount--max"
334
- aria-label={ __(
335
- 'Filter products by maximum price',
336
- 'woo-gutenberg-products-block'
337
- ) }
338
- onValueChange={ ( value ) => {
339
- if ( value === maxPriceInput ) {
340
- return;
341
- }
342
- setMaxPriceInput( value );
343
- } }
344
- onBlur={ priceInputOnBlur }
345
- disabled={ isLoading || ! hasValidConstraints }
346
- value={ maxPriceInput }
347
- />
348
- </>
349
  ) }
350
- { ! showInputFields &&
351
- ! isLoading &&
352
- Number.isFinite( minPrice ) &&
353
- Number.isFinite( maxPrice ) && (
354
- <div className="wc-block-price-filter__range-text wc-block-components-price-slider__range-text">
355
- { __( 'Price', 'woo-gutenberg-products-block' ) }
356
- : &nbsp;
357
- <FormattedMonetaryAmount
358
- currency={ currency }
359
- value={ minPrice }
360
- />
361
- &nbsp;&ndash;&nbsp;
362
- <FormattedMonetaryAmount
363
- currency={ currency }
364
- value={ maxPrice }
365
- />
366
- </div>
367
- ) }
368
  { showFilterButton && (
369
- <FilterSubmitButton
370
- className="wc-block-price-filter__button wc-block-components-price-slider__button"
371
  disabled={ isLoading || ! hasValidConstraints }
372
  onClick={ onSubmit }
373
- screenReaderLabel={ __(
374
- 'Apply price filter',
375
- 'woo-gutenberg-products-block'
376
- ) }
377
  />
378
  ) }
379
  </div>
@@ -411,9 +362,13 @@ PriceSlider.propTypes = {
411
  */
412
  step: PropTypes.number,
413
  /**
414
- * Currency data used for formatting prices.
 
 
 
 
415
  */
416
- currency: PropTypes.object.isRequired,
417
  /**
418
  * Whether or not to show input fields above the slider.
419
  */
3
  */
4
  import { __ } from '@wordpress/i18n';
5
  import {
6
+ Fragment,
7
  useState,
8
  useEffect,
9
  useCallback,
12
  } from '@wordpress/element';
13
  import PropTypes from 'prop-types';
14
  import classnames from 'classnames';
 
 
15
 
16
  /**
17
  * Internal dependencies
18
  */
19
  import './style.scss';
20
  import { constrainRangeSliderValues } from './constrain-range-slider-values';
21
+ import { formatPrice } from '../../utils/price';
22
+ import SubmitButton from './submit-button';
23
+ import PriceLabel from './price-label';
24
+ import PriceInput from './price-input';
25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  const PriceSlider = ( {
27
  minPrice,
28
  maxPrice,
29
  minConstraint,
30
  maxConstraint,
31
  onChange = () => {},
32
+ step = 10,
33
+ currencySymbol = '$',
34
+ priceFormat = '%1$s%2$s',
35
  showInputFields = true,
36
  showFilterButton = false,
37
  isLoading = false,
40
  const minRange = useRef();
41
  const maxRange = useRef();
42
 
43
+ const [ formattedMinPrice, setFormattedMinPrice ] = useState(
44
+ formatPrice( minPrice, priceFormat, currencySymbol )
45
+ );
46
+ const [ formattedMaxPrice, setFormattedMaxPrice ] = useState(
47
+ formatPrice( maxPrice, priceFormat, currencySymbol )
48
+ );
49
 
50
  useEffect( () => {
51
+ setFormattedMinPrice(
52
+ formatPrice( minPrice, priceFormat, currencySymbol )
53
+ );
54
+ }, [ minPrice, priceFormat, currencySymbol ] );
55
 
56
  useEffect( () => {
57
+ setFormattedMaxPrice(
58
+ formatPrice( maxPrice, priceFormat, currencySymbol )
59
+ );
60
+ }, [ maxPrice, priceFormat, currencySymbol ] );
61
 
62
  /**
63
  * Checks if the min and max constraints are valid.
104
  minConstraint,
105
  maxConstraint,
106
  hasValidConstraints,
107
+ step,
108
  ] );
109
 
110
  /**
111
  * Works around an IE issue where only one range selector is visible by changing the display order
112
  * based on the mouse position.
113
  *
114
+ * @param {obj} event event data.
115
  */
116
  const findClosestRange = useCallback(
117
  ( event ) => {
148
 
149
  /**
150
  * Called when the slider is dragged.
151
+ * @param {obj} event Event object.
 
152
  */
153
  const rangeInputOnChange = useCallback(
154
  ( event ) => {
157
  );
158
  const targetValue = event.target.value;
159
  const currentValues = isMin
160
+ ? [ Math.round( targetValue / step ) * step, maxPrice ]
161
+ : [ minPrice, Math.round( targetValue / step ) * step ];
 
 
 
 
 
 
162
  const values = constrainRangeSliderValues(
163
  currentValues,
164
  minConstraint,
165
  maxConstraint,
166
+ step,
167
  isMin
168
  );
169
  onChange( [
171
  parseInt( values[ 1 ], 10 ),
172
  ] );
173
  },
174
+ [ minPrice, maxPrice, minConstraint, maxConstraint, step ]
 
 
 
 
 
 
 
175
  );
176
 
177
  /**
178
  * Called when a price input loses focus - commit changes to slider.
179
+ * @param {obj} event Event object.
 
180
  */
181
  const priceInputOnBlur = useCallback(
182
  ( event ) => {
 
 
 
 
 
 
 
 
 
 
183
  const isMin = event.target.classList.contains(
184
  'wc-block-price-filter__amount--min'
185
  );
186
+ const targetValue = event.target.value.replace( /[^0-9.-]+/g, '' );
187
+ const currentValues = isMin
188
+ ? [ targetValue, maxPrice ]
189
+ : [ minPrice, targetValue ];
190
  const values = constrainRangeSliderValues(
191
+ currentValues,
192
  null,
193
  null,
194
+ step,
195
  isMin
196
  );
197
  onChange( [
198
  parseInt( values[ 0 ], 10 ),
199
  parseInt( values[ 1 ], 10 ),
200
  ] );
201
+ setFormattedMinPrice(
202
+ formatPrice(
203
+ parseInt( values[ 0 ], 10 ),
204
+ priceFormat,
205
+ currencySymbol
206
+ )
207
+ );
208
+ setFormattedMaxPrice(
209
+ formatPrice(
210
+ parseInt( values[ 1 ], 10 ),
211
+ priceFormat,
212
+ currencySymbol
213
+ )
214
+ );
215
+ },
216
+ [ minPrice, maxPrice, minConstraint, maxConstraint, step ]
217
+ );
218
+
219
+ /**
220
+ * Called when a price input is typed in - store value but don't update slider.
221
+ * @param {obj} event Event object.
222
+ */
223
+ const priceInputOnChange = useCallback(
224
+ ( event ) => {
225
+ const newValue = event.target.value.replace( /[^0-9.-]+/g, '' );
226
+ const isMin = event.target.classList.contains(
227
+ 'wc-block-price-filter__amount--min'
228
+ );
229
+ if ( isMin ) {
230
+ setFormattedMinPrice(
231
+ formatPrice( newValue, priceFormat, currencySymbol )
232
+ );
233
+ } else {
234
+ setFormattedMaxPrice(
235
+ formatPrice( newValue, priceFormat, currencySymbol )
236
+ );
237
+ }
238
  },
239
+ [ priceFormat, currencySymbol ]
240
  );
241
 
242
  const classes = classnames(
243
  'wc-block-price-filter',
 
244
  showInputFields && 'wc-block-price-filter--has-input-fields',
 
245
  showFilterButton && 'wc-block-price-filter--has-filter-button',
 
 
246
  isLoading && 'is-loading',
247
  ! hasValidConstraints && 'is-disabled'
248
  );
249
 
 
 
 
250
  const minRangeStep =
251
+ minRange && document.activeElement === minRange.current ? step : 1;
252
  const maxRangeStep =
253
+ maxRange && document.activeElement === maxRange.current ? step : 1;
254
 
255
  return (
256
  <div className={ classes }>
257
  <div
258
+ className="wc-block-price-filter__range-input-wrapper"
259
  onMouseMove={ findClosestRange }
260
  onFocus={ findClosestRange }
261
  >
262
  { hasValidConstraints && (
263
+ <Fragment>
264
  <div
265
+ className="wc-block-price-filter__range-input-progress"
266
  style={ progressStyles }
267
  />
268
  <input
269
  type="range"
270
+ className="wc-block-price-filter__range-input wc-block-price-filter__range-input--min"
271
  aria-label={ __(
272
  'Filter products by minimum price',
273
  'woo-gutenberg-products-block'
283
  max={ maxConstraint }
284
  ref={ minRange }
285
  disabled={ isLoading }
 
286
  />
287
  <input
288
  type="range"
289
+ className="wc-block-price-filter__range-input wc-block-price-filter__range-input--max"
290
  aria-label={ __(
291
  'Filter products by maximum price',
292
  'woo-gutenberg-products-block'
302
  max={ maxConstraint }
303
  ref={ maxRange }
304
  disabled={ isLoading }
 
305
  />
306
+ </Fragment>
307
  ) }
308
  </div>
309
+ <div className="wc-block-price-filter__controls">
310
+ { showInputFields ? (
311
+ <PriceInput
312
+ disabled={ isLoading || ! hasValidConstraints }
313
+ onChange={ priceInputOnChange }
314
+ onBlur={ priceInputOnBlur }
315
+ minPrice={ formattedMinPrice }
316
+ maxPrice={ formattedMaxPrice }
317
+ />
318
+ ) : (
319
+ <PriceLabel
320
+ minPrice={ formattedMinPrice }
321
+ maxPrice={ formattedMaxPrice }
322
+ />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
323
  ) }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
324
  { showFilterButton && (
325
+ <SubmitButton
 
326
  disabled={ isLoading || ! hasValidConstraints }
327
  onClick={ onSubmit }
 
 
 
 
328
  />
329
  ) }
330
  </div>
362
  */
363
  step: PropTypes.number,
364
  /**
365
+ * Currency symbol to use when formatting prices for display.
366
+ */
367
+ currencySymbol: PropTypes.string,
368
+ /**
369
+ * Price format to use when formatting prices for display.
370
  */
371
+ priceFormat: PropTypes.string,
372
  /**
373
  * Whether or not to show input fields above the slider.
374
  */
assets/js/base/components/price-slider/price-input.js ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import PropTypes from 'prop-types';
6
+ import { Fragment } from '@wordpress/element';
7
+
8
+ const PriceInput = ( { disabled, onBlur, onChange, minPrice, maxPrice } ) => {
9
+ return (
10
+ <Fragment>
11
+ <input
12
+ type="text"
13
+ size="5"
14
+ className="wc-block-price-filter__amount wc-block-price-filter__amount--min wc-block-form-text-input"
15
+ aria-label={ __(
16
+ 'Filter products by minimum price',
17
+ 'woo-gutenberg-products-block'
18
+ ) }
19
+ onChange={ onChange }
20
+ onBlur={ onBlur }
21
+ disabled={ disabled }
22
+ value={ minPrice }
23
+ />
24
+ <input
25
+ type="text"
26
+ size="5"
27
+ className="wc-block-price-filter__amount wc-block-price-filter__amount--max wc-block-form-text-input"
28
+ aria-label={ __(
29
+ 'Filter products by maximum price',
30
+ 'woo-gutenberg-products-block'
31
+ ) }
32
+ onChange={ onChange }
33
+ onBlur={ onBlur }
34
+ disabled={ disabled }
35
+ value={ maxPrice }
36
+ />
37
+ </Fragment>
38
+ );
39
+ };
40
+
41
+ PriceInput.propTypes = {
42
+ /**
43
+ * Is the text input disabled?
44
+ */
45
+ disabled: PropTypes.bool,
46
+ /**
47
+ * Callback fired on input.
48
+ */
49
+ onBlur: PropTypes.func,
50
+ /**
51
+ * Callback fired on input.
52
+ */
53
+ onChange: PropTypes.func,
54
+ /**
55
+ * Min price to display. This is a string because it contains currency e.g. $10.00.
56
+ */
57
+ minPrice: PropTypes.string.isRequired,
58
+ /**
59
+ * Max price to display. This is a string because it contains currency e.g. $10.00.
60
+ */
61
+ maxPrice: PropTypes.string.isRequired,
62
+ };
63
+
64
+ PriceInput.defaultProps = {
65
+ disabled: false,
66
+ onBlur: () => {},
67
+ onChange: () => {},
68
+ };
69
+
70
+ export default PriceInput;
assets/js/base/components/price-slider/price-label.js ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { sprintf, __ } from '@wordpress/i18n';
5
+ import PropTypes from 'prop-types';
6
+
7
+ const PriceLabel = ( { minPrice, maxPrice } ) => {
8
+ if ( ! minPrice && ! maxPrice ) {
9
+ return null;
10
+ }
11
+ return (
12
+ <div className="wc-block-price-filter__range-text">
13
+ { sprintf(
14
+ // translators: %s: low price, %s: high price.
15
+ __( 'Price: %s — %s', 'woo-gutenberg-products-block' ),
16
+ minPrice,
17
+ maxPrice
18
+ ) }
19
+ </div>
20
+ );
21
+ };
22
+
23
+ PriceLabel.propTypes = {
24
+ /**
25
+ * Min price to display.
26
+ */
27
+ minPrice: PropTypes.string.isRequired,
28
+ /**
29
+ * Max price to display.
30
+ */
31
+ maxPrice: PropTypes.string.isRequired,
32
+ };
33
+
34
+ export default PriceLabel;
assets/js/base/components/price-slider/stories/index.js DELETED
@@ -1,42 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { useState } from '@wordpress/element';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import PriceSlider from '../';
10
-
11
- export default {
12
- title: 'WooCommerce Blocks/@base-components/PriceSlider',
13
- component: PriceSlider,
14
- };
15
-
16
- export const Default = () => {
17
- // PriceSlider expects client to update min & max price, i.e. is a controlled component
18
- const [ min, setMin ] = useState( 1000 );
19
- const [ max, setMax ] = useState( 5000 );
20
- return (
21
- <PriceSlider
22
- minPrice={ min }
23
- maxPrice={ max }
24
- onChange={ ( values ) => {
25
- setMin( values[ 0 ] );
26
- setMax( values[ 1 ] );
27
- } }
28
- minConstraint={ 1000 }
29
- maxConstraint={ 5000 }
30
- step={ 250 }
31
- currency={ {
32
- code: 'nzd',
33
- symbol: '$',
34
- thousandSeparator: ' ',
35
- decimalSeparator: '.',
36
- minorUnit: 2,
37
- prefix: '$',
38
- suffix: '',
39
- } }
40
- />
41
- );
42
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/price-slider/style.scss CHANGED
@@ -2,8 +2,8 @@
2
  @mixin thumb {
3
  background-color: transparent;
4
  background-position: 0 0;
5
- width: 28px;
6
- height: 23px;
7
  border: 0;
8
  padding: 0;
9
  margin: 0;
@@ -11,8 +11,7 @@
11
  cursor: pointer;
12
  z-index: 20;
13
  pointer-events: auto;
14
- background-image: url("data:image/svg+xml,%3Csvg width='56' height='46' viewBox='0 0 56 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M25.3176 9.9423L16.9013 3.7991C15.1953 2.5706 13.2618 1.9003 11.2146 2.0121H11.1009C6.21029 2.3471 2.11589 6.3681 2.00219 11.2827C1.88849 16.644 6.21019 21 11.6696 21H11.7833C13.603 21 15.4228 20.3298 16.9013 19.213L25.3176 12.958C26.2275 12.0645 26.2275 10.7242 25.3176 9.9423V9.9423Z' fill='white' stroke='%23757575'/%3E%3Cpath d='M13 7V16M10 7V16V7Z' stroke='%23B8B8B8'/%3E%3Cpath d='M25.3176 9.94227L16.9013 3.79907C15.1953 2.57057 13.2618 1.90027 11.2146 2.01207H11.1009C6.21029 2.34707 2.11589 6.36807 2.00219 11.2827C1.88849 16.644 6.21019 21 11.6696 21H11.7833C13.603 21 15.4228 20.3298 16.9013 19.213L25.3176 12.958C26.2275 12.0645 26.2275 10.7242 25.3176 9.94227V9.94227Z' fill='white' stroke='%23757575'/%3E%3Cpath d='M13 7V16M10 7V16V7Z' stroke='%23B8B8B8'/%3E%3Cpath d='M25.3176 32.9423L16.9013 26.7991C15.1953 25.5706 13.2618 24.9003 11.2146 25.0121H11.1009C6.21029 25.347 2.11589 29.368 2.00219 34.2827C1.88849 39.644 6.21019 44 11.6696 44H11.7833C13.603 44 15.4228 43.3298 16.9013 42.213L25.3176 35.958C26.2275 35.0645 26.2275 33.7242 25.3176 32.9423V32.9423Z' fill='%23F8F3F7' stroke='white' stroke-opacity='0.75' stroke-width='3'/%3E%3Cpath d='M25.3176 32.9423L16.9013 26.7991C15.1953 25.5706 13.2618 24.9003 11.2146 25.0121H11.1009C6.21029 25.347 2.11589 29.368 2.00219 34.2827C1.88849 39.644 6.21019 44 11.6696 44H11.7833C13.603 44 15.4228 43.3298 16.9013 42.213L25.3176 35.958C26.2275 35.0645 26.2275 33.7242 25.3176 32.9423V32.9423Z' stroke='%23757575'/%3E%3Cpath d='M13 30V39M10 30V39V30Z' stroke='%23757575'/%3E%3Cpath d='M30.6824 9.94227L39.0987 3.79907C40.8047 2.57057 42.7382 1.90027 44.7854 2.01207H44.8991C49.7897 2.34707 53.8841 6.36807 53.9978 11.2827C54.1115 16.644 49.7898 21 44.3304 21H44.2167C42.397 21 40.5772 20.3298 39.0987 19.213L30.6824 12.958C29.7725 12.0645 29.7725 10.7242 30.6824 9.94227V9.94227Z' fill='white' stroke='%23757575'/%3E%3Cpath d='M43 6.99997V16M46 6.99997V16V6.99997Z' stroke='%23B8B8B8'/%3E%3Cpath d='M30.6824 32.9423L39.0987 26.7991C40.8047 25.5706 42.7382 24.9003 44.7854 25.0121H44.8991C49.7897 25.347 53.8841 29.368 53.9978 34.2827C54.1115 39.644 49.7898 44 44.3304 44H44.2167C42.397 44 40.5772 43.3298 39.0987 42.213L30.6824 35.958C29.7725 35.0645 29.7725 33.7242 30.6824 32.9423V32.9423Z' fill='%23F8F3F7' stroke='white' stroke-opacity='0.75' stroke-width='3'/%3E%3Cpath d='M30.6824 32.9423L39.0987 26.7991C40.8047 25.5706 42.7382 24.9003 44.7854 25.0121H44.8991C49.7897 25.347 53.8841 29.368 53.9978 34.2827C54.1115 39.644 49.7898 44 44.3304 44H44.2167C42.397 44 40.5772 43.3298 39.0987 42.213L30.6824 35.958C29.7725 35.0645 29.7725 33.7242 30.6824 32.9423V32.9423Z' stroke='%23757575'/%3E%3Cpath d='M43 30V39M46 30V39V30Z' stroke='%23757575'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='56' height='46' fill='white'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A");
15
-
16
  transition: transform .2s ease-in-out;
17
  -webkit-appearance: none;
18
  -moz-appearance: none;
@@ -20,11 +19,12 @@
20
 
21
  &:hover {
22
  @include thumbFocus;
 
23
  }
24
  }
25
  @mixin thumbFocus {
26
- background-position-y: -23px;
27
- transform: scale(1.1);
28
  }
29
  /* stylelint-enable */
30
  @mixin track {
@@ -46,234 +46,239 @@
46
  appearance: none;
47
  }
48
 
49
- .wc-block-components-price-slider {
50
- margin-bottom: $gap-large;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
 
52
- &.wc-block-components-price-slider--has-filter-button {
53
- .wc-block-components-price-slider__controls {
54
- justify-content: flex-end;
55
 
56
- .wc-block-components-price-slider__amount.wc-block-components-price-slider__amount--max {
57
- margin-left: 0;
 
 
 
 
 
 
58
  margin-right: 10px;
59
  }
 
 
 
60
  }
61
  }
 
 
 
62
 
63
- &.is-loading,
64
- &.is-disabled {
65
- .wc-block-components-price-slider__range-input-wrapper,
66
- .wc-block-components-price-slider__amount,
67
- .wc-block-components-price-slider__button {
68
- @include placeholder();
69
- box-shadow: none;
70
- }
71
- }
72
 
73
- &.is-disabled:not(.is-loading) {
74
- .wc-block-components-price-slider__range-input-wrapper,
75
- .wc-block-components-price-slider__amount,
76
- .wc-block-components-price-slider__button {
77
- animation: none;
78
  }
79
  }
80
- }
81
-
82
- .wc-block-components-price-slider__range-input-wrapper {
83
- @include reset;
84
- height: 9px;
85
- clear: both;
86
- position: relative;
87
- box-shadow: 0 0 0 1px inset rgba(0, 0, 0, 0.1);
88
- background: #e1e1e1;
89
- margin: 15px 0;
90
- }
91
-
92
- .wc-block-components-price-slider__range-input-progress {
93
- height: 9px;
94
- width: 100%;
95
- position: absolute;
96
- left: 0;
97
- top: 0;
98
- --track-background: linear-gradient(to right, transparent var(--low), var(--range-color) 0, var(--range-color) var(--high), transparent 0) no-repeat 0 100% / 100% 100%;
99
- --range-color: #{$studio-woocommerce-purple-30};
100
- /*rtl:ignore*/
101
- background: var(--track-background);
102
- }
103
-
104
- .wc-block-components-price-slider__controls {
105
- display: flex;
106
-
107
- .wc-block-components-price-slider__amount {
108
- margin: 0;
109
- border-radius: 4px;
110
- width: auto;
111
- max-width: 100px;
112
- min-width: 0;
113
-
114
- &.wc-block-components-price-slider__amount--min {
115
- margin-right: 10px;
116
  }
117
- &.wc-block-components-price-slider__amount--max {
118
- margin-left: auto;
 
 
 
 
119
  }
120
- }
121
- }
122
- .wc-block-components-price-slider__range-input {
123
- @include reset;
124
- width: 100%;
125
- height: 0;
126
- display: block;
127
- position: relative;
128
- pointer-events: none;
129
- outline: none !important;
130
- position: absolute;
131
- left: 0;
132
- top: 0;
133
-
134
- &::-webkit-slider-runnable-track {
135
- @include track;
136
- }
137
- &::-webkit-slider-thumb {
138
- @include thumb;
139
- margin: -6px 0 0 0;
140
- }
141
- &::-webkit-slider-progress {
142
- @include reset;
143
- }
144
-
145
- &::-moz-focus-outer {
146
- border: 0;
147
- }
148
- &::-moz-range-track {
149
- @include track;
150
- }
151
- &::-moz-range-progress {
152
- @include reset;
153
- }
154
- &::-moz-range-thumb {
155
- @include thumb;
156
- }
157
-
158
- &::-ms-thumb {
159
- @include thumb;
160
- }
161
 
162
- &:focus {
163
- &::-webkit-slider-thumb {
164
- @include thumbFocus;
 
 
 
 
 
165
  }
166
  &::-moz-range-thumb {
167
- @include thumbFocus;
168
  }
 
169
  &::-ms-thumb {
170
- @include thumbFocus;
171
  }
172
- }
173
 
174
- &.wc-block-components-price-slider__range-input--min {
175
- z-index: 21;
176
-
177
- &::-webkit-slider-thumb {
178
- margin-left: -2px;
179
- background-position-x: left;
180
- }
181
- &::-moz-range-thumb {
182
- background-position-x: left;
183
- transform: translate(-2px, 4px);
184
  }
185
- &::-ms-thumb {
186
- background-position-x: left;
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  }
188
- }
189
 
190
- &.wc-block-components-price-slider__range-input--max {
191
- z-index: 20;
192
 
193
- &::-webkit-slider-thumb {
194
- background-position-x: right;
195
- margin-left: 2px;
 
 
 
 
 
 
 
 
196
  }
197
- &::-moz-range-thumb {
198
- background-position-x: right;
199
- transform: translate(2px, 4px);
 
 
 
 
 
 
200
  }
201
- &::-ms-thumb {
202
- background-position-x: right;
 
 
 
 
 
203
  }
204
  }
205
  }
206
 
207
  .rtl {
208
- .wc-block-components-price-slider__range-input-progress {
209
  --track-background: linear-gradient(to left, transparent var(--low), var(--range-color) 0, var(--range-color) var(--high), transparent 0) no-repeat 0 100% / 100% 100%;
210
- --range-color: #{$studio-woocommerce-purple-30};
211
  background: var(--track-background);
212
  }
213
  }
214
 
215
- @mixin ie-fixes() {
216
- .wc-block-components-price-slider__range-input-wrapper {
217
- background: transparent;
218
- box-shadow: none;
219
- height: 24px;
220
- }
221
- .wc-block-components-price-slider__range-input-progress {
222
- background: #{$studio-woocommerce-purple-30};
223
- width: 100%;
224
- top: 7px;
225
- }
226
- .wc-block-components-price-slider__range-input {
227
- height: 24px;
228
- pointer-events: auto;
229
-
230
- &::-ms-track {
231
- /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */
232
  background: transparent;
 
 
233
 
234
- /*leave room for the larger thumb to overflow with a transparent border */
235
- border-color: transparent;
236
- border-width: 7px 0;
237
-
238
- /*remove default tick marks*/
239
- color: transparent;
240
- }
241
- &::-ms-fill-lower {
242
- background: #e1e1e1;
243
- box-shadow: 0 0 0 1px inset #b8b8b8;
244
- }
245
- &::-ms-fill-upper {
246
- background: transparent;
247
- }
248
- &::-ms-tooltip {
249
- display: none;
250
  }
251
- &::-ms-thumb {
252
- transform: translate(1px, 0);
253
  pointer-events: auto;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
254
  }
255
- }
256
- .wc-block-components-price-slider__range-input--max {
257
- &::-ms-fill-upper {
258
- background: #e1e1e1;
259
- box-shadow: 0 0 0 1px inset #b8b8b8;
260
- }
261
- &::-ms-fill-lower {
262
- background: transparent;
263
  }
264
- }
265
 
266
- .wc-block-components-price-slider {
267
  &.is-loading,
268
  &.is-disabled {
269
- .wc-block-components-price-slider__range-input-wrapper {
270
  @include placeholder();
271
  box-shadow: none;
272
  }
273
  }
274
 
275
  &.is-disabled:not(.is-loading) {
276
- .wc-block-components-price-slider__range-input-wrapper {
277
  animation: none;
278
  }
279
  }
@@ -281,80 +286,9 @@
281
  }
282
 
283
  /* IE 11 will not support multi-range slider due to poor pointer-events support on the thumb. Reverts to 2 sliders. */
284
- @include ie11() {
285
- @include ie-fixes();
286
  }
287
-
288
- // Targets Edge <= 18.
289
  @supports (-ms-ime-align:auto) {
290
- @include ie-fixes();
291
- }
292
-
293
- .theme-twentytwentyone {
294
- $border-width: 3px;
295
-
296
- .wc-block-components-price-slider__range-input-wrapper {
297
- background: transparent;
298
- border: $border-width solid currentColor;
299
- box-sizing: border-box;
300
- }
301
-
302
- .wc-block-components-price-slider__range-input-progress {
303
- --range-color: currentColor;
304
- margin: -$border-width;
305
- }
306
-
307
- .wc-block-price-filter__range-input {
308
- background: transparent;
309
- margin: -$border-width;
310
- width: calc(100% + #{$border-width * 2});
311
-
312
- &:hover,
313
- &:focus {
314
- &::-webkit-slider-thumb {
315
- filter: none;
316
- }
317
- &::-moz-range-thumb {
318
- filter: none;
319
- }
320
- &::-ms-thumb {
321
- filter: none;
322
- }
323
- }
324
-
325
- &::-webkit-slider-thumb {
326
- margin-top: -9px;
327
- }
328
-
329
- &.wc-block-components-price-slider__range-input--max::-moz-range-thumb {
330
- transform: translate(2px, 1px);
331
- }
332
-
333
- &.wc-block-components-price-slider__range-input--min::-moz-range-thumb {
334
- transform: translate(-2px, 1px);
335
- }
336
-
337
- &::-ms-track {
338
- border-color: transparent !important;
339
- }
340
- }
341
-
342
- @include ie11() {
343
- .wc-block-components-price-slider__range-input-wrapper {
344
- border: 0;
345
- height: auto;
346
- position: relative;
347
- height: 50px;
348
- }
349
-
350
- .wc-block-components-price-slider__range-input-progress {
351
- display: none;
352
- }
353
-
354
- .wc-block-price-filter__range-input {
355
- height: 100%;
356
- margin: 0;
357
- width: 100%;
358
- }
359
- }
360
  }
2
  @mixin thumb {
3
  background-color: transparent;
4
  background-position: 0 0;
5
+ width: 26px;
6
+ height: 21px;
7
  border: 0;
8
  padding: 0;
9
  margin: 0;
11
  cursor: pointer;
12
  z-index: 20;
13
  pointer-events: auto;
14
+ background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='52' height='42'%3E%3Cdefs%3E%3Cpath id='a' d='M23.3176 7.9423l-8.4163-6.1432C13.1953.5706 11.2618-.0997 9.2146.0121h-.1137C4.2103.347.1159 4.368.0022 9.2827-.1115 14.644 4.2102 19 9.6696 19h.1137c1.8197 0 3.6395-.6702 5.118-1.787l8.4163-6.255c.9099-.8935.9099-2.2338 0-3.0157z'/%3E%3Cpath id='b' d='M23.3176 7.9423l-8.4163-6.1432C13.1953.5706 11.2618-.0997 9.2146.0121h-.1137C4.2103.347.1159 4.368.0022 9.2827-.1115 14.644 4.2102 19 9.6696 19h.1137c1.8197 0 3.6395-.6702 5.118-1.787l8.4163-6.255c.9099-.8935.9099-2.2338 0-3.0157z'/%3E%3C/defs%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath fill='%23FFF' fill-rule='nonzero' stroke='%2395588A' d='M24.3176 8.9423l-8.4163-6.1432c-1.706-1.2285-3.6395-1.8988-5.6867-1.787h-.1137c-4.8906.335-8.985 4.356-9.0987 9.2706C.8885 15.644 5.2102 20 10.6696 20h.1137c1.8197 0 3.6395-.6702 5.118-1.787l8.4163-6.255c.9099-.8935.9099-2.2338 0-3.0157z'/%3E%3Cpath stroke='%23B8B8B8' d='M9 6v9m3-9v9'/%3E%3Cg fill-rule='nonzero' transform='translate(1 22)'%3E%3Cuse fill='%23F8F3F7' stroke='%23FFF' stroke-opacity='.75' stroke-width='3' xlink:href='%23a'/%3E%3Cuse stroke='%2395588A' xlink:href='%23a'/%3E%3C/g%3E%3Cpath stroke='%2395588A' d='M9 27v9m3-9v9'/%3E%3Cg%3E%3Cpath fill='%23FFF' fill-rule='nonzero' stroke='%2395588A' d='M27.6824 8.9423l8.4163-6.1432c1.706-1.2285 3.6395-1.8988 5.6867-1.787h.1137c4.8906.335 8.985 4.356 9.0987 9.2706C51.1115 15.644 46.7898 20 41.3304 20h-.1137c-1.8197 0-3.6395-.6702-5.118-1.787l-8.4163-6.255c-.9099-.8935-.9099-2.2338 0-3.0157z'/%3E%3Cpath stroke='%23B8B8B8' d='M43 6v9m-3-9v9'/%3E%3C/g%3E%3Cg%3E%3Cg fill-rule='nonzero' transform='matrix(-1 0 0 1 51 22)'%3E%3Cuse fill='%23F8F3F7' stroke='%23FFF' stroke-opacity='.75' stroke-width='3' xlink:href='%23b'/%3E%3Cuse stroke='%2395588A' xlink:href='%23b'/%3E%3C/g%3E%3Cpath stroke='%2395588A' d='M43 27v9m-3-9v9'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
 
15
  transition: transform .2s ease-in-out;
16
  -webkit-appearance: none;
17
  -moz-appearance: none;
19
 
20
  &:hover {
21
  @include thumbFocus;
22
+ transform: scale(1.1);
23
  }
24
  }
25
  @mixin thumbFocus {
26
+ background-position-y: -21px;
27
+ filter: drop-shadow(3px 0 0 rgba(255, 255, 255, .75)) drop-shadow(-3px 0 0 rgba(255, 255, 255, .75));
28
  }
29
  /* stylelint-enable */
30
  @mixin track {
46
  appearance: none;
47
  }
48
 
49
+ .wc-block-price-filter {
50
+ .wc-block-price-filter__range-input-wrapper {
51
+ @include reset;
52
+ height: 9px;
53
+ clear: both;
54
+ position: relative;
55
+ box-shadow: 0 0 0 1px inset rgba(0, 0, 0, 0.1);
56
+ background: #e1e1e1;
57
+ margin: 15px 0;
58
+
59
+ .wc-block-price-filter__range-input-progress {
60
+ height: 9px;
61
+ width: 100%;
62
+ position: absolute;
63
+ left: 0;
64
+ top: 0;
65
+ --track-background: linear-gradient(to right, transparent var(--low), var(--range-color) 0, var(--range-color) var(--high), transparent 0) no-repeat 0 100% / 100% 100%;
66
+ --range-color: #a8739d;
67
+ /*rtl:ignore*/
68
+ background: var(--track-background);
69
+ }
70
+ }
71
 
72
+ .wc-block-price-filter__controls {
73
+ display: flex;
74
+ margin: 0 0 20px;
75
 
76
+ .wc-block-price-filter__amount {
77
+ margin: 0;
78
+ border-radius: 4px;
79
+ width: auto;
80
+ max-width: 100px;
81
+ min-width: 0;
82
+
83
+ &.wc-block-price-filter__amount--min {
84
  margin-right: 10px;
85
  }
86
+ &.wc-block-price-filter__amount--max {
87
+ margin-left: auto;
88
+ }
89
  }
90
  }
91
+ &.wc-block-price-filter--has-filter-button {
92
+ .wc-block-price-filter__controls {
93
+ justify-content: flex-end;
94
 
95
+ .wc-block-price-filter__amount.wc-block-price-filter__amount--max {
96
+ margin-left: 0;
97
+ margin-right: 10px;
98
+ }
 
 
 
 
 
99
 
100
+ .wc-block-price-filter__button {
101
+ margin-left: auto;
102
+ white-space: nowrap;
103
+ }
 
104
  }
105
  }
106
+ .wc-block-price-filter__range-input {
107
+ @include reset;
108
+ width: 100%;
109
+ height: 0;
110
+ display: block;
111
+ position: relative;
112
+ pointer-events: none;
113
+ outline: none !important;
114
+
115
+ &::-webkit-slider-runnable-track {
116
+ @include track;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  }
118
+ &::-webkit-slider-thumb {
119
+ @include thumb;
120
+ margin: -6px 0 0 0;
121
+ }
122
+ &::-webkit-slider-progress {
123
+ @include reset;
124
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
 
126
+ &::-moz-focus-outer {
127
+ border: 0;
128
+ }
129
+ &::-moz-range-track {
130
+ @include track;
131
+ }
132
+ &::-moz-range-progress {
133
+ @include reset;
134
  }
135
  &::-moz-range-thumb {
136
+ @include thumb;
137
  }
138
+
139
  &::-ms-thumb {
140
+ @include thumb;
141
  }
 
142
 
143
+ &:focus {
144
+ &::-webkit-slider-thumb {
145
+ @include thumbFocus;
146
+ }
147
+ &::-moz-range-thumb {
148
+ @include thumbFocus;
149
+ }
150
+ &::-ms-thumb {
151
+ @include thumbFocus;
152
+ }
153
  }
154
+
155
+ &.wc-block-price-filter__range-input--min {
156
+ z-index: 21;
157
+
158
+ &::-webkit-slider-thumb {
159
+ margin-left: -2px;
160
+ background-position-x: left;
161
+ }
162
+ &::-moz-range-thumb {
163
+ background-position-x: left;
164
+ transform: translate(-2px, 4px);
165
+ }
166
+ &::-ms-thumb {
167
+ background-position-x: left;
168
+ }
169
  }
 
170
 
171
+ &.wc-block-price-filter__range-input--max {
172
+ z-index: 20;
173
 
174
+ &::-webkit-slider-thumb {
175
+ background-position-x: right;
176
+ margin-left: 2px;
177
+ }
178
+ &::-moz-range-thumb {
179
+ background-position-x: right;
180
+ transform: translate(2px, 4px);
181
+ }
182
+ &::-ms-thumb {
183
+ background-position-x: right;
184
+ }
185
  }
186
+ }
187
+
188
+ &.is-loading,
189
+ &.is-disabled {
190
+ .wc-block-price-filter__range-input-wrapper,
191
+ .wc-block-price-filter__amount,
192
+ .wc-block-price-filter__button {
193
+ @include placeholder();
194
+ box-shadow: none;
195
  }
196
+ }
197
+
198
+ &.is-disabled:not(.is-loading) {
199
+ .wc-block-price-filter__range-input-wrapper,
200
+ .wc-block-price-filter__amount,
201
+ .wc-block-price-filter__button {
202
+ animation: none;
203
  }
204
  }
205
  }
206
 
207
  .rtl {
208
+ .wc-block-price-filter .wc-block-price-filter__range-input-wrapper .wc-block-price-filter__range-input-progress {
209
  --track-background: linear-gradient(to left, transparent var(--low), var(--range-color) 0, var(--range-color) var(--high), transparent 0) no-repeat 0 100% / 100% 100%;
210
+ --range-color: #a8739d;
211
  background: var(--track-background);
212
  }
213
  }
214
 
215
+ @mixin ie {
216
+ .wc-block-price-filter {
217
+ .wc-block-price-filter__range-input-wrapper {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
  background: transparent;
219
+ box-shadow: none;
220
+ height: 24px;
221
 
222
+ .wc-block-price-filter__range-input-progress {
223
+ background: #a8739d;
224
+ box-shadow: 0 0 0 1px inset #95588a;
225
+ width: 100%;
226
+ top: 7px;
227
+ }
 
 
 
 
 
 
 
 
 
 
228
  }
229
+ .wc-block-price-filter__range-input {
230
+ height: 24px;
231
  pointer-events: auto;
232
+ position: absolute;
233
+ left: 0;
234
+ top: 0;
235
+
236
+ &::-ms-track {
237
+ /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */
238
+ background: transparent;
239
+
240
+ /*leave room for the larger thumb to overflow with a transparent border */
241
+ border-color: transparent;
242
+ border-width: 7px 0;
243
+
244
+ /*remove default tick marks*/
245
+ color: transparent;
246
+ }
247
+ &::-ms-fill-lower {
248
+ background: #e1e1e1;
249
+ box-shadow: 0 0 0 1px inset #b8b8b8;
250
+ }
251
+ &::-ms-fill-upper {
252
+ background: transparent;
253
+ }
254
+ &::-ms-tooltip {
255
+ display: none;
256
+ }
257
+ &::-ms-thumb {
258
+ transform: translate(1px, 0);
259
+ pointer-events: auto;
260
+ }
261
  }
262
+ .wc-block-price-filter__range-input--max {
263
+ &::-ms-fill-upper {
264
+ background: #e1e1e1;
265
+ box-shadow: 0 0 0 1px inset #b8b8b8;
266
+ }
267
+ &::-ms-fill-lower {
268
+ background: transparent;
269
+ }
270
  }
 
271
 
 
272
  &.is-loading,
273
  &.is-disabled {
274
+ .wc-block-price-filter__range-input-wrapper {
275
  @include placeholder();
276
  box-shadow: none;
277
  }
278
  }
279
 
280
  &.is-disabled:not(.is-loading) {
281
+ .wc-block-price-filter__range-input-wrapper {
282
  animation: none;
283
  }
284
  }
286
  }
287
 
288
  /* IE 11 will not support multi-range slider due to poor pointer-events support on the thumb. Reverts to 2 sliders. */
289
+ @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
290
+ @include ie;
291
  }
 
 
292
  @supports (-ms-ime-align:auto) {
293
+ @include ie;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
294
  }
assets/js/base/components/price-slider/submit-button.js ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import PropTypes from 'prop-types';
6
+
7
+ const SubmitButton = ( { disabled, onClick } ) => {
8
+ return (
9
+ <button
10
+ type="submit"
11
+ className="wc-block-price-filter__button wc-block-form-button"
12
+ disabled={ disabled }
13
+ onClick={ onClick }
14
+ >
15
+ { // translators: Submit button text for the price filter.
16
+ __( 'Go', 'woo-gutenberg-products-block' ) }
17
+ </button>
18
+ );
19
+ };
20
+
21
+ SubmitButton.propTypes = {
22
+ /**
23
+ * Is the button disabled?
24
+ */
25
+ disabled: PropTypes.bool,
26
+ /**
27
+ * On click callback.
28
+ */
29
+ onClick: PropTypes.func.isRequired,
30
+ };
31
+
32
+ SubmitButton.defaultProps = {
33
+ disabled: false,
34
+ };
35
+
36
+ export default SubmitButton;
assets/js/base/components/price-slider/test/constrain-range-slider-values.js CHANGED
@@ -5,23 +5,23 @@ import { constrainRangeSliderValues } from '../constrain-range-slider-values';
5
 
6
  describe( 'constrainRangeSliderValues', () => {
7
  test.each`
8
- values | min | max | step | isMin | expected
9
- ${ [ 20, 60 ] } | ${ 0 } | ${ 70 } | ${ 10 } | ${ true } | ${ [ 20, 60 ] }
10
- ${ [ 20, 60 ] } | ${ 20 } | ${ 60 } | ${ 10 } | ${ true } | ${ [ 20, 60 ] }
11
- ${ [ 20, 60 ] } | ${ 30 } | ${ 50 } | ${ 10 } | ${ true } | ${ [ 30, 50 ] }
12
- ${ [ 50, 50 ] } | ${ 20 } | ${ 60 } | ${ 10 } | ${ true } | ${ [ 50, 60 ] }
13
- ${ [ 50, 50 ] } | ${ 20 } | ${ 60 } | ${ 10 } | ${ false } | ${ [ 40, 50 ] }
14
- ${ [ 20, 60 ] } | ${ null } | ${ null } | ${ 10 } | ${ true } | ${ [ 20, 60 ] }
15
- ${ [ null, null ] } | ${ 20 } | ${ 60 } | ${ 10 } | ${ true } | ${ [ 20, 60 ] }
16
- ${ [ '20', '60' ] } | ${ 30 } | ${ 50 } | ${ 10 } | ${ true } | ${ [ 30, 50 ] }
17
- ${ [ -60, -20 ] } | ${ -70 } | ${ 0 } | ${ 10 } | ${ true } | ${ [ -60, -20 ] }
18
- ${ [ -60, -20 ] } | ${ -60 } | ${ -20 } | ${ 10 } | ${ true } | ${ [ -60, -20 ] }
19
- ${ [ -60, -20 ] } | ${ -50 } | ${ -30 } | ${ 10 } | ${ true } | ${ [ -50, -30 ] }
20
- ${ [ -50, -50 ] } | ${ -60 } | ${ -20 } | ${ 10 } | ${ true } | ${ [ -50, -40 ] }
21
- ${ [ -50, -50 ] } | ${ -60 } | ${ -20 } | ${ 10 } | ${ false } | ${ [ -60, -50 ] }
22
- ${ [ -60, -20 ] } | ${ null } | ${ null } | ${ 10 } | ${ true } | ${ [ -60, -20 ] }
23
- ${ [ null, null ] } | ${ -60 } | ${ -20 } | ${ 10 } | ${ true } | ${ [ -60, -20 ] }
24
- ${ [ '-60', '-20' ] } | ${ -50 } | ${ -30 } | ${ 10 } | ${ true } | ${ [ -50, -30 ] }
25
  `(
26
  `correctly sets prices to its constraints with arguments values: $values, min: $min, max: $max, step: $step and isMin: $isMin`,
27
  ( { values, min, max, step, isMin, expected } ) => {
5
 
6
  describe( 'constrainRangeSliderValues', () => {
7
  test.each`
8
+ values | min | max | step | isMin | expected
9
+ ${[ 20, 60 ]} | ${0} | ${70} | ${10} | ${true} | ${[ 20, 60 ]}
10
+ ${[ 20, 60 ]} | ${20} | ${60} | ${10} | ${true} | ${[ 20, 60 ]}
11
+ ${[ 20, 60 ]} | ${30} | ${50} | ${10} | ${true} | ${[ 30, 50 ]}
12
+ ${[ 50, 50 ]} | ${20} | ${60} | ${10} | ${true} | ${[ 50, 60 ]}
13
+ ${[ 50, 50 ]} | ${20} | ${60} | ${10} | ${false} | ${[ 40, 50 ]}
14
+ ${[ 20, 60 ]} | ${null} | ${null} | ${10} | ${true} | ${[ 20, 60 ]}
15
+ ${[ null, null ]} | ${20} | ${60} | ${10} | ${true} | ${[ 20, 60 ]}
16
+ ${[ '20', '60' ]} | ${30} | ${50} | ${10} | ${true} | ${[ 30, 50 ]}
17
+ ${[ -60, -20 ]} | ${-70} | ${0} | ${10} | ${true} | ${[ -60, -20 ]}
18
+ ${[ -60, -20 ]} | ${-60} | ${-20} | ${10} | ${true} | ${[ -60, -20 ]}
19
+ ${[ -60, -20 ]} | ${-50} | ${-30} | ${10} | ${true} | ${[ -50, -30 ]}
20
+ ${[ -50, -50 ]} | ${-60} | ${-20} | ${10} | ${true} | ${[ -50, -40 ]}
21
+ ${[ -50, -50 ]} | ${-60} | ${-20} | ${10} | ${false} | ${[ -60, -50 ]}
22
+ ${[ -60, -20 ]} | ${null} | ${null} | ${10} | ${true} | ${[ -60, -20 ]}
23
+ ${[ null, null ]} | ${-60} | ${-20} | ${10} | ${true} | ${[ -60, -20 ]}
24
+ ${[ '-60', '-20' ]} | ${-50} | ${-30} | ${10} | ${true} | ${[ -50, -30 ]}
25
  `(
26
  `correctly sets prices to its constraints with arguments values: $values, min: $min, max: $max, step: $step and isMin: $isMin`,
27
  ( { values, min, max, step, isMin, expected } ) => {
assets/js/base/components/product-list-item/index.js ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import classnames from 'classnames';
6
+ import { useInnerBlockConfigurationContext } from '@woocommerce/base-context/inner-block-configuration-context';
7
+ import { useProductLayoutContext } from '@woocommerce/base-context/product-layout-context';
8
+ import withComponentId from '@woocommerce/base-hocs/with-component-id';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import { renderProductLayout } from './utils';
14
+
15
+ const ProductListItem = ( { product, attributes, componentId } ) => {
16
+ const { layoutConfig } = attributes;
17
+ const { parentName } = useInnerBlockConfigurationContext();
18
+ const { layoutStyleClassPrefix } = useProductLayoutContext();
19
+ const isLoading = ! Object.keys( product ).length > 0;
20
+ const classes = classnames( `${ layoutStyleClassPrefix }__product`, {
21
+ 'is-loading': isLoading,
22
+ } );
23
+
24
+ return (
25
+ <li className={ classes } aria-hidden={ isLoading }>
26
+ { renderProductLayout(
27
+ parentName,
28
+ product,
29
+ layoutConfig,
30
+ componentId
31
+ ) }
32
+ </li>
33
+ );
34
+ };
35
+
36
+ ProductListItem.propTypes = {
37
+ attributes: PropTypes.object.isRequired,
38
+ product: PropTypes.object,
39
+ // from withComponentId
40
+ componentId: PropTypes.number.isRequired,
41
+ };
42
+
43
+ export default withComponentId( ProductListItem );
assets/js/base/components/product-list-item/utils.js ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { getBlockMap } from '../../../blocks/products/base-utils';
5
+
6
+ /**
7
+ * Maps a layout config into atomic components.
8
+ *
9
+ * @param {string} blockName Name of the parent block. Used to get extension children.
10
+ * @param {Object} product Product object to pass to atomic components.
11
+ * @param {Object[]} layoutConfig Object with component data.
12
+ * @param {number} componentId Parent component ID needed for key generation.
13
+ */
14
+ export const renderProductLayout = (
15
+ blockName,
16
+ product,
17
+ layoutConfig,
18
+ componentId
19
+ ) => {
20
+ if ( ! layoutConfig ) {
21
+ return;
22
+ }
23
+
24
+ const blockMap = getBlockMap( blockName );
25
+
26
+ return layoutConfig.map( ( [ name, props = {} ], index ) => {
27
+ let children = [];
28
+
29
+ if ( !! props.children && props.children.length > 0 ) {
30
+ children = renderProductLayout(
31
+ blockName,
32
+ product,
33
+ props.children,
34
+ componentId
35
+ );
36
+ }
37
+
38
+ const LayoutComponent = blockMap[ name ];
39
+
40
+ if ( ! LayoutComponent ) {
41
+ return null;
42
+ }
43
+
44
+ const productID = product.id || 0;
45
+ const keyParts = [ 'layout', name, index, componentId, productID ];
46
+
47
+ return (
48
+ <LayoutComponent
49
+ key={ keyParts.join( '_' ) }
50
+ { ...props }
51
+ children={ children }
52
+ product={ product }
53
+ />
54
+ );
55
+ } );
56
+ };
assets/js/base/components/product-list/container.js CHANGED
@@ -7,12 +7,9 @@ import PropTypes from 'prop-types';
7
  /**
8
  * Internal dependencies
9
  */
10
- import ProductList from './product-list';
11
 
12
- const ProductListContainer = ( {
13
- attributes,
14
- hideOutOfStockItems = false,
15
- } ) => {
16
  const [ currentPage, setPage ] = useState( 1 );
17
  const [ currentSort, setSort ] = useState( attributes.orderby );
18
  useEffect( () => {
@@ -31,7 +28,6 @@ const ProductListContainer = ( {
31
  return (
32
  <ProductList
33
  attributes={ attributes }
34
- hideOutOfStockItems={ hideOutOfStockItems }
35
  currentPage={ currentPage }
36
  onPageChange={ onPageChange }
37
  onSortChange={ onSortChange }
@@ -42,7 +38,6 @@ const ProductListContainer = ( {
42
 
43
  ProductListContainer.propTypes = {
44
  attributes: PropTypes.object.isRequired,
45
- hideOutOfStockItems: PropTypes.bool,
46
  };
47
 
48
  export default ProductListContainer;
7
  /**
8
  * Internal dependencies
9
  */
10
+ import ProductList from './index';
11
 
12
+ const ProductListContainer = ( { attributes } ) => {
 
 
 
13
  const [ currentPage, setPage ] = useState( 1 );
14
  const [ currentSort, setSort ] = useState( attributes.orderby );
15
  useEffect( () => {
28
  return (
29
  <ProductList
30
  attributes={ attributes }
 
31
  currentPage={ currentPage }
32
  onPageChange={ onPageChange }
33
  onSortChange={ onSortChange }
38
 
39
  ProductListContainer.propTypes = {
40
  attributes: PropTypes.object.isRequired,
 
41
  };
42
 
43
  export default ProductListContainer;
assets/js/base/components/product-list/index.js CHANGED
@@ -1,2 +1,207 @@
1
- export { default as ProductList } from './product-list';
2
- export { default as ProductListContainer } from './container';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { isEqual } from 'lodash';
5
+ import PropTypes from 'prop-types';
6
+ import classnames from 'classnames';
7
+ import Pagination from '@woocommerce/base-components/pagination';
8
+ import ProductSortSelect from '@woocommerce/base-components/product-sort-select';
9
+ import ProductListItem from '@woocommerce/base-components/product-list-item';
10
+ import { useEffect } from '@wordpress/element';
11
+ import {
12
+ usePrevious,
13
+ useStoreProducts,
14
+ useSynchronizedQueryState,
15
+ useQueryStateByKey,
16
+ } from '@woocommerce/base-hooks';
17
+ import withScrollToTop from '@woocommerce/base-hocs/with-scroll-to-top';
18
+ import { useProductLayoutContext } from '@woocommerce/base-context/product-layout-context';
19
+
20
+ /**
21
+ * Internal dependencies
22
+ */
23
+ import './style.scss';
24
+ import NoProducts from './no-products';
25
+ import NoMatchingProducts from './no-matching-products';
26
+
27
+ const generateQuery = ( { sortValue, currentPage, attributes } ) => {
28
+ const { columns, rows } = attributes;
29
+ const getSortArgs = ( orderName ) => {
30
+ switch ( orderName ) {
31
+ case 'menu_order':
32
+ case 'popularity':
33
+ case 'rating':
34
+ case 'price':
35
+ return {
36
+ orderby: orderName,
37
+ order: 'asc',
38
+ };
39
+ case 'price-desc':
40
+ return {
41
+ orderby: 'price',
42
+ order: 'desc',
43
+ };
44
+ case 'date':
45
+ return {
46
+ orderby: 'date',
47
+ order: 'desc',
48
+ };
49
+ }
50
+ };
51
+ return {
52
+ ...getSortArgs( sortValue ),
53
+ catalog_visibility: 'catalog',
54
+ per_page: columns * rows,
55
+ page: currentPage,
56
+ };
57
+ };
58
+
59
+ /**
60
+ * Given a query state, returns the same query without the attributes related to
61
+ * pagination and sorting.
62
+ *
63
+ * @param {Object} query Query to extract the attributes from.
64
+ *
65
+ * @return {Object} Same query without pagination and sorting attributes.
66
+ */
67
+
68
+ const extractPaginationAndSortAttributes = ( query ) => {
69
+ /* eslint-disable-next-line no-unused-vars, camelcase */
70
+ const { order, orderby, page, per_page, ...totalQuery } = query;
71
+ return totalQuery;
72
+ };
73
+
74
+ const ProductList = ( {
75
+ attributes,
76
+ currentPage,
77
+ onPageChange,
78
+ onSortChange,
79
+ sortValue,
80
+ scrollToTop,
81
+ } ) => {
82
+ const [ queryState ] = useSynchronizedQueryState(
83
+ generateQuery( {
84
+ attributes,
85
+ sortValue,
86
+ currentPage,
87
+ } )
88
+ );
89
+ const results = useStoreProducts( queryState );
90
+ const { products, productsLoading } = results;
91
+ const totalProducts = parseInt( results.totalProducts );
92
+
93
+ const { layoutStyleClassPrefix } = useProductLayoutContext();
94
+ const totalQuery = extractPaginationAndSortAttributes( queryState );
95
+
96
+ // These are possible filters.
97
+ const [ productAttributes, setProductAttributes ] = useQueryStateByKey(
98
+ 'attributes',
99
+ []
100
+ );
101
+ const [ minPrice, setMinPrice ] = useQueryStateByKey( 'min_price' );
102
+ const [ maxPrice, setMaxPrice ] = useQueryStateByKey( 'max_price' );
103
+
104
+ // Only update previous query totals if the query is different and
105
+ // the total number of products is a finite number.
106
+ const previousQueryTotals = usePrevious(
107
+ { totalQuery, totalProducts },
108
+ (
109
+ { totalQuery: nextQuery, totalProducts: nextProducts },
110
+ { totalQuery: currentQuery } = {}
111
+ ) =>
112
+ ! isEqual( nextQuery, currentQuery ) &&
113
+ Number.isFinite( nextProducts )
114
+ );
115
+ const isPreviousTotalQueryEqual =
116
+ typeof previousQueryTotals === 'object' &&
117
+ isEqual( totalQuery, previousQueryTotals.totalQuery );
118
+ useEffect( () => {
119
+ // If query state (excluding pagination/sorting attributes) changed,
120
+ // reset pagination to the first page.
121
+ if ( ! isPreviousTotalQueryEqual ) {
122
+ onPageChange( 1 );
123
+ }
124
+ }, [ queryState ] );
125
+
126
+ const onPaginationChange = ( newPage ) => {
127
+ scrollToTop( { focusableSelector: 'a, button' } );
128
+ onPageChange( newPage );
129
+ };
130
+
131
+ const getClassnames = () => {
132
+ const { columns, rows, alignButtons, align } = attributes;
133
+ const alignClass = typeof align !== 'undefined' ? 'align' + align : '';
134
+
135
+ return classnames(
136
+ layoutStyleClassPrefix,
137
+ alignClass,
138
+ 'has-' + columns + '-columns',
139
+ {
140
+ 'has-multiple-rows': rows > 1,
141
+ 'has-aligned-buttons': alignButtons,
142
+ }
143
+ );
144
+ };
145
+
146
+ const { contentVisibility } = attributes;
147
+ const perPage = attributes.columns * attributes.rows;
148
+ const totalPages =
149
+ ! Number.isFinite( totalProducts ) && isPreviousTotalQueryEqual
150
+ ? Math.ceil( previousQueryTotals.totalProducts / perPage )
151
+ : Math.ceil( totalProducts / perPage );
152
+ const listProducts = products.length
153
+ ? products
154
+ : Array.from( { length: perPage } );
155
+ const hasProducts = products.length !== 0 || productsLoading;
156
+ const hasFilters =
157
+ productAttributes.length > 0 ||
158
+ Number.isFinite( minPrice ) ||
159
+ Number.isFinite( maxPrice );
160
+
161
+ return (
162
+ <div className={ getClassnames() }>
163
+ { contentVisibility.orderBy && hasProducts && (
164
+ <ProductSortSelect
165
+ onChange={ onSortChange }
166
+ value={ sortValue }
167
+ />
168
+ ) }
169
+ { ! hasProducts && hasFilters && (
170
+ <NoMatchingProducts
171
+ resetCallback={ () => {
172
+ setProductAttributes( [] );
173
+ setMinPrice( null );
174
+ setMaxPrice( null );
175
+ } }
176
+ />
177
+ ) }
178
+ { ! hasProducts && ! hasFilters && <NoProducts /> }
179
+ { hasProducts && (
180
+ <ul className={ `${ layoutStyleClassPrefix }__products` }>
181
+ { listProducts.map( ( product = {}, i ) => (
182
+ <ProductListItem
183
+ key={ product.id || i }
184
+ attributes={ attributes }
185
+ product={ product }
186
+ />
187
+ ) ) }
188
+ </ul>
189
+ ) }
190
+ { totalPages > 1 && (
191
+ <Pagination
192
+ currentPage={ currentPage }
193
+ onPageChange={ onPaginationChange }
194
+ totalPages={ totalPages }
195
+ />
196
+ ) }
197
+ </div>
198
+ );
199
+ };
200
+
201
+ ProductList.propTypes = {
202
+ attributes: PropTypes.object.isRequired,
203
+ // From withScrollToTop.
204
+ scrollToTop: PropTypes.func,
205
+ };
206
+
207
+ export default withScrollToTop( ProductList );
assets/js/base/components/product-list/no-matching-products.js CHANGED
@@ -2,23 +2,26 @@
2
  * External dependencies
3
  */
4
  import { __ } from '@wordpress/i18n';
5
- import { useInnerBlockLayoutContext } from '@woocommerce/shared-context';
6
- import { Icon, search } from '@woocommerce/icons';
7
 
8
  const NoMatchingProducts = ( { resetCallback = () => {} } ) => {
9
- const { parentClassName } = useInnerBlockLayoutContext();
10
  return (
11
- <div className={ `${ parentClassName }__no-products` }>
12
- <Icon
13
- className={ `${ parentClassName }__no-products-image` }
14
- alt=""
15
- srcElement={ search }
16
- size={ 100 }
17
  />
18
- <strong className={ `${ parentClassName }__no-products-title` }>
 
 
19
  { __( 'No products found', 'woo-gutenberg-products-block' ) }
20
  </strong>
21
- <p className={ `${ parentClassName }__no-products-description` }>
 
 
22
  { __(
23
  'We were unable to find any results based on your search.',
24
  'woo-gutenberg-products-block'
2
  * External dependencies
3
  */
4
  import { __ } from '@wordpress/i18n';
5
+ import { WC_BLOCKS_ASSET_URL } from '@woocommerce/block-settings';
6
+ import { useProductLayoutContext } from '@woocommerce/base-context/product-layout-context';
7
 
8
  const NoMatchingProducts = ( { resetCallback = () => {} } ) => {
9
+ const { layoutStyleClassPrefix } = useProductLayoutContext();
10
  return (
11
+ <div className={ `${ layoutStyleClassPrefix }__no-products` }>
12
+ <img
13
+ src={ WC_BLOCKS_ASSET_URL + 'img/no-matching-products.svg' }
14
+ alt={ __( 'No products', 'woo-gutenberg-products-block' ) }
15
+ className={ `${ layoutStyleClassPrefix }__no-products-image` }
 
16
  />
17
+ <strong
18
+ className={ `${ layoutStyleClassPrefix }__no-products-title` }
19
+ >
20
  { __( 'No products found', 'woo-gutenberg-products-block' ) }
21
  </strong>
22
+ <p
23
+ className={ `${ layoutStyleClassPrefix }__no-products-description` }
24
+ >
25
  { __(
26
  'We were unable to find any results based on your search.',
27
  'woo-gutenberg-products-block'
assets/js/base/components/product-list/no-products.js CHANGED
@@ -2,23 +2,26 @@
2
  * External dependencies
3
  */
4
  import { __ } from '@wordpress/i18n';
5
- import { useInnerBlockLayoutContext } from '@woocommerce/shared-context';
6
- import { Icon, notice } from '@woocommerce/icons';
7
 
8
  const NoProducts = () => {
9
- const { parentClassName } = useInnerBlockLayoutContext();
10
  return (
11
- <div className={ `${ parentClassName }__no-products` }>
12
- <Icon
13
- className={ `${ parentClassName }__no-products-image` }
14
- alt=""
15
- srcElement={ notice }
16
- size={ 100 }
17
  />
18
- <strong className={ `${ parentClassName }__no-products-title` }>
 
 
19
  { __( 'No products', 'woo-gutenberg-products-block' ) }
20
  </strong>
21
- <p className={ `${ parentClassName }__no-products-description` }>
 
 
22
  { __(
23
  'There are currently no products available to display.',
24
  'woo-gutenberg-products-block'
2
  * External dependencies
3
  */
4
  import { __ } from '@wordpress/i18n';
5
+ import { WC_BLOCKS_ASSET_URL } from '@woocommerce/block-settings';
6
+ import { useProductLayoutContext } from '@woocommerce/base-context/product-layout-context';
7
 
8
  const NoProducts = () => {
9
+ const { layoutStyleClassPrefix } = useProductLayoutContext();
10
  return (
11
+ <div className={ `${ layoutStyleClassPrefix }__no-products` }>
12
+ <img
13
+ src={ WC_BLOCKS_ASSET_URL + 'img/no-products.svg' }
14
+ alt={ __( 'No products', 'woo-gutenberg-products-block' ) }
15
+ className={ `${ layoutStyleClassPrefix }__no-products-image` }
 
16
  />
17
+ <strong
18
+ className={ `${ layoutStyleClassPrefix }__no-products-title` }
19
+ >
20
  { __( 'No products', 'woo-gutenberg-products-block' ) }
21
  </strong>
22
+ <p
23
+ className={ `${ layoutStyleClassPrefix }__no-products-description` }
24
+ >
25
  { __(
26
  'There are currently no products available to display.',
27
  'woo-gutenberg-products-block'
assets/js/base/components/product-list/product-list-item/index.js DELETED
@@ -1,45 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import PropTypes from 'prop-types';
5
- import classnames from 'classnames';
6
- import { useInnerBlockLayoutContext } from '@woocommerce/shared-context';
7
- import { withInstanceId } from '@woocommerce/base-hocs/with-instance-id';
8
-
9
- /**
10
- * Internal dependencies
11
- */
12
- import { renderProductLayout } from './utils';
13
-
14
- const ProductListItem = ( { product, attributes, instanceId } ) => {
15
- const { layoutConfig } = attributes;
16
- const { parentClassName, parentName } = useInnerBlockLayoutContext();
17
- const isLoading = Object.keys( product ).length === 0;
18
- const classes = classnames(
19
- `${ parentClassName }__product`,
20
- 'wc-block-layout',
21
- {
22
- 'is-loading': isLoading,
23
- }
24
- );
25
-
26
- return (
27
- <li className={ classes } aria-hidden={ isLoading }>
28
- { renderProductLayout(
29
- parentName,
30
- product,
31
- layoutConfig,
32
- instanceId
33
- ) }
34
- </li>
35
- );
36
- };
37
-
38
- ProductListItem.propTypes = {
39
- attributes: PropTypes.object.isRequired,
40
- product: PropTypes.object,
41
- // from withInstanceId
42
- instanceId: PropTypes.number.isRequired,
43
- };
44
-
45
- export default withInstanceId( ProductListItem );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/product-list/product-list-item/utils.js DELETED
@@ -1,61 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { getBlockMap } from '@woocommerce/atomic-utils';
5
- import { Suspense } from '@wordpress/element';
6
-
7
- /**
8
- * Maps a layout config into atomic components.
9
- *
10
- * @param {string} blockName Name of the parent block. Used to get extension children.
11
- * @param {Object} product Product object to pass to atomic components.
12
- * @param {Object[]} layoutConfig Object with component data.
13
- * @param {number} componentId Parent component ID needed for key generation.
14
- */
15
- export const renderProductLayout = (
16
- blockName,
17
- product,
18
- layoutConfig,
19
- componentId
20
- ) => {
21
- if ( ! layoutConfig ) {
22
- return;
23
- }
24
-
25
- const blockMap = getBlockMap( blockName );
26
-
27
- return layoutConfig.map( ( [ name, props = {} ], index ) => {
28
- let children = [];
29
-
30
- if ( !! props.children && props.children.length > 0 ) {
31
- children = renderProductLayout(
32
- blockName,
33
- product,
34
- props.children,
35
- componentId
36
- );
37
- }
38
-
39
- const LayoutComponent = blockMap[ name ];
40
-
41
- if ( ! LayoutComponent ) {
42
- return null;
43
- }
44
-
45
- const productID = product.id || 0;
46
- const keyParts = [ 'layout', name, index, componentId, productID ];
47
-
48
- return (
49
- <Suspense
50
- key={ keyParts.join( '_' ) }
51
- fallback={ <div className="wc-block-placeholder" /> }
52
- >
53
- <LayoutComponent
54
- { ...props }
55
- children={ children }
56
- product={ product }
57
- />
58
- </Suspense>
59
- );
60
- } );
61
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/product-list/product-list.js DELETED
@@ -1,262 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __, _n, sprintf } from '@wordpress/i18n';
5
- import { isEqual } from 'lodash';
6
- import PropTypes from 'prop-types';
7
- import classnames from 'classnames';
8
- import Pagination from '@woocommerce/base-components/pagination';
9
- import { useEffect } from '@wordpress/element';
10
- import { usePrevious } from '@woocommerce/base-hooks';
11
- import {
12
- useStoreEvents,
13
- useStoreProducts,
14
- useSynchronizedQueryState,
15
- useQueryStateByKey,
16
- } from '@woocommerce/base-context/hooks';
17
- import withScrollToTop from '@woocommerce/base-hocs/with-scroll-to-top';
18
- import { useInnerBlockLayoutContext } from '@woocommerce/shared-context';
19
- import { speak } from '@wordpress/a11y';
20
-
21
- /**
22
- * Internal dependencies
23
- */
24
- import NoProducts from './no-products';
25
- import NoMatchingProducts from './no-matching-products';
26
- import ProductSortSelect from './product-sort-select';
27
- import ProductListItem from './product-list-item';
28
- import './style.scss';
29
-
30
- const generateQuery = ( {
31
- sortValue,
32
- currentPage,
33
- attributes,
34
- hideOutOfStockItems,
35
- } ) => {
36
- const { columns, rows } = attributes;
37
- const getSortArgs = ( orderName ) => {
38
- switch ( orderName ) {
39
- case 'menu_order':
40
- case 'popularity':
41
- case 'rating':
42
- case 'price':
43
- return {
44
- orderby: orderName,
45
- order: 'asc',
46
- };
47
- case 'price-desc':
48
- return {
49
- orderby: 'price',
50
- order: 'desc',
51
- };
52
- case 'date':
53
- return {
54
- orderby: 'date',
55
- order: 'desc',
56
- };
57
- }
58
- };
59
-
60
- return {
61
- ...getSortArgs( sortValue ),
62
- catalog_visibility: 'catalog',
63
- per_page: columns * rows,
64
- page: currentPage,
65
- ...( hideOutOfStockItems && {
66
- stock_status: [ 'instock', 'onbackorder' ],
67
- } ),
68
- };
69
- };
70
-
71
- /**
72
- * Given a query state, returns the same query without the attributes related to
73
- * pagination and sorting.
74
- *
75
- * @param {Object} query Query to extract the attributes from.
76
- *
77
- * @return {Object} Same query without pagination and sorting attributes.
78
- */
79
-
80
- const extractPaginationAndSortAttributes = ( query ) => {
81
- /* eslint-disable-next-line no-unused-vars, camelcase */
82
- const { order, orderby, page, per_page, ...totalQuery } = query;
83
- return totalQuery || {};
84
- };
85
-
86
- const announceLoadingCompletion = ( totalProducts ) => {
87
- if ( ! Number.isFinite( totalProducts ) ) {
88
- return;
89
- }
90
-
91
- if ( totalProducts === 0 ) {
92
- speak( __( 'No products found', 'woo-gutenberg-products-block' ) );
93
- } else {
94
- speak(
95
- sprintf(
96
- /* translators: %s is an integer higher than 0 (1, 2, 3...) */
97
- _n(
98
- '%d product found',
99
- '%d products found',
100
- totalProducts,
101
- 'woo-gutenberg-products-block'
102
- ),
103
- totalProducts
104
- )
105
- );
106
- }
107
- };
108
-
109
- const areQueryTotalsDifferent = (
110
- { totalQuery: nextQuery, totalProducts: nextProducts },
111
- { totalQuery: currentQuery } = {}
112
- ) => ! isEqual( nextQuery, currentQuery ) && Number.isFinite( nextProducts );
113
-
114
- const ProductList = ( {
115
- attributes,
116
- currentPage,
117
- onPageChange,
118
- onSortChange,
119
- sortValue,
120
- scrollToTop,
121
- hideOutOfStockItems = false,
122
- } ) => {
123
- const [ queryState ] = useSynchronizedQueryState(
124
- generateQuery( {
125
- attributes,
126
- sortValue,
127
- currentPage,
128
- hideOutOfStockItems,
129
- } )
130
- );
131
- const { products, totalProducts, productsLoading } = useStoreProducts(
132
- queryState
133
- );
134
- const { parentClassName, parentName } = useInnerBlockLayoutContext();
135
- const totalQuery = extractPaginationAndSortAttributes( queryState );
136
- const { dispatchStoreEvent } = useStoreEvents();
137
-
138
- // These are possible filters.
139
- const [ productAttributes, setProductAttributes ] = useQueryStateByKey(
140
- 'attributes',
141
- []
142
- );
143
- const [ minPrice, setMinPrice ] = useQueryStateByKey( 'min_price' );
144
- const [ maxPrice, setMaxPrice ] = useQueryStateByKey( 'max_price' );
145
-
146
- // Only update previous query totals if the query is different and the total number of products is a finite number.
147
- const previousQueryTotals = usePrevious(
148
- { totalQuery, totalProducts },
149
- areQueryTotalsDifferent
150
- );
151
-
152
- // If the product list changes, trigger an event.
153
- useEffect( () => {
154
- dispatchStoreEvent( 'product-list-render', {
155
- products,
156
- listName: parentName,
157
- } );
158
- }, [ products, parentName, dispatchStoreEvent ] );
159
-
160
- // If query state (excluding pagination/sorting attributes) changed, reset pagination to the first page.
161
- useEffect( () => {
162
- if ( isEqual( totalQuery, previousQueryTotals?.totalQuery ) ) {
163
- return;
164
- }
165
- onPageChange( 1 );
166
-
167
- // Make sure there was a previous query, so we don't announce it on page load.
168
- if ( previousQueryTotals?.totalQuery ) {
169
- announceLoadingCompletion( totalProducts );
170
- }
171
- }, [
172
- previousQueryTotals?.totalQuery,
173
- totalProducts,
174
- onPageChange,
175
- totalQuery,
176
- ] );
177
-
178
- const onPaginationChange = ( newPage ) => {
179
- scrollToTop( { focusableSelector: 'a, button' } );
180
- onPageChange( newPage );
181
- };
182
-
183
- const getClassnames = () => {
184
- const { columns, rows, alignButtons, align } = attributes;
185
- const alignClass = typeof align !== 'undefined' ? 'align' + align : '';
186
-
187
- return classnames(
188
- parentClassName,
189
- alignClass,
190
- 'has-' + columns + '-columns',
191
- {
192
- 'has-multiple-rows': rows > 1,
193
- 'has-aligned-buttons': alignButtons,
194
- }
195
- );
196
- };
197
-
198
- const { contentVisibility } = attributes;
199
- const perPage = attributes.columns * attributes.rows;
200
- const totalPages =
201
- ! Number.isFinite( totalProducts ) &&
202
- Number.isFinite( previousQueryTotals?.totalProducts ) &&
203
- isEqual( totalQuery, previousQueryTotals?.totalQuery )
204
- ? Math.ceil( previousQueryTotals.totalProducts / perPage )
205
- : Math.ceil( totalProducts / perPage );
206
- const listProducts = products.length
207
- ? products
208
- : Array.from( { length: perPage } );
209
- const hasProducts = products.length !== 0 || productsLoading;
210
- const hasFilters =
211
- productAttributes.length > 0 ||
212
- Number.isFinite( minPrice ) ||
213
- Number.isFinite( maxPrice );
214
-
215
- return (
216
- <div className={ getClassnames() }>
217
- { contentVisibility.orderBy && hasProducts && (
218
- <ProductSortSelect
219
- onChange={ onSortChange }
220
- value={ sortValue }
221
- />
222
- ) }
223
- { ! hasProducts && hasFilters && (
224
- <NoMatchingProducts
225
- resetCallback={ () => {
226
- setProductAttributes( [] );
227
- setMinPrice( null );
228
- setMaxPrice( null );
229
- } }
230
- />
231
- ) }
232
- { ! hasProducts && ! hasFilters && <NoProducts /> }
233
- { hasProducts && (
234
- <ul className={ `${ parentClassName }__products` }>
235
- { listProducts.map( ( product = {}, i ) => (
236
- <ProductListItem
237
- key={ product.id || i }
238
- attributes={ attributes }
239
- product={ product }
240
- />
241
- ) ) }
242
- </ul>
243
- ) }
244
- { totalPages > 1 && (
245
- <Pagination
246
- currentPage={ currentPage }
247
- onPageChange={ onPaginationChange }
248
- totalPages={ totalPages }
249
- />
250
- ) }
251
- </div>
252
- );
253
- };
254
-
255
- ProductList.propTypes = {
256
- attributes: PropTypes.object.isRequired,
257
- hideOutOfStockItems: PropTypes.bool,
258
- // From withScrollToTop.
259
- scrollToTop: PropTypes.func,
260
- };
261
-
262
- export default withScrollToTop( ProductList );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/product-list/product-sort-select/index.js DELETED
@@ -1,89 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __ } from '@wordpress/i18n';
5
- import PropTypes from 'prop-types';
6
- import SortSelect from '@woocommerce/base-components/sort-select';
7
-
8
- /**
9
- * Internal dependencies
10
- */
11
- import './style.scss';
12
-
13
- const ProductSortSelect = ( { defaultValue, onChange, readOnly, value } ) => {
14
- return (
15
- <SortSelect
16
- className="wc-block-product-sort-select wc-block-components-product-sort-select"
17
- defaultValue={ defaultValue }
18
- name="orderby"
19
- onChange={ onChange }
20
- options={ [
21
- {
22
- key: 'menu_order',
23
- label: __(
24
- 'Default sorting',
25
- 'woo-gutenberg-products-block'
26
- ),
27
- },
28
- {
29
- key: 'popularity',
30
- label: __( 'Popularity', 'woo-gutenberg-products-block' ),
31
- },
32
- {
33
- key: 'rating',
34
- label: __(
35
- 'Average rating',
36
- 'woo-gutenberg-products-block'
37
- ),
38
- },
39
- {
40
- key: 'date',
41
- label: __( 'Latest', 'woo-gutenberg-products-block' ),
42
- },
43
- {
44
- key: 'price',
45
- label: __(
46
- 'Price: low to high',
47
- 'woo-gutenberg-products-block'
48
- ),
49
- },
50
- {
51
- key: 'price-desc',
52
- label: __(
53
- 'Price: high to low',
54
- 'woo-gutenberg-products-block'
55
- ),
56
- },
57
- ] }
58
- readOnly={ readOnly }
59
- screenReaderLabel={ __(
60
- 'Order products by',
61
- 'woo-gutenberg-products-block'
62
- ) }
63
- value={ value }
64
- />
65
- );
66
- };
67
-
68
- ProductSortSelect.propTypes = {
69
- defaultValue: PropTypes.oneOf( [
70
- 'menu_order',
71
- 'popularity',
72
- 'rating',
73
- 'date',
74
- 'price',
75
- 'price-desc',
76
- ] ),
77
- onChange: PropTypes.func,
78
- readOnly: PropTypes.bool,
79
- value: PropTypes.oneOf( [
80
- 'menu_order',
81
- 'popularity',
82
- 'rating',
83
- 'date',
84
- 'price',
85
- 'price-desc',
86
- ] ),
87
- };
88
-
89
- export default ProductSortSelect;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/product-list/product-sort-select/style.scss DELETED
@@ -1,4 +0,0 @@
1
- .wc-block-components-product-sort-select {
2
- margin-bottom: $gap-large;
3
- text-align: left;
4
- }
 
 
 
 
assets/js/base/components/product-list/style.scss CHANGED
@@ -20,7 +20,6 @@
20
  max-width: 150px;
21
  margin: 0 auto 1em;
22
  display: block;
23
- color: inherit;
24
  }
25
  .wc-block-grid__no-products-title {
26
  display: block;
@@ -36,6 +35,7 @@
36
  .wc-block-grid__products {
37
  display: flex;
38
  flex-wrap: wrap;
 
39
  padding: 0;
40
  margin: 0 (-$gap/2) $gap;
41
  background-clip: padding-box;
@@ -52,22 +52,233 @@
52
  border-left: $gap/2 solid transparent;
53
  border-right: $gap/2 solid transparent;
54
  border-bottom: $gap solid transparent;
55
- list-style: none;
56
  }
57
 
58
- // Increased specificity necessary as Gutenberg's generic reset overrides box sizing
59
- .wc-block-grid__product.wc-block-grid__product {
60
- box-sizing: border-box;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  }
62
 
63
- .theme-twentytwenty .wc-block-grid,
64
  .wc-block-grid {
65
  &.has-aligned-buttons {
66
  .wc-block-grid__product {
67
  display: flex;
68
  flex-direction: column;
69
  }
70
- .wc-block-grid__product > :last-child {
 
71
  margin-top: auto;
72
  margin-bottom: 0;
73
  padding-bottom: $gap-small;
@@ -79,27 +290,18 @@
79
  max-width: 100% / $i;
80
  }
81
  }
82
- // Adjust font size as more cols are added.
83
- &.has-6-columns .wc-block-grid__product {
84
- font-size: 0.5em;
85
- }
86
- &.has-6-columns.alignfull,
87
- &.has-5-columns {
88
- .wc-block-grid__product {
89
- font-size: 0.58em;
90
- }
91
- }
92
- &.has-5-columns.alignfull,
93
- &.has-4-columns:not(.alignwide):not(.alignfull) {
94
  .wc-block-grid__product {
95
- font-size: 0.75em;
96
  }
97
  }
98
- &.has-3-columns:not(.alignwide):not(.alignfull) {
99
- font-size: 0.92em;
100
- }
101
  }
102
 
 
103
  @include breakpoint( "<480px" ) {
104
  .wc-block-grid {
105
  @for $i from 2 to 9 {
@@ -116,9 +318,11 @@
116
  }
117
  }
118
  }
 
 
 
119
  }
120
  }
121
-
122
  @include breakpoint( "480px-600px" ) {
123
  .wc-block-grid {
124
  @for $i from 2 to 9 {
@@ -140,5 +344,33 @@
140
  }
141
  }
142
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  }
144
  }
20
  max-width: 150px;
21
  margin: 0 auto 1em;
22
  display: block;
 
23
  }
24
  .wc-block-grid__no-products-title {
25
  display: block;
35
  .wc-block-grid__products {
36
  display: flex;
37
  flex-wrap: wrap;
38
+ list-style: none;
39
  padding: 0;
40
  margin: 0 (-$gap/2) $gap;
41
  background-clip: padding-box;
52
  border-left: $gap/2 solid transparent;
53
  border-right: $gap/2 solid transparent;
54
  border-bottom: $gap solid transparent;
 
55
  }
56
 
57
+ // Extra specificity to avoid editor styles on linked images.
58
+ .entry-content .wc-block-grid__product-image,
59
+ .wc-block-grid__product-image {
60
+ text-decoration: none;
61
+ display: block;
62
+ position: relative;
63
+
64
+ a {
65
+ text-decoration: none;
66
+ border: 0;
67
+ outline: 0;
68
+ box-shadow: none;
69
+ }
70
+
71
+ .wc-block-grid__product-image__image {
72
+ vertical-align: middle;
73
+ width: 100%;
74
+
75
+ &[hidden] {
76
+ display: none;
77
+ }
78
+
79
+ .is-loading & {
80
+ @include placeholder();
81
+ height: 0;
82
+ padding-bottom: 100%;
83
+ }
84
+ }
85
+ }
86
+
87
+ .edit-post-visual-editor .editor-block-list__block .wc-block-grid__product-title,
88
+ .editor-styles-wrapper .wc-block-grid__product-title,
89
+ .wc-block-grid__product-title {
90
+ line-height: 1.2em;
91
+ font-weight: 700;
92
+ padding: 0;
93
+ color: inherit;
94
+ font-size: inherit;
95
+ display: block;
96
+
97
+ .is-loading &::before {
98
+ @include placeholder();
99
+ content: ".";
100
+ display: inline-block;
101
+ width: 6em;
102
+ }
103
+ }
104
+
105
+ .wc-block-grid__product-price {
106
+ display: block;
107
+
108
+ .wc-block-grid__product-price__regular {
109
+ font-size: 0.8em;
110
+ line-height: 1;
111
+ color: #aaa;
112
+ margin-top: -0.25em;
113
+ display: block;
114
+ }
115
+ .wc-block-grid__product-price__value {
116
+ letter-spacing: -1px;
117
+ font-weight: 600;
118
+ display: block;
119
+ font-size: 1.25em;
120
+ line-height: 1.25;
121
+ color: #000;
122
+ span {
123
+ white-space: nowrap;
124
+ }
125
+ .is-loading &::before {
126
+ @include placeholder();
127
+ content: ".";
128
+ display: inline-block;
129
+ width: 3em;
130
+ }
131
+ }
132
+ }
133
+
134
+ .wc-block-grid__product-add-to-cart {
135
+ word-break: break-word;
136
+ white-space: normal;
137
+ a,
138
+ button {
139
+ word-break: break-word;
140
+ white-space: normal;
141
+ margin: 0 auto !important;
142
+ display: inline-flex;
143
+ flex-direction: column;
144
+ justify-content: center;
145
+
146
+ &.loading {
147
+ opacity: 0.25;
148
+ }
149
+
150
+ &::after {
151
+ margin-left: 0.5em;
152
+ display: inline-block;
153
+ }
154
+
155
+ &.added::after {
156
+ font-family: WooCommerce; /* stylelint-disable-line */
157
+ content: "\e017";
158
+ }
159
+
160
+ &.loading::after {
161
+ font-family: WooCommerce; /* stylelint-disable-line */
162
+ content: "\e031";
163
+ animation: spin 2s linear infinite;
164
+ }
165
+
166
+ .is-loading & {
167
+ @include placeholder();
168
+ min-width: 7em;
169
+ }
170
+ }
171
+ }
172
+
173
+ .wc-block-grid__product-rating {
174
+ display: block;
175
+
176
+ .wc-block-grid__product-rating__stars,
177
+ .star-rating {
178
+ overflow: hidden;
179
+ position: relative;
180
+ width: 5.3em;
181
+ height: 1.618em;
182
+ line-height: 1.618;
183
+ font-size: 1em;
184
+ font-family: star; /* stylelint-disable-line */
185
+ font-weight: 400;
186
+ display: -block;
187
+ margin: 0 auto;
188
+ text-align: left;
189
+
190
+ &::before {
191
+ content: "\53\53\53\53\53";
192
+ top: 0;
193
+ left: 0;
194
+ right: 0;
195
+ position: absolute;
196
+ opacity: 0.5;
197
+ color: #aaa;
198
+ }
199
+ span {
200
+ overflow: hidden;
201
+ top: 0;
202
+ left: 0;
203
+ right: 0;
204
+ position: absolute;
205
+ padding-top: 1.5em;
206
+ }
207
+ span::before {
208
+ content: "\53\53\53\53\53";
209
+ top: 0;
210
+ left: 0;
211
+ right: 0;
212
+ position: absolute;
213
+ color: #000;
214
+ }
215
+ }
216
+ }
217
+
218
+ .editor-styles-wrapper .wc-block-grid__products .wc-block-grid__product .wc-block-grid__product-onsale,
219
+ .wc-block-grid__product-onsale {
220
+ border: 1px solid #43454b;
221
+ color: #43454b;
222
+ background: #fff;
223
+ padding: 0.202em 0.6180469716em;
224
+ font-size: 0.875rem;
225
+ text-align: center;
226
+ text-transform: uppercase;
227
+ font-weight: 600;
228
+ display: inline-block;
229
+ width: auto;
230
+ border-radius: 3px;
231
+ z-index: 9;
232
+ position: relative;
233
+ margin: $gap-smaller auto;
234
+ }
235
+ .editor-styles-wrapper .wc-block-grid__products .wc-block-grid__product .wc-block-grid__product-image,
236
+ .wc-block-grid__product-image {
237
+ .wc-block-grid__product-onsale {
238
+ &.wc-block-grid__product-onsale--alignleft {
239
+ position: absolute;
240
+ left: $gap-smaller/2;
241
+ top: $gap-smaller/2;
242
+ right: auto;
243
+ margin: 0;
244
+ }
245
+ &.wc-block-grid__product-onsale--aligncenter {
246
+ position: absolute;
247
+ top: $gap-smaller/2;
248
+ left: 50%;
249
+ transform: translateX(-50%);
250
+ margin: 0;
251
+ }
252
+ &.wc-block-grid__product-onsale--alignright {
253
+ position: absolute;
254
+ right: $gap-smaller/2;
255
+ top: $gap-smaller/2;
256
+ left: auto;
257
+ margin: 0;
258
+ }
259
+ }
260
+ }
261
+
262
+ // Element spacing.
263
+ .wc-block-grid__product {
264
+ .wc-block-grid__product-image,
265
+ .wc-block-grid__product-title,
266
+ .wc-block-grid__product-price,
267
+ .wc-block-grid__product-rating,
268
+ .wc-block-grid__product-add-to-cart {
269
+ margin-top: 0;
270
+ margin-bottom: $gap-small;
271
+ }
272
  }
273
 
 
274
  .wc-block-grid {
275
  &.has-aligned-buttons {
276
  .wc-block-grid__product {
277
  display: flex;
278
  flex-direction: column;
279
  }
280
+ .wc-block-grid__product > .wc-block-grid__product-title:last-child,
281
+ .wc-block-grid__product > div:last-child {
282
  margin-top: auto;
283
  margin-bottom: 0;
284
  padding-bottom: $gap-small;
290
  max-width: 100% / $i;
291
  }
292
  }
293
+ &.has-4-columns:not(.alignwide):not(.alignfull),
294
+ &.has-5-columns:not(.alignfull),
295
+ &.has-6-columns:not(.alignfull),
296
+ &.has-7-columns,
297
+ &.has-8-columns {
 
 
 
 
 
 
 
298
  .wc-block-grid__product {
299
+ font-size: 0.8em;
300
  }
301
  }
 
 
 
302
  }
303
 
304
+ // Responsive media styles.
305
  @include breakpoint( "<480px" ) {
306
  .wc-block-grid {
307
  @for $i from 2 to 9 {
318
  }
319
  }
320
  }
321
+ .wc-block-grid__product-image img {
322
+ width: 100%;
323
+ }
324
  }
325
  }
 
326
  @include breakpoint( "480px-600px" ) {
327
  .wc-block-grid {
328
  @for $i from 2 to 9 {
344
  }
345
  }
346
  }
347
+ .wc-block-grid__product-image img {
348
+ width: 100%;
349
+ }
350
+ }
351
+ }
352
+
353
+ .theme-twentysixteen {
354
+ .wc-block-grid {
355
+ // Prevent white theme styles.
356
+ .price ins {
357
+ color: #77a464;
358
+ }
359
+ }
360
+ }
361
+ .theme-twentynineteen {
362
+ .wc-block-grid__product {
363
+ font-size: 0.88889em;
364
+ }
365
+ // Change the title font to match headings.
366
+ .wc-block-grid__product-title,
367
+ .wc-block-grid__product-onsale {
368
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
369
+ }
370
+ .wc-block-grid__product-title::before {
371
+ display: none;
372
+ }
373
+ .wc-block-grid__product-onsale {
374
+ line-height: 1;
375
  }
376
  }
assets/js/base/components/product-name/index.tsx DELETED
@@ -1,48 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { decodeEntities } from '@wordpress/html-entities';
5
- import classnames from 'classnames';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import './style.scss';
11
-
12
- /**
13
- * Render the Product name.
14
- *
15
- * The store API runs titles through `wp_kses_post()` which removes dangerous HTML tags, so using it inside `dangerouslySetInnerHTML` is considered safe.
16
- */
17
- export default ( {
18
- className = '',
19
- disabled = false,
20
- name,
21
- permalink = '',
22
- ...props
23
- }: {
24
- className: string;
25
- disabled: boolean;
26
- name: string;
27
- permalink: string;
28
- } ): JSX.Element => {
29
- const classes = classnames( 'wc-block-components-product-name', className );
30
- return disabled ? (
31
- <span
32
- className={ classes }
33
- { ...props }
34
- dangerouslySetInnerHTML={ {
35
- __html: decodeEntities( name ),
36
- } }
37
- />
38
- ) : (
39
- <a
40
- className={ classes }
41
- href={ permalink }
42
- { ...props }
43
- dangerouslySetInnerHTML={ {
44
- __html: decodeEntities( name ),
45
- } }
46
- />
47
- );
48
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/product-name/stories/index.js DELETED
@@ -1,26 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { boolean } from '@storybook/addon-knobs';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import ProductName from '../';
10
-
11
- export default {
12
- title: 'WooCommerce Blocks/@base-components/cart-checkout/ProductName',
13
- component: ProductName,
14
- };
15
-
16
- export const Default = () => {
17
- const disabled = boolean( 'disabled', false );
18
-
19
- return (
20
- <ProductName
21
- disabled={ disabled }
22
- name={ 'Test product' }
23
- permalink={ '/' }
24
- />
25
- );
26
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/product-name/style.scss DELETED
@@ -1,4 +0,0 @@
1
- .wc-block-components-product-name {
2
- @include font-size(regular);
3
- @include wrap-break-word();
4
- }
 
 
 
 
assets/js/base/components/product-name/test/__snapshots__/index.js.snap DELETED
@@ -1,49 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`ProductName should merge classes and props 1`] = `
4
- <a
5
- className="wc-block-components-product-name lorem-ipsum"
6
- dangerouslySetInnerHTML={
7
- Object {
8
- "__html": "Test product",
9
- }
10
- }
11
- href="/"
12
- rel="nofollow"
13
- />
14
- `;
15
-
16
- exports[`ProductName should not render a link if disabled is true 1`] = `
17
- <span
18
- className="wc-block-components-product-name"
19
- dangerouslySetInnerHTML={
20
- Object {
21
- "__html": "Test product",
22
- }
23
- }
24
- />
25
- `;
26
-
27
- exports[`ProductName should render a link if disabled is false 1`] = `
28
- <a
29
- className="wc-block-components-product-name"
30
- dangerouslySetInnerHTML={
31
- Object {
32
- "__html": "Test product",
33
- }
34
- }
35
- href="/"
36
- />
37
- `;
38
-
39
- exports[`ProductName should render a link if disabled is not defined 1`] = `
40
- <a
41
- className="wc-block-components-product-name"
42
- dangerouslySetInnerHTML={
43
- Object {
44
- "__html": "Test product",
45
- }
46
- }
47
- href="/"
48
- />
49
- `;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/product-name/test/index.js DELETED
@@ -1,48 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import TestRenderer from 'react-test-renderer';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import ProductName from '..';
10
-
11
- describe( 'ProductName', () => {
12
- test( 'should not render a link if disabled is true', () => {
13
- const component = TestRenderer.create(
14
- <ProductName disabled={ true } name="Test product" permalink="/" />
15
- );
16
-
17
- expect( component.toJSON() ).toMatchSnapshot();
18
- } );
19
-
20
- test( 'should render a link if disabled is false', () => {
21
- const component = TestRenderer.create(
22
- <ProductName disabled={ false } name="Test product" permalink="/" />
23
- );
24
-
25
- expect( component.toJSON() ).toMatchSnapshot();
26
- } );
27
-
28
- test( 'should render a link if disabled is not defined', () => {
29
- const component = TestRenderer.create(
30
- <ProductName name="Test product" permalink="/" />
31
- );
32
-
33
- expect( component.toJSON() ).toMatchSnapshot();
34
- } );
35
-
36
- test( 'should merge classes and props', () => {
37
- const component = TestRenderer.create(
38
- <ProductName
39
- className="lorem-ipsum"
40
- name="Test product"
41
- permalink="/"
42
- rel="nofollow"
43
- />
44
- );
45
-
46
- expect( component.toJSON() ).toMatchSnapshot();
47
- } );
48
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/product-price/index.js DELETED
@@ -1,214 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __, sprintf } from '@wordpress/i18n';
5
- import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
6
- import classNames from 'classnames';
7
- import PropTypes from 'prop-types';
8
- import { createInterpolateElement } from 'wordpress-element';
9
- import { formatPrice } from '@woocommerce/price-format';
10
-
11
- /**
12
- * Internal dependencies
13
- */
14
- import './style.scss';
15
-
16
- const PriceRange = ( {
17
- currency,
18
- maxPrice,
19
- minPrice,
20
- priceClassName,
21
- priceStyle,
22
- } ) => {
23
- return (
24
- <>
25
- <span className="screen-reader-text">
26
- { sprintf(
27
- /* translators: %1$s min price, %2$s max price */
28
- __(
29
- 'Price between %1$s and %2$s',
30
- 'woo-gutenberg-products-block'
31
- ),
32
- formatPrice( minPrice ),
33
- formatPrice( maxPrice )
34
- ) }
35
- </span>
36
- <span aria-hidden={ true }>
37
- <FormattedMonetaryAmount
38
- className={ classNames(
39
- 'wc-block-components-product-price__value',
40
- priceClassName
41
- ) }
42
- currency={ currency }
43
- value={ minPrice }
44
- style={ priceStyle }
45
- />
46
- &nbsp;&mdash;&nbsp;
47
- <FormattedMonetaryAmount
48
- className={ classNames(
49
- 'wc-block-components-product-price__value',
50
- priceClassName
51
- ) }
52
- currency={ currency }
53
- value={ maxPrice }
54
- style={ priceStyle }
55
- />
56
- </span>
57
- </>
58
- );
59
- };
60
-
61
- const SalePrice = ( {
62
- currency,
63
- regularPriceClassName,
64
- regularPriceStyle,
65
- regularPrice,
66
- priceClassName,
67
- priceStyle,
68
- price,
69
- } ) => {
70
- return (
71
- <>
72
- <span className="screen-reader-text">
73
- { __( 'Previous price:', 'woo-gutenberg-products-block' ) }
74
- </span>
75
- <FormattedMonetaryAmount
76
- currency={ currency }
77
- renderText={ ( value ) => (
78
- <del
79
- className={ classNames(
80
- 'wc-block-components-product-price__regular',
81
- regularPriceClassName
82
- ) }
83
- style={ regularPriceStyle }
84
- >
85
- { value }
86
- </del>
87
- ) }
88
- value={ regularPrice }
89
- />
90
- <span className="screen-reader-text">
91
- { __( 'Discounted price:', 'woo-gutenberg-products-block' ) }
92
- </span>
93
- <FormattedMonetaryAmount
94
- currency={ currency }
95
- renderText={ ( value ) => (
96
- <ins
97
- className={ classNames(
98
- 'wc-block-components-product-price__value',
99
- 'is-discounted',
100
- priceClassName
101
- ) }
102
- style={ priceStyle }
103
- >
104
- { value }
105
- </ins>
106
- ) }
107
- value={ price }
108
- />
109
- </>
110
- );
111
- };
112
-
113
- const ProductPrice = ( {
114
- align,
115
- className,
116
- currency,
117
- format = '<price/>',
118
- maxPrice = null,
119
- minPrice = null,
120
- price = null,
121
- priceClassName,
122
- priceStyle,
123
- regularPrice,
124
- regularPriceClassName,
125
- regularPriceStyle,
126
- } ) => {
127
- const wrapperClassName = classNames(
128
- className,
129
- 'price',
130
- 'wc-block-components-product-price',
131
- {
132
- [ `wc-block-components-product-price--align-${ align }` ]: align,
133
- }
134
- );
135
-
136
- if ( ! format.includes( '<price/>' ) ) {
137
- format = '<price/>';
138
- // eslint-disable-next-line no-console
139
- console.error( 'Price formats need to include the `<price/>` tag.' );
140
- }
141
-
142
- const isDiscounted = regularPrice && price !== regularPrice;
143
- let priceComponent = (
144
- <span
145
- className={ classNames(
146
- 'wc-block-components-product-price__value',
147
- priceClassName
148
- ) }
149
- />
150
- );
151
-
152
- if ( isDiscounted ) {
153
- priceComponent = (
154
- <SalePrice
155
- currency={ currency }
156
- price={ price }
157
- priceClassName={ priceClassName }
158
- priceStyle={ priceStyle }
159
- regularPrice={ regularPrice }
160
- regularPriceClassName={ regularPriceClassName }
161
- regularPriceStyle={ regularPriceStyle }
162
- />
163
- );
164
- } else if ( minPrice !== null && maxPrice !== null ) {
165
- priceComponent = (
166
- <PriceRange
167
- currency={ currency }
168
- maxPrice={ maxPrice }
169
- minPrice={ minPrice }
170
- priceClassName={ priceClassName }
171
- priceStyle={ priceStyle }
172
- />
173
- );
174
- } else if ( price !== null ) {
175
- priceComponent = (
176
- <FormattedMonetaryAmount
177
- className={ classNames(
178
- 'wc-block-components-product-price__value',
179
- priceClassName
180
- ) }
181
- currency={ currency }
182
- value={ price }
183
- style={ priceStyle }
184
- />
185
- );
186
- }
187
-
188
- return (
189
- <span className={ wrapperClassName }>
190
- { createInterpolateElement( format, {
191
- price: priceComponent,
192
- } ) }
193
- </span>
194
- );
195
- };
196
-
197
- ProductPrice.propTypes = {
198
- align: PropTypes.oneOf( [ 'left', 'center', 'right' ] ),
199
- className: PropTypes.string,
200
- currency: PropTypes.object,
201
- format: PropTypes.string,
202
- price: PropTypes.oneOfType( [ PropTypes.number, PropTypes.string ] ),
203
- priceClassName: PropTypes.string,
204
- priceStyle: PropTypes.object,
205
- // Range price props
206
- maxPrice: PropTypes.oneOfType( [ PropTypes.number, PropTypes.string ] ),
207
- minPrice: PropTypes.oneOfType( [ PropTypes.number, PropTypes.string ] ),
208
- // On sale price props
209
- regularPrice: PropTypes.oneOfType( [ PropTypes.number, PropTypes.string ] ),
210
- regularPriceClassName: PropTypes.string,
211
- regularPriceStyle: PropTypes.object,
212
- };
213
-
214
- export default ProductPrice;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/product-price/stories/index.js DELETED
@@ -1,57 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { number, select } from '@storybook/addon-knobs';
5
- import { currencyKnob } from '@woocommerce/knobs';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import ProductPrice from '../';
11
-
12
- export default {
13
- title: 'WooCommerce Blocks/@base-components/ProductPrice',
14
- component: ProductPrice,
15
- };
16
-
17
- export const standard = () => {
18
- const align = select( 'Align', [ 'left', 'center', 'right' ], 'left' );
19
- const currency = currencyKnob();
20
- const price = number( 'Price', 4000 );
21
-
22
- return (
23
- <ProductPrice align={ align } currency={ currency } price={ price } />
24
- );
25
- };
26
-
27
- export const sale = () => {
28
- const align = select( 'Align', [ 'left', 'center', 'right' ], 'left' );
29
- const currency = currencyKnob();
30
- const price = number( 'Price', 3000 );
31
- const regularPrice = number( 'Regular price', 4000 );
32
-
33
- return (
34
- <ProductPrice
35
- align={ align }
36
- currency={ currency }
37
- price={ price }
38
- regularPrice={ regularPrice }
39
- />
40
- );
41
- };
42
-
43
- export const range = () => {
44
- const align = select( 'Align', [ 'left', 'center', 'right' ], 'left' );
45
- const currency = currencyKnob();
46
- const minPrice = number( 'Min price', 3000 );
47
- const maxPrice = number( 'Max price', 5000 );
48
-
49
- return (
50
- <ProductPrice
51
- align={ align }
52
- currency={ currency }
53
- minPrice={ minPrice }
54
- maxPrice={ maxPrice }
55
- />
56
- );
57
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/product-price/style.scss DELETED
@@ -1,29 +0,0 @@
1
- /*rtl:begin:ignore*/
2
- .wc-block-components-product-price--align-left {
3
- display: block;
4
- text-align: left;
5
- }
6
- .wc-block-components-product-price--align-center {
7
- display: block;
8
- text-align: center;
9
- }
10
- .wc-block-components-product-price--align-right {
11
- display: block;
12
- text-align: right;
13
- }
14
- /*rtl:end:ignore*/
15
-
16
- .wc-block-components-product-price__value {
17
- &.is-discounted {
18
- margin-left: 0.5em;
19
- }
20
- }
21
-
22
- .is-loading {
23
- .wc-block-components-product-price::before {
24
- @include placeholder();
25
- content: ".";
26
- display: inline-block;
27
- width: 5em;
28
- }
29
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/product-price/test/__snapshots__/index.js.snap DELETED
@@ -1,57 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`ProductPrice should apply the format if one is provided 1`] = `
4
- <span
5
- className="price wc-block-components-product-price"
6
- >
7
- pre price
8
- <span
9
- className="screen-reader-text"
10
- >
11
- Previous price:
12
- </span>
13
- <del
14
- className="wc-block-components-product-price__regular"
15
- >
16
- £1.00
17
- </del>
18
- <span
19
- className="screen-reader-text"
20
- >
21
- Discounted price:
22
- </span>
23
- <ins
24
- className="wc-block-components-product-price__value is-discounted"
25
- >
26
- £0.50
27
- </ins>
28
- Test format
29
- </span>
30
- `;
31
-
32
- exports[`ProductPrice should use default price if no format is provided 1`] = `
33
- <span
34
- className="price wc-block-components-product-price"
35
- >
36
- <span
37
- className="screen-reader-text"
38
- >
39
- Previous price:
40
- </span>
41
- <del
42
- className="wc-block-components-product-price__regular"
43
- >
44
- £1.00
45
- </del>
46
- <span
47
- className="screen-reader-text"
48
- >
49
- Discounted price:
50
- </span>
51
- <ins
52
- className="wc-block-components-product-price__value is-discounted"
53
- >
54
- £0.50
55
- </ins>
56
- </span>
57
- `;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/product-price/test/index.js DELETED
@@ -1,63 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import TestRenderer from 'react-test-renderer';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import ProductPrice from '../index';
10
-
11
- describe( 'ProductPrice', () => {
12
- const currency = {
13
- code: 'GBP',
14
- currency_code: 'GBP',
15
- currency_decimal_separator: '.',
16
- currency_minor_unit: 2,
17
- currency_prefix: '£',
18
- currency_suffix: '',
19
- currency_symbol: '£',
20
- currency_thousand_separator: ',',
21
- decimalSeparator: '.',
22
- minorUnit: 2,
23
- prefix: '£',
24
- price: '61400',
25
- price_range: null,
26
- raw_prices: {
27
- precision: 6,
28
- price: '614000000',
29
- regular_price: '614000000',
30
- sale_price: '614000000',
31
- },
32
- regular_price: '61400',
33
- sale_price: '61400',
34
- suffix: '',
35
- symbol: '£',
36
- thousandSeparator: ',',
37
- };
38
-
39
- test( 'should use default price if no format is provided', () => {
40
- const component = TestRenderer.create(
41
- <ProductPrice
42
- price={ 50 }
43
- regularPrice={ 100 }
44
- currency={ currency }
45
- />
46
- );
47
-
48
- expect( component.toJSON() ).toMatchSnapshot();
49
- } );
50
-
51
- test( 'should apply the format if one is provided', () => {
52
- const component = TestRenderer.create(
53
- <ProductPrice
54
- price={ 50 }
55
- regularPrice={ 100 }
56
- currency={ currency }
57
- format="pre price <price/> Test format"
58
- />
59
- );
60
-
61
- expect( component.toJSON() ).toMatchSnapshot();
62
- } );
63
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/product-sort-select/index.js ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import PropTypes from 'prop-types';
6
+ import SortSelect from '@woocommerce/base-components/sort-select';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import './style.scss';
12
+
13
+ const ProductSortSelect = ( { defaultValue, onChange, readOnly, value } ) => {
14
+ return (
15
+ <SortSelect
16
+ className="wc-block-product-sort-select"
17
+ defaultValue={ defaultValue }
18
+ name="orderby"
19
+ onChange={ onChange }
20
+ options={ [
21
+ {
22
+ key: 'menu_order',
23
+ label: __(
24
+ 'Default sorting',
25
+ 'woo-gutenberg-products-block'
26
+ ),
27
+ },
28
+ {
29
+ key: 'popularity',
30
+ label: __( 'Popularity', 'woo-gutenberg-products-block' ),
31
+ },
32
+ {
33
+ key: 'rating',
34
+ label: __(
35
+ 'Average rating',
36
+ 'woo-gutenberg-products-block'
37
+ ),
38
+ },
39
+ {
40
+ key: 'date',
41
+ label: __( 'Latest', 'woo-gutenberg-products-block' ),
42
+ },
43
+ {
44
+ key: 'price',
45
+ label: __(
46
+ 'Price: low to high',
47
+ 'woo-gutenberg-products-block'
48
+ ),
49
+ },
50
+ {
51
+ key: 'price-desc',
52
+ label: __(
53
+ 'Price: high to low',
54
+ 'woo-gutenberg-products-block'
55
+ ),
56
+ },
57
+ ] }
58
+ readOnly={ readOnly }
59
+ screenReaderLabel={ __(
60
+ 'Order products by',
61
+ 'woo-gutenberg-products-block'
62
+ ) }
63
+ value={ value }
64
+ />
65
+ );
66
+ };
67
+
68
+ ProductSortSelect.propTypes = {
69
+ defaultValue: PropTypes.oneOf( [
70
+ 'menu_order',
71
+ 'popularity',
72
+ 'rating',
73
+ 'date',
74
+ 'price',
75
+ 'price-desc',
76
+ ] ),
77
+ onChange: PropTypes.func,
78
+ readOnly: PropTypes.bool,
79
+ value: PropTypes.oneOf( [
80
+ 'menu_order',
81
+ 'popularity',
82
+ 'rating',
83
+ 'date',
84
+ 'price',
85
+ 'price-desc',
86
+ ] ),
87
+ };
88
+
89
+ export default ProductSortSelect;
assets/js/base/components/product-sort-select/style.scss ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ .wc-block-product-sort-select {
2
+ margin-bottom: $gap-large;
3
+ text-align: left;
4
+ }
assets/js/base/components/quantity-selector/index.tsx DELETED
@@ -1,159 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { __, sprintf } from '@wordpress/i18n';
5
- import { speak } from '@wordpress/a11y';
6
- import classNames from 'classnames';
7
- import { useCallback } from '@wordpress/element';
8
- import { DOWN, UP } from '@wordpress/keycodes';
9
- import { isNumber } from '@woocommerce/types';
10
-
11
- /**
12
- * Internal dependencies
13
- */
14
- import './style.scss';
15
-
16
- interface QuantitySelectorProps {
17
- className?: string;
18
- quantity?: number;
19
- minimum?: number;
20
- maximum: number;
21
- onChange: ( newQuantity: number ) => void;
22
- itemName?: string;
23
- disabled: boolean;
24
- }
25
-
26
- const QuantitySelector = ( {
27
- className,
28
- quantity = 1,
29
- minimum = 1,
30
- maximum,
31
- onChange = () => {
32
- /* Do nothing. */
33
- },
34
- itemName = '',
35
- disabled,
36
- }: QuantitySelectorProps ): JSX.Element => {
37
- const classes = classNames(
38
- 'wc-block-components-quantity-selector',
39
- className
40
- );
41
-
42
- const hasMaximum = typeof maximum !== 'undefined';
43
- const canDecrease = quantity > minimum;
44
- const canIncrease = ! hasMaximum || quantity < maximum;
45
-
46
- /**
47
- * Handles keyboard up and down keys to change quantity value.
48
- *
49
- * @param {Object} event event data.
50
- */
51
- const quantityInputOnKeyDown = useCallback(
52
- ( event ) => {
53
- const isArrowDown =
54
- typeof event.key !== undefined
55
- ? event.key === 'ArrowDown'
56
- : event.keyCode === DOWN;
57
- const isArrowUp =
58
- typeof event.key !== undefined
59
- ? event.key === 'ArrowUp'
60
- : event.keyCode === UP;
61
-
62
- if ( isArrowDown && canDecrease ) {
63
- event.preventDefault();
64
- onChange( quantity - 1 );
65
- }
66
-
67
- if ( isArrowUp && canIncrease ) {
68
- event.preventDefault();
69
- onChange( quantity + 1 );
70
- }
71
- },
72
- [ quantity, onChange, canIncrease, canDecrease ]
73
- );
74
-
75
- return (
76
- <div className={ classes }>
77
- <input
78
- className="wc-block-components-quantity-selector__input"
79
- disabled={ disabled }
80
- type="number"
81
- step="1"
82
- min="0"
83
- value={ quantity }
84
- onKeyDown={ quantityInputOnKeyDown }
85
- onChange={ ( event ) => {
86
- let value =
87
- ! isNumber( event.target.value ) || ! event.target.value
88
- ? 0
89
- : parseInt( event.target.value, 10 );
90
- if ( hasMaximum ) {
91
- value = Math.min( value, maximum );
92
- }
93
- value = Math.max( value, minimum );
94
- if ( value !== quantity ) {
95
- onChange( value );
96
- }
97
- } }
98
- aria-label={ sprintf(
99
- /* translators: %s refers to the item name in the cart. */
100
- __(
101
- 'Quantity of %s in your cart.',
102
- 'woo-gutenberg-products-block'
103
- ),
104
- itemName
105
- ) }
106
- />
107
- <button
108
- aria-label={ __(
109
- 'Reduce quantity',
110
- 'woo-gutenberg-products-block'
111
- ) }
112
- className="wc-block-components-quantity-selector__button wc-block-components-quantity-selector__button--minus"
113
- disabled={ disabled || ! canDecrease }
114
- onClick={ () => {
115
- const newQuantity = quantity - 1;
116
- onChange( newQuantity );
117
- speak(
118
- sprintf(
119
- /* translators: %s refers to the item name in the cart. */
120
- __(
121
- 'Quantity reduced to %s.',
122
- 'woo-gutenberg-products-block'
123
- ),
124
- newQuantity
125
- )
126
- );
127
- } }
128
- >
129
- &#65293;
130
- </button>
131
- <button
132
- aria-label={ __(
133
- 'Increase quantity',
134
- 'woo-gutenberg-products-block'
135
- ) }
136
- disabled={ disabled || ! canIncrease }
137
- className="wc-block-components-quantity-selector__button wc-block-components-quantity-selector__button--plus"
138
- onClick={ () => {
139
- const newQuantity = quantity + 1;
140
- onChange( newQuantity );
141
- speak(
142
- sprintf(
143
- /* translators: %s refers to the item name in the cart. */
144
- __(
145
- 'Quantity increased to %s.',
146
- 'woo-gutenberg-products-block'
147
- ),
148
- newQuantity
149
- )
150
- );
151
- } }
152
- >
153
- &#65291;
154
- </button>
155
- </div>
156
- );
157
- };
158
-
159
- export default QuantitySelector;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/quantity-selector/stories/index.js DELETED
@@ -1,30 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { boolean } from '@storybook/addon-knobs';
5
- import { useState } from 'react';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import QuantitySelector from '../';
11
-
12
- export default {
13
- title: 'WooCommerce Blocks/@base-components/QuantitySelector',
14
- component: QuantitySelector,
15
- };
16
-
17
- export const Default = () => {
18
- const [ quantity, changeQuantity ] = useState();
19
-
20
- return (
21
- <div style={ { width: 100 } }>
22
- <QuantitySelector
23
- disabled={ boolean( 'Disabled', false ) }
24
- quantity={ quantity }
25
- onChange={ changeQuantity }
26
- itemName="widgets"
27
- />
28
- </div>
29
- );
30
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/quantity-selector/style.scss DELETED
@@ -1,121 +0,0 @@
1
- @mixin reset-button {
2
- border: 0;
3
- padding: 0;
4
- margin: 0;
5
- background: none transparent;
6
- box-shadow: none;
7
-
8
- &:focus {
9
- outline: 2px solid $gray-300;
10
- }
11
- }
12
-
13
- .wc-block-components-quantity-selector {
14
- display: flex;
15
- width: 107px;
16
- border: 1px solid $gray-300;
17
- background: #fff;
18
- border-radius: 4px;
19
- // needed so that buttons fill the container.
20
- box-sizing: content-box;
21
- margin: 0 0 0.25em 0;
22
-
23
- .has-dark-controls & {
24
- background-color: transparent;
25
- border-color: $input-border-dark;
26
- }
27
-
28
- // Extra label for specificity needed in the editor.
29
- input.wc-block-components-quantity-selector__input {
30
- @include font-size(regular);
31
- order: 2;
32
- min-width: 40px;
33
- flex: 1 1 auto;
34
- border: 0;
35
- padding: 0.4em 0;
36
- margin: 0;
37
- text-align: center;
38
- background: transparent;
39
- box-shadow: none;
40
- color: #000;
41
- line-height: 1;
42
- vertical-align: middle;
43
- -moz-appearance: textfield;
44
-
45
- &:focus {
46
- background: $gray-100;
47
- outline: 1px solid $gray-300;
48
- }
49
- &:disabled {
50
- color: $gray-600;
51
- }
52
-
53
- .has-dark-controls & {
54
- color: $input-text-dark;
55
- background: transparent;
56
-
57
- &:focus {
58
- background: transparent;
59
- }
60
- &:disabled {
61
- color: $input-disabled-dark;
62
- }
63
- }
64
- }
65
- input::-webkit-outer-spin-button,
66
- input::-webkit-inner-spin-button {
67
- -webkit-appearance: none;
68
- margin: 0;
69
- }
70
-
71
- .wc-block-components-quantity-selector__button {
72
- @include reset-button;
73
- @include font-size(regular);
74
- min-width: 30px;
75
- cursor: pointer;
76
- color: $gray-900;
77
- font-style: normal;
78
- text-align: center;
79
- text-decoration: none;
80
-
81
- &:hover,
82
- &:focus {
83
- @include reset-button;
84
- color: $gray-900;
85
- }
86
- &:disabled {
87
- color: $gray-600;
88
- cursor: default;
89
- @include reset-button;
90
- }
91
-
92
- .has-dark-controls & {
93
- color: $input-text-dark;
94
-
95
- &:hover,
96
- &:focus {
97
- color: $input-text-dark;
98
- }
99
- &:disabled {
100
- color: $input-disabled-dark;
101
- }
102
- }
103
- }
104
-
105
- > .wc-block-components-quantity-selector__button--minus {
106
- order: 1;
107
- }
108
-
109
- > .wc-block-components-quantity-selector__button--plus {
110
- order: 3;
111
- }
112
- }
113
-
114
- .theme-twentyseventeen {
115
- .wc-block-components-quantity-selector .wc-block-components-quantity-selector__button {
116
- &:hover,
117
- &:focus {
118
- background: none transparent;
119
- }
120
- }
121
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/radio-control-accordion/index.js DELETED
@@ -1,73 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classnames from 'classnames';
5
- import { withInstanceId } from '@woocommerce/base-hocs/with-instance-id';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import RadioControlOption from '../radio-control/option';
11
-
12
- const RadioControlAccordion = ( {
13
- className,
14
- instanceId,
15
- id,
16
- selected,
17
- onChange,
18
- options = [],
19
- } ) => {
20
- const radioControlId = id || instanceId;
21
-
22
- return (
23
- options.length && (
24
- <div
25
- className={ classnames(
26
- 'wc-block-components-radio-control',
27
- className
28
- ) }
29
- >
30
- { options.map( ( option ) => {
31
- const hasOptionContent =
32
- typeof option === 'object' && 'content' in option;
33
- const checked = option.value === selected;
34
- return (
35
- <div
36
- className="wc-block-components-radio-control-accordion-option"
37
- key={ option.value }
38
- >
39
- <RadioControlOption
40
- name={ `radio-control-${ radioControlId }` }
41
- checked={ checked }
42
- option={ option }
43
- onChange={ ( value ) => {
44
- onChange( value );
45
- if (
46
- typeof option.onChange === 'function'
47
- ) {
48
- option.onChange( value );
49
- }
50
- } }
51
- />
52
- { hasOptionContent && checked && (
53
- <div
54
- className={ classnames(
55
- 'wc-block-components-radio-control-accordion-content',
56
- {
57
- 'wc-block-components-radio-control-accordion-content-hide': ! checked,
58
- }
59
- ) }
60
- >
61
- { option.content }
62
- </div>
63
- ) }
64
- </div>
65
- );
66
- } ) }
67
- </div>
68
- )
69
- );
70
- };
71
-
72
- export default withInstanceId( RadioControlAccordion );
73
- export { RadioControlAccordion };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/radio-control/index.js DELETED
@@ -1,52 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classnames from 'classnames';
5
- import { withInstanceId } from '@woocommerce/base-hocs/with-instance-id';
6
-
7
- /**
8
- * Internal dependencies
9
- */
10
- import RadioControlOption from './option';
11
- import './style.scss';
12
-
13
- const RadioControl = ( {
14
- className,
15
- instanceId,
16
- id,
17
- selected,
18
- onChange,
19
- options = [],
20
- } ) => {
21
- const radioControlId = id || instanceId;
22
-
23
- return (
24
- options.length && (
25
- <div
26
- className={ classnames(
27
- 'wc-block-components-radio-control',
28
- className
29
- ) }
30
- >
31
- { options.map( ( option ) => (
32
- <RadioControlOption
33
- key={ `${ radioControlId }-${ option.value }` }
34
- name={ `radio-control-${ radioControlId }` }
35
- checked={ option.value === selected }
36
- option={ option }
37
- onChange={ ( value ) => {
38
- onChange( value );
39
- if ( typeof option.onChange === 'function' ) {
40
- option.onChange( value );
41
- }
42
- } }
43
- />
44
- ) ) }
45
- </div>
46
- )
47
- );
48
- };
49
-
50
- export default withInstanceId( RadioControl );
51
- export { RadioControlOption };
52
- export { default as RadioControlOptionLayout } from './option-layout';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/radio-control/option-layout.tsx DELETED
@@ -1,56 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import type { ReactElement } from 'react';
5
- import type { PackageRateOption } from '@woocommerce/type-defs/shipping';
6
-
7
- const OptionLayout = ( {
8
- label,
9
- secondaryLabel,
10
- description,
11
- secondaryDescription,
12
- id,
13
- }: Partial< PackageRateOption > ): ReactElement => {
14
- return (
15
- <div className="wc-block-components-radio-control__option-layout">
16
- <div className="wc-block-components-radio-control__label-group">
17
- { label && (
18
- <span
19
- id={ id && `${ id }__label` }
20
- className="wc-block-components-radio-control__label"
21
- >
22
- { label }
23
- </span>
24
- ) }
25
- { secondaryLabel && (
26
- <span
27
- id={ id && `${ id }__secondary-label` }
28
- className="wc-block-components-radio-control__secondary-label"
29
- >
30
- { secondaryLabel }
31
- </span>
32
- ) }
33
- </div>
34
- <div className="wc-block-components-radio-control__description-group">
35
- { description && (
36
- <span
37
- id={ id && `${ id }__description` }
38
- className="wc-block-components-radio-control__description"
39
- >
40
- { description }
41
- </span>
42
- ) }
43
- { secondaryDescription && (
44
- <span
45
- id={ id && `${ id }__secondary-description` }
46
- className="wc-block-components-radio-control__secondary-description"
47
- >
48
- { secondaryDescription }
49
- </span>
50
- ) }
51
- </div>
52
- </div>
53
- );
54
- };
55
-
56
- export default OptionLayout;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/radio-control/option.js DELETED
@@ -1,57 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classnames from 'classnames';
5
-
6
- /**
7
- * Internal dependencies
8
- */
9
- import OptionLayout from './option-layout';
10
-
11
- const Option = ( { checked, name, onChange, option } ) => {
12
- const {
13
- value,
14
- label,
15
- description,
16
- secondaryLabel,
17
- secondaryDescription,
18
- } = option;
19
- const onChangeValue = ( event ) => onChange( event.target.value );
20
-
21
- return (
22
- <label
23
- className={ classnames(
24
- 'wc-block-components-radio-control__option',
25
- {
26
- 'wc-block-components-radio-control__option-checked': checked,
27
- }
28
- ) }
29
- htmlFor={ `${ name }-${ value }` }
30
- >
31
- <input
32
- id={ `${ name }-${ value }` }
33
- className="wc-block-components-radio-control__input"
34
- type="radio"
35
- name={ name }
36
- value={ value }
37
- onChange={ onChangeValue }
38
- checked={ checked }
39
- aria-describedby={ classnames( {
40
- [ `${ name }-${ value }__label` ]: label,
41
- [ `${ name }-${ value }__secondary-label` ]: secondaryLabel,
42
- [ `${ name }-${ value }__description` ]: description,
43
- [ `${ name }-${ value }__secondary-description` ]: secondaryDescription,
44
- } ) }
45
- />
46
- <OptionLayout
47
- id={ `${ name }-${ value }` }
48
- label={ label }
49
- secondaryLabel={ secondaryLabel }
50
- description={ description }
51
- secondaryDescription={ secondaryDescription }
52
- />
53
- </label>
54
- );
55
- };
56
-
57
- export default Option;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/radio-control/style.scss DELETED
@@ -1,115 +0,0 @@
1
- .wc-block-components-radio-control__option {
2
- @include reset-typography();
3
- display: block;
4
- margin: em($gap) 0;
5
- padding: 0 0 0 em($gap-largest);
6
- position: relative;
7
-
8
- &:first-child {
9
- margin-top: 0;
10
- }
11
- &:last-child {
12
- margin-bottom: 0;
13
- }
14
- }
15
-
16
- .wc-block-components-radio-control__option-layout {
17
- display: table;
18
- width: 100%;
19
- }
20
-
21
- .wc-block-components-radio-control__option .wc-block-components-radio-control__option-layout {
22
- &::after {
23
- display: none;
24
- }
25
- }
26
-
27
- .wc-block-components-radio-control__label-group,
28
- .wc-block-components-radio-control__description-group {
29
- display: table-row;
30
-
31
- > span {
32
- display: table-cell;
33
- }
34
-
35
- .wc-block-components-radio-control__secondary-label,
36
- .wc-block-components-radio-control__secondary-description {
37
- text-align: right;
38
- min-width: 50%;
39
- }
40
- }
41
-
42
- .wc-block-components-radio-control__label,
43
- .wc-block-components-radio-control__secondary-label {
44
- // Currently, max() CSS function calls need to be wrapped with unquote.
45
- // See: https://github.com/sass/sass/issues/2378#issuecomment-367490840
46
- // These values should be the same as the control input height.
47
- line-height: unquote("max(1.5rem, 24px)");
48
- }
49
-
50
- .wc-block-components-radio-control__description,
51
- .wc-block-components-radio-control__secondary-description {
52
- @include font-size( small );
53
- line-height: 20px;
54
- }
55
-
56
- // Extra class for specificity.
57
- .wc-block-components-radio-control {
58
- .wc-block-components-radio-control__input {
59
- appearance: none;
60
- background: #fff;
61
- border: 2px solid $input-border-gray;
62
- border-radius: 50%;
63
- display: inline-block;
64
- height: em(24px); // =1.5rem
65
- min-height: 24px;
66
- min-width: 24px;
67
- width: em(24px);
68
- // The code belows centers the input vertically.
69
- position: absolute;
70
- left: 0;
71
- top: 50%;
72
- transform: translate(0, -50%);
73
-
74
- &:checked::before {
75
- background: #000;
76
- border-radius: 50%;
77
- content: "";
78
- display: block;
79
- height: em(12px);
80
- left: 50%;
81
- margin: 0;
82
- min-height: 12px;
83
- min-width: 12px;
84
- position: absolute;
85
- top: 50%;
86
- transform: translate(-50%, -50%);
87
- width: em(12px);
88
- }
89
-
90
- .has-dark-controls & {
91
- border-color: $controls-border-dark;
92
- background-color: $input-background-dark;
93
-
94
- &:checked::before {
95
- background: $input-text-dark;
96
- }
97
- }
98
- }
99
- }
100
-
101
- .theme-twentytwentyone {
102
- .wc-block-components-radio-control .wc-block-components-radio-control__input {
103
- &:checked {
104
- border-width: 2px;
105
-
106
- &::before {
107
- background-color: var(--form--color-text);
108
- }
109
- }
110
-
111
- &::after {
112
- display: none;
113
- }
114
- }
115
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/read-more/index.js CHANGED
@@ -96,7 +96,7 @@ class ReadMore extends Component {
96
  /**
97
  * Handles the click event for the read more/less button.
98
  *
99
- * @param {Object} e event
100
  */
101
  onClick( e ) {
102
  e.preventDefault();
96
  /**
97
  * Handles the click event for the read more/less button.
98
  *
99
+ * @param {obj} e event
100
  */
101
  onClick( e ) {
102
  e.preventDefault();
assets/js/base/components/read-more/stories/index.js DELETED
@@ -1,53 +0,0 @@
1
- /**
2
- * Internal dependencies
3
- */
4
- import ReadMore from '../';
5
-
6
- export default {
7
- title: 'WooCommerce Blocks/@base-components/ReadMore',
8
- component: ReadMore,
9
- };
10
-
11
- export const Default = () => (
12
- <ReadMore maxLines={ 2 }>
13
- <h1>
14
- No! Alderaan is peaceful. We have no weapons. You can&apos;t
15
- possibly…
16
- </h1>
17
- <p>
18
- As you wish. But with the blast shield down, I can&apos;t even see!
19
- How am I supposed to fight? Look, I ain&apos;t in this for your
20
- revolution, and I&apos;m not in it for you, Princess. I expect to be
21
- well paid. I&apos;m in it for the money.
22
- </p>
23
- <p>
24
- You mean it controls your actions?
25
- <strong>
26
- { ' ' }
27
- She must have hidden the plans in the escape pod.
28
- </strong>{ ' ' }
29
- <em>
30
- Send a detachment down to retrieve them, and see to it
31
- personally, Commander.
32
- </em>
33
- There&apos;ll be no one to stop us this time!
34
- </p>
35
- <h2>Escape is not his plan. I must face him, alone.</h2>
36
- <ol>
37
- <li>Partially, but it also obeys your commands.</li>
38
- <li>
39
- Leave that to me. Send a distress signal, and inform the Senate
40
- that all on board were killed.
41
- </li>
42
- <li>
43
- A tremor in the Force. The last time I felt it was in the
44
- presence of my old master.
45
- </li>
46
- </ol>
47
- <aside>
48
- <a href="http://fillerama.io">
49
- Content from http://fillerama.io &quot;Star Wars&quot;
50
- </a>
51
- </aside>
52
- </ReadMore>
53
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/read-more/test/index.js CHANGED
@@ -11,19 +11,19 @@ const longContent =
11
 
12
  describe( 'ReadMore Component', () => {
13
  describe( 'Test the truncateHtml function', () => {
14
- it( 'Truncate long HTML content to length of 10', () => {
15
  const truncatedContent = truncateHtml( longContent, 10 );
16
 
17
  expect( truncatedContent ).toEqual( '<p>Lorem ipsum...</p>' );
18
  } );
19
- it( 'Truncate long HTML content, but avoid cutting off HTML tags.', () => {
20
  const truncatedContent = truncateHtml( longContent, 40 );
21
 
22
  expect( truncatedContent ).toEqual(
23
  '<p>Lorem ipsum dolor sit amet, <strong>consectetur...</strong></p>'
24
  );
25
  } );
26
- it( 'No need to truncate short HTML content.', () => {
27
  const truncatedContent = truncateHtml( shortContent, 100 );
28
 
29
  expect( truncatedContent ).toEqual(
11
 
12
  describe( 'ReadMore Component', () => {
13
  describe( 'Test the truncateHtml function', () => {
14
+ it( 'Truncate long HTML content to length of 10', async () => {
15
  const truncatedContent = truncateHtml( longContent, 10 );
16
 
17
  expect( truncatedContent ).toEqual( '<p>Lorem ipsum...</p>' );
18
  } );
19
+ it( 'Truncate long HTML content, but avoid cutting off HTML tags.', async () => {
20
  const truncatedContent = truncateHtml( longContent, 40 );
21
 
22
  expect( truncatedContent ).toEqual(
23
  '<p>Lorem ipsum dolor sit amet, <strong>consectetur...</strong></p>'
24
  );
25
  } );
26
+ it( 'No need to truncate short HTML content.', async () => {
27
  const truncatedContent = truncateHtml( shortContent, 100 );
28
 
29
  expect( truncatedContent ).toEqual(
assets/js/base/components/read-more/utils.js CHANGED
@@ -7,7 +7,7 @@ import trimHtml from 'trim-html';
7
  * Truncate some HTML content to a given length.
8
  *
9
  * @param {string} html HTML that will be truncated.
10
- * @param {number} length Length to truncate the string to.
11
  * @param {string} ellipsis Character to append to truncated content.
12
  */
13
  export const truncateHtml = ( html, length, ellipsis = '...' ) => {
@@ -25,7 +25,7 @@ export const truncateHtml = ( html, length, ellipsis = '...' ) => {
25
  *
26
  * @param {string} originalContent Content to be clamped.
27
  * @param {Object} targetElement Element which will contain the clamped content.
28
- * @param {number} maxHeight Max height of the clamped content.
29
  * @param {string} ellipsis Character to append to clamped content.
30
  * @return {string} clamped content
31
  */
@@ -45,7 +45,7 @@ export const clampLines = (
45
  *
46
  * @param {string} originalContent Content to be clamped.
47
  * @param {Object} targetElement Element which will contain the clamped content.
48
- * @param {number} maxHeight Max height of the clamped content.
49
  */
50
  const calculateLength = ( originalContent, targetElement, maxHeight ) => {
51
  let markers = {
@@ -73,8 +73,8 @@ const calculateLength = ( originalContent, targetElement, maxHeight ) => {
73
  * Move string markers. Used by calculateLength.
74
  *
75
  * @param {Object} markers Markers for clamped content.
76
- * @param {number} currentHeight Current height of clamped content.
77
- * @param {number} maxHeight Max height of the clamped content.
78
  */
79
  const moveMarkers = ( markers, currentHeight, maxHeight ) => {
80
  if ( currentHeight <= maxHeight ) {
7
  * Truncate some HTML content to a given length.
8
  *
9
  * @param {string} html HTML that will be truncated.
10
+ * @param {int} length Legth to truncate the string to.
11
  * @param {string} ellipsis Character to append to truncated content.
12
  */
13
  export const truncateHtml = ( html, length, ellipsis = '...' ) => {
25
  *
26
  * @param {string} originalContent Content to be clamped.
27
  * @param {Object} targetElement Element which will contain the clamped content.
28
+ * @param {integer} maxHeight Max height of the clamped content.
29
  * @param {string} ellipsis Character to append to clamped content.
30
  * @return {string} clamped content
31
  */
45
  *
46
  * @param {string} originalContent Content to be clamped.
47
  * @param {Object} targetElement Element which will contain the clamped content.
48
+ * @param {integer} maxHeight Max height of the clamped content.
49
  */
50
  const calculateLength = ( originalContent, targetElement, maxHeight ) => {
51
  let markers = {
73
  * Move string markers. Used by calculateLength.
74
  *
75
  * @param {Object} markers Markers for clamped content.
76
+ * @param {integer} currentHeight Current height of clamped content.
77
+ * @param {integer} maxHeight Max height of the clamped content.
78
  */
79
  const moveMarkers = ( markers, currentHeight, maxHeight ) => {
80
  if ( currentHeight <= maxHeight ) {
assets/js/base/components/review-list-item/index.js ADDED
@@ -0,0 +1,213 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __, sprintf } from '@wordpress/i18n';
5
+ import PropTypes from 'prop-types';
6
+ import classNames from 'classnames';
7
+ import ReadMore from '@woocommerce/base-components/read-more';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import './style.scss';
13
+
14
+ function getReviewImage( review, imageType, isLoading ) {
15
+ if ( isLoading || ! review ) {
16
+ return (
17
+ <div
18
+ className="wc-block-review-list-item__image"
19
+ width="48"
20
+ height="48"
21
+ />
22
+ );
23
+ }
24
+
25
+ return (
26
+ <div className="wc-block-review-list-item__image">
27
+ { imageType === 'product' ? (
28
+ <img
29
+ aria-hidden="true"
30
+ alt=""
31
+ src={ review.product_picture || '' }
32
+ className="wc-block-review-list-item__image"
33
+ width="48"
34
+ height="48"
35
+ />
36
+ ) : (
37
+ <img
38
+ aria-hidden="true"
39
+ alt=""
40
+ src={ review.reviewer_avatar_urls[ '48' ] || '' }
41
+ srcSet={ review.reviewer_avatar_urls[ '96' ] + ' 2x' }
42
+ className="wc-block-review-list-item__image"
43
+ width="48"
44
+ height="48"
45
+ />
46
+ ) }
47
+ { review.verified && (
48
+ <div
49
+ className="wc-block-review-list-item__verified"
50
+ title={ __(
51
+ 'Verified buyer',
52
+ 'woo-gutenberg-products-block'
53
+ ) }
54
+ >
55
+ { __( 'Verified buyer', 'woo-gutenberg-products-block' ) }
56
+ </div>
57
+ ) }
58
+ </div>
59
+ );
60
+ }
61
+
62
+ function getReviewContent( review ) {
63
+ return (
64
+ <ReadMore
65
+ maxLines={ 10 }
66
+ moreText={ __(
67
+ 'Read full review',
68
+ 'woo-gutenberg-products-block'
69
+ ) }
70
+ lessText={ __(
71
+ 'Hide full review',
72
+ 'woo-gutenberg-products-block'
73
+ ) }
74
+ className="wc-block-review-list-item__text"
75
+ >
76
+ <div
77
+ dangerouslySetInnerHTML={ {
78
+ // `content` is the `review` parameter returned by the `reviews` endpoint.
79
+ // It's filtered with `wp_filter_post_kses()`, which removes dangerous HTML tags,
80
+ // so using it inside `dangerouslySetInnerHTML` is safe.
81
+ __html: review.review || '',
82
+ } }
83
+ />
84
+ </ReadMore>
85
+ );
86
+ }
87
+
88
+ function getReviewProductName( review ) {
89
+ return (
90
+ <div className="wc-block-review-list-item__product">
91
+ <a
92
+ href={ review.product_permalink }
93
+ dangerouslySetInnerHTML={ {
94
+ // `product_name` might have html entities for things like
95
+ // emdash. So to display properly we need to allow the
96
+ // browser to render.
97
+ __html: review.product_name,
98
+ } }
99
+ />
100
+ </div>
101
+ );
102
+ }
103
+
104
+ function getReviewerName( review ) {
105
+ const { reviewer = '' } = review;
106
+ return (
107
+ <div className="wc-block-review-list-item__author">{ reviewer }</div>
108
+ );
109
+ }
110
+
111
+ function getReviewDate( review ) {
112
+ const {
113
+ date_created: dateCreated,
114
+ formatted_date_created: formattedDateCreated,
115
+ } = review;
116
+ return (
117
+ <time
118
+ className="wc-block-review-list-item__published-date"
119
+ dateTime={ dateCreated }
120
+ >
121
+ { formattedDateCreated }
122
+ </time>
123
+ );
124
+ }
125
+
126
+ function getReviewRating( review ) {
127
+ const { rating } = review;
128
+ const starStyle = {
129
+ width: ( rating / 5 ) * 100 + '%' /* stylelint-disable-line */,
130
+ };
131
+ return (
132
+ <div className="wc-block-review-list-item__rating">
133
+ <div
134
+ className="wc-block-review-list-item__rating__stars"
135
+ role="img"
136
+ >
137
+ <span style={ starStyle }>
138
+ { sprintf(
139
+ __(
140
+ 'Rated %d out of 5',
141
+ 'woo-gutenberg-products-block'
142
+ ),
143
+ rating
144
+ ) }
145
+ </span>
146
+ </div>
147
+ </div>
148
+ );
149
+ }
150
+
151
+ const ReviewListItem = ( { attributes, review = {} } ) => {
152
+ const {
153
+ imageType,
154
+ showReviewDate,
155
+ showReviewerName,
156
+ showReviewImage,
157
+ showReviewRating: showReviewRatingAttr,
158
+ showReviewContent,
159
+ showProductName,
160
+ } = attributes;
161
+ const { rating } = review;
162
+ const isLoading = ! Object.keys( review ).length > 0;
163
+ const showReviewRating = Number.isFinite( rating ) && showReviewRatingAttr;
164
+
165
+ return (
166
+ <li
167
+ className={ classNames( 'wc-block-review-list-item__item', {
168
+ 'is-loading': isLoading,
169
+ } ) }
170
+ aria-hidden={ isLoading }
171
+ >
172
+ { ( showProductName ||
173
+ showReviewDate ||
174
+ showReviewerName ||
175
+ showReviewImage ||
176
+ showReviewRating ) && (
177
+ <div className="wc-block-review-list-item__info">
178
+ { showReviewImage &&
179
+ getReviewImage( review, imageType, isLoading ) }
180
+ { ( showProductName ||
181
+ showReviewerName ||
182
+ showReviewRating ||
183
+ showReviewDate ) && (
184
+ <div className="wc-block-review-list-item__meta">
185
+ { showReviewRating && getReviewRating( review ) }
186
+ { showProductName &&
187
+ getReviewProductName( review ) }
188
+ { showReviewerName && getReviewerName( review ) }
189
+ { showReviewDate && getReviewDate( review ) }
190
+ </div>
191
+ ) }
192
+ </div>
193
+ ) }
194
+ { showReviewContent && getReviewContent( review ) }
195
+ </li>
196
+ );
197
+ };
198
+
199
+ ReviewListItem.propTypes = {
200
+ attributes: PropTypes.object.isRequired,
201
+ review: PropTypes.object,
202
+ };
203
+
204
+ /**
205
+ * BE AWARE. ReviewListItem expects product data that is equivalent to what is
206
+ * made available for output in a public view. Thus content that may contain
207
+ * html data is not sanitized further.
208
+ *
209
+ * Currently the following data is trusted (assumed to already be sanitized):
210
+ * - `review.review` (review content)
211
+ * - `review.product_name` (the product title)
212
+ */
213
+ export default ReviewListItem;
assets/js/base/components/review-list-item/style.scss ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .is-loading {
2
+ .wc-block-review-list-item__text {
3
+ @include placeholder();
4
+ display: block;
5
+ width: 60%;
6
+ }
7
+
8
+ .wc-block-review-list-item__info {
9
+ .wc-block-review-list-item__image {
10
+ @include placeholder();
11
+ }
12
+
13
+ .wc-block-review-list-item__meta {
14
+ .wc-block-review-list-item__author {
15
+ @include placeholder();
16
+ font-size: 1em;
17
+ width: 80px;
18
+ }
19
+
20
+ .wc-block-review-list-item__product {
21
+ display: none;
22
+ }
23
+
24
+ .wc-block-review-list-item__rating {
25
+ .wc-block-review-list-item__rating__stars > span {
26
+ display: none;
27
+ }
28
+ }
29
+ }
30
+
31
+ .wc-block-review-list-item__published-date {
32
+ @include placeholder();
33
+ height: 1em;
34
+ width: 120px;
35
+ }
36
+ }
37
+ }
38
+
39
+ .editor-styles-wrapper .wc-block-review-list-item__item,
40
+ .wc-block-review-list-item__item {
41
+ margin: 0 0 $gap-large * 2;
42
+ list-style: none;
43
+ }
44
+
45
+ .wc-block-review-list-item__info {
46
+ display: grid;
47
+ grid-template-columns: 1fr;
48
+ margin-bottom: $gap-large;
49
+ }
50
+
51
+ .wc-block-review-list-item__meta {
52
+ grid-column: 1;
53
+ grid-row: 1;
54
+ }
55
+
56
+ .has-image {
57
+ .wc-block-review-list-item__info {
58
+ grid-template-columns: #{48px + $gap} 1fr;
59
+ }
60
+ .wc-block-review-list-item__meta {
61
+ grid-column: 2;
62
+ }
63
+ }
64
+
65
+ .wc-block-review-list-item__image {
66
+ height: 48px;
67
+ grid-column: 1;
68
+ grid-row: 1 / 3;
69
+ width: 48px;
70
+ position: relative;
71
+
72
+ img {
73
+ width: 100%;
74
+ height: 100%;
75
+ display: block;
76
+ }
77
+ }
78
+
79
+ .wc-block-review-list-item__verified {
80
+ width: 21px;
81
+ height: 21px;
82
+ text-indent: 21px;
83
+ margin: 0;
84
+ line-height: 21px;
85
+ overflow: hidden;
86
+ position: absolute;
87
+ right: -7px;
88
+ bottom: -7px;
89
+
90
+ &::before {
91
+ width: 21px;
92
+ height: 21px;
93
+ background: transparent url('data:image/svg+xml;utf8,%3Csvg xmlns="http://www.w3.org/2000/svg" width="21" height="21" fill="none"%3E%3Ccircle cx="10.5" cy="10.5" r="10.5" fill="%23fff"/%3E%3Cpath fill="%23008A21" fill-rule="evenodd" d="M2.1667 10.5003c0-4.6 3.7333-8.3333 8.3333-8.3333s8.3334 3.7333 8.3334 8.3333S15.1 18.8337 10.5 18.8337s-8.3333-3.7334-8.3333-8.3334zm2.5 0l4.1666 4.1667 7.5001-7.5-1.175-1.1833-6.325 6.325-2.9917-2.9834-1.175 1.175z" clip-rule="evenodd"/%3E%3Cmask id="a" width="17" height="17" x="2" y="2" maskUnits="userSpaceOnUse"%3E%3Cpath fill="%23fff" fill-rule="evenodd" d="M2.1667 10.5003c0-4.6 3.7333-8.3333 8.3333-8.3333s8.3334 3.7333 8.3334 8.3333S15.1 18.8337 10.5 18.8337s-8.3333-3.7334-8.3333-8.3334zm2.5 0l4.1666 4.1667 7.5001-7.5-1.175-1.1833-6.325 6.325-2.9917-2.9834-1.175 1.175z" clip-rule="evenodd"/%3E%3C/mask%3E%3Cg mask="url(%23a)"%3E%3Cpath fill="%23008A21" d="M.5.5h20v20H.5z"/%3E%3C/g%3E%3C/svg%3E') center center no-repeat; /* stylelint-disable-line */
94
+ display: block;
95
+ content: "";
96
+ }
97
+ }
98
+
99
+ .wc-block-review-list-item__meta {
100
+ display: flex;
101
+ align-items: center;
102
+ flex-flow: row wrap;
103
+
104
+ &::after {
105
+ // Force wrap after star rating.
106
+ order: 3;
107
+ content: "";
108
+ flex-basis: 100%;
109
+ }
110
+ }
111
+
112
+ .wc-block-review-list-item__product {
113
+ display: block;
114
+ font-weight: bold;
115
+ order: 1;
116
+ margin-right: $gap/2;
117
+ }
118
+
119
+ .wc-block-review-list-item__author {
120
+ display: block;
121
+ font-weight: bold;
122
+ order: 1;
123
+ margin-right: $gap/2;
124
+ }
125
+
126
+ .wc-block-review-list-item__product + .wc-block-review-list-item__author {
127
+ font-weight: normal;
128
+ color: #808080;
129
+ order: 4;
130
+ }
131
+
132
+ .wc-block-review-list-item__published-date {
133
+ color: #808080;
134
+ order: 5;
135
+ }
136
+
137
+ .wc-block-review-list-item__author + .wc-block-review-list-item__published-date {
138
+ &::before {
139
+ content: "";
140
+ display: inline-block;
141
+ margin-right: $gap/2;
142
+ border-right: 1px solid #ddd;
143
+ height: 1em;
144
+ vertical-align: middle;
145
+ }
146
+ }
147
+
148
+ .wc-block-review-list-item__author:first-child + .wc-block-review-list-item__published-date,
149
+ .wc-block-review-list-item__rating + .wc-block-review-list-item__author + .wc-bl