WooCommerce Gutenberg Products Block - Version 2.8.1

Version Description

Download this release

Release Info

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

Code changes from version 5.5.0 to 2.8.1

Files changed (356) hide show
  1. .prettierrc.js +0 -3
  2. LICENSE +0 -674
  3. assets/css/abstracts/_breakpoints.scss +0 -2
  4. assets/css/abstracts/_colors.scss +50 -17
  5. assets/css/abstracts/_mixins.scss +3 -47
  6. assets/css/abstracts/_variables.scss +22 -8
  7. assets/css/editor.scss +10 -10
  8. assets/css/style.scss +9 -44
  9. assets/img/avatar.jpg +0 -0
  10. {images/previews → assets/img}/beanie.jpg +0 -0
  11. assets/img/block-error.svg +2727 -0
  12. {images/previews → assets/img}/cap.jpg +0 -0
  13. assets/img/cart-preview.svg +20 -0
  14. assets/img/checkout-preview.svg +20 -0
  15. {images/previews → assets/img}/collection.jpg +0 -0
  16. assets/img/grid.svg +50 -0
  17. assets/img/no-matching-products.svg +1 -0
  18. assets/img/no-products.svg +1 -0
  19. {images → assets/img}/payment-methods/alipay.svg +0 -0
  20. {images → assets/img}/payment-methods/amex.svg +0 -0
  21. {images → assets/img}/payment-methods/bancontact.svg +0 -0
  22. {images → assets/img}/payment-methods/diners.svg +0 -0
  23. {images → assets/img}/payment-methods/discover.svg +0 -0
  24. {images → assets/img}/payment-methods/eps.svg +0 -0
  25. {images → assets/img}/payment-methods/giropay.svg +0 -0
  26. {images → assets/img}/payment-methods/ideal.svg +0 -0
  27. {images → assets/img}/payment-methods/jcb.svg +0 -0
  28. {images → assets/img}/payment-methods/laser.svg +0 -0
  29. {images → assets/img}/payment-methods/maestro.svg +0 -0
  30. {images → assets/img}/payment-methods/mastercard.svg +0 -0
  31. {images → assets/img}/payment-methods/multibanco.svg +0 -0
  32. {images → assets/img}/payment-methods/p24.svg +0 -0
  33. {images → assets/img}/payment-methods/sepa.svg +0 -0
  34. {images → assets/img}/payment-methods/sofort.svg +0 -0
  35. {images → assets/img}/payment-methods/unionpay.svg +0 -0
  36. {images → assets/img}/payment-methods/visa.svg +0 -0
  37. {images → assets/img}/payment-methods/wechat.svg +0 -0
  38. {images/previews → assets/img}/pennant.jpg +0 -0
  39. assets/img/single-product-preview.svg +5 -0
  40. assets/js/atomic/blocks/component-init.js +27 -65
  41. assets/js/atomic/blocks/index.js +12 -12
  42. assets/js/atomic/blocks/product-elements/add-to-cart/attributes.js +0 -12
  43. assets/js/atomic/blocks/product-elements/add-to-cart/block.js +0 -87
  44. assets/js/atomic/blocks/product-elements/add-to-cart/constants.js +0 -12
  45. assets/js/atomic/blocks/product-elements/add-to-cart/edit.js +0 -86
  46. assets/js/atomic/blocks/product-elements/add-to-cart/frontend.js +0 -12
  47. assets/js/atomic/blocks/product-elements/add-to-cart/index.js +0 -32
  48. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/simple.js +0 -54
  49. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/index.js +0 -63
  50. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/attribute-picker.js +0 -101
  51. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/attribute-select-control.js +0 -91
  52. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/index.js +0 -35
  53. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/style.scss +0 -33
  54. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/test/index.js +0 -395
  55. assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/utils.js +0 -208
  56. assets/js/atomic/blocks/product-elements/add-to-cart/shared/add-to-cart-button.js +0 -174
  57. assets/js/atomic/blocks/product-elements/add-to-cart/shared/quantity-input.js +0 -28
  58. assets/js/atomic/blocks/product-elements/add-to-cart/style.scss +0 -49
  59. assets/js/atomic/blocks/product-elements/button/attributes.js +0 -8
  60. assets/js/atomic/blocks/product-elements/button/block.js +0 -145
  61. assets/js/atomic/blocks/product-elements/button/constants.js +0 -15
  62. assets/js/atomic/blocks/product-elements/button/edit.js +0 -29
  63. assets/js/atomic/blocks/product-elements/button/index.js +0 -32
  64. assets/js/atomic/blocks/product-elements/button/style.scss +0 -36
  65. assets/js/atomic/blocks/product-elements/category-list/attributes.js +0 -8
  66. assets/js/atomic/blocks/product-elements/category-list/block.js +0 -64
  67. assets/js/atomic/blocks/product-elements/category-list/constants.js +0 -15
  68. assets/js/atomic/blocks/product-elements/category-list/edit.js +0 -33
  69. assets/js/atomic/blocks/product-elements/category-list/index.js +0 -32
  70. assets/js/atomic/blocks/product-elements/category-list/style.scss +0 -23
  71. assets/js/atomic/blocks/product-elements/image/attributes.js +0 -24
  72. assets/js/atomic/blocks/product-elements/image/block.js +0 -144
  73. assets/js/atomic/blocks/product-elements/image/constants.js +0 -15
  74. assets/js/atomic/blocks/product-elements/image/edit.js +0 -159
  75. assets/js/atomic/blocks/product-elements/image/frontend.js +0 -12
  76. assets/js/atomic/blocks/product-elements/image/index.js +0 -32
  77. assets/js/atomic/blocks/product-elements/image/style.scss +0 -53
  78. assets/js/atomic/blocks/product-elements/image/test/block.test.js +0 -139
  79. assets/js/atomic/blocks/product-elements/price/attributes.js +0 -45
  80. assets/js/atomic/blocks/product-elements/price/block.js +0 -135
  81. assets/js/atomic/blocks/product-elements/price/constants.js +0 -15
  82. assets/js/atomic/blocks/product-elements/price/edit.js +0 -133
  83. assets/js/atomic/blocks/product-elements/price/index.js +0 -32
  84. assets/js/atomic/blocks/product-elements/rating/attributes.js +0 -8
  85. assets/js/atomic/blocks/product-elements/rating/block.js +0 -79
  86. assets/js/atomic/blocks/product-elements/rating/constants.js +0 -15
  87. assets/js/atomic/blocks/product-elements/rating/edit.js +0 -23
  88. assets/js/atomic/blocks/product-elements/rating/index.js +0 -32
  89. assets/js/atomic/blocks/product-elements/rating/style.scss +0 -52
  90. assets/js/atomic/blocks/product-elements/sale-badge/attributes.js +0 -8
  91. assets/js/atomic/blocks/product-elements/sale-badge/block.js +0 -67
  92. assets/js/atomic/blocks/product-elements/sale-badge/constants.js +0 -15
  93. assets/js/atomic/blocks/product-elements/sale-badge/edit.js +0 -24
  94. assets/js/atomic/blocks/product-elements/sale-badge/index.js +0 -35
  95. assets/js/atomic/blocks/product-elements/shared/config.js +0 -34
  96. assets/js/atomic/blocks/product-elements/shared/editor.scss +0 -11
  97. assets/js/atomic/blocks/product-elements/shared/with-product-selector.js +0 -90
  98. assets/js/atomic/blocks/product-elements/sku/attributes.js +0 -8
  99. assets/js/atomic/blocks/product-elements/sku/block.js +0 -54
  100. assets/js/atomic/blocks/product-elements/sku/constants.js +0 -12
  101. assets/js/atomic/blocks/product-elements/sku/edit.js +0 -30
  102. assets/js/atomic/blocks/product-elements/sku/index.js +0 -32
  103. assets/js/atomic/blocks/product-elements/sku/style.scss +0 -7
  104. assets/js/atomic/blocks/product-elements/stock-indicator/attributes.js +0 -8
  105. assets/js/atomic/blocks/product-elements/stock-indicator/block.js +0 -80
  106. assets/js/atomic/blocks/product-elements/stock-indicator/constants.js +0 -15
  107. assets/js/atomic/blocks/product-elements/stock-indicator/edit.js +0 -30
  108. assets/js/atomic/blocks/product-elements/stock-indicator/index.js +0 -32
  109. assets/js/atomic/blocks/product-elements/stock-indicator/style.scss +0 -17
  110. assets/js/atomic/blocks/product-elements/summary/attributes.js +0 -8
  111. assets/js/atomic/blocks/product-elements/summary/block.js +0 -72
  112. assets/js/atomic/blocks/product-elements/summary/constants.js +0 -15
  113. assets/js/atomic/blocks/product-elements/summary/edit.js +0 -24
  114. assets/js/atomic/blocks/product-elements/summary/index.js +0 -32
  115. assets/js/atomic/blocks/product-elements/summary/style.scss +0 -11
  116. assets/js/atomic/blocks/product-elements/tag-list/attributes.js +0 -8
  117. assets/js/atomic/blocks/product-elements/tag-list/block.js +0 -64
  118. assets/js/atomic/blocks/product-elements/tag-list/constants.js +0 -15
  119. assets/js/atomic/blocks/product-elements/tag-list/edit.js +0 -33
  120. assets/js/atomic/blocks/product-elements/tag-list/index.js +0 -32
  121. assets/js/atomic/blocks/product-elements/tag-list/style.scss +0 -23
  122. assets/js/atomic/blocks/product-elements/title/attributes.js +0 -41
  123. assets/js/atomic/blocks/product-elements/title/block.js +0 -130
  124. assets/js/atomic/blocks/product-elements/title/constants.js +0 -15
  125. assets/js/atomic/blocks/product-elements/title/edit.js +0 -131
  126. assets/js/atomic/blocks/product-elements/title/frontend.js +0 -12
  127. assets/js/atomic/blocks/product-elements/title/index.js +0 -32
  128. assets/js/atomic/blocks/product-elements/title/style.scss +0 -35
  129. assets/js/atomic/blocks/product/add-to-cart/attributes.js +8 -0
  130. assets/js/atomic/blocks/product/add-to-cart/block.js +86 -0
  131. assets/js/atomic/blocks/product/add-to-cart/edit.js +59 -0
  132. assets/js/atomic/blocks/product/add-to-cart/frontend.js +13 -0
  133. assets/js/atomic/blocks/product/add-to-cart/index.js +32 -0
  134. assets/js/atomic/blocks/{product-elements → product}/add-to-cart/product-types/external.js +0 -0
  135. assets/js/atomic/blocks/{product-elements → product}/add-to-cart/product-types/grouped/group-list/index.js +0 -0
  136. assets/js/atomic/blocks/{product-elements → product}/add-to-cart/product-types/grouped/index.js +0 -0
  137. assets/js/atomic/blocks/{product-elements → product}/add-to-cart/product-types/index.js +0 -0
  138. assets/js/atomic/blocks/product/add-to-cart/product-types/simple.js +54 -0
  139. assets/js/atomic/blocks/product/add-to-cart/product-types/variable/index.js +60 -0
  140. assets/js/atomic/blocks/product/add-to-cart/product-types/variable/variation-attributes/attribute-picker.js +115 -0
  141. assets/js/atomic/blocks/product/add-to-cart/product-types/variable/variation-attributes/attribute-select-control.js +36 -0
  142. assets/js/atomic/blocks/product/add-to-cart/product-types/variable/variation-attributes/index.js +37 -0
  143. assets/js/atomic/blocks/product/add-to-cart/product-types/variable/variation-attributes/style.scss +18 -0
  144. assets/js/atomic/blocks/product/add-to-cart/product-types/variable/variation-attributes/utils.js +107 -0
  145. assets/js/atomic/blocks/product/add-to-cart/shared/add-to-cart-button.js +114 -0
  146. assets/js/atomic/blocks/{product-elements → product}/add-to-cart/shared/index.js +0 -0
  147. assets/js/atomic/blocks/{product-elements → product}/add-to-cart/shared/product-unavailable.js +0 -0
  148. assets/js/atomic/blocks/product/add-to-cart/shared/quantity-input.js +21 -0
  149. assets/js/atomic/blocks/product/add-to-cart/style.scss +45 -0
  150. assets/js/atomic/blocks/product/button/block.js +148 -0
  151. assets/js/atomic/blocks/product/button/edit.js +17 -0
  152. assets/js/atomic/blocks/product/button/index.js +30 -0
  153. assets/js/atomic/blocks/product/button/style.scss +26 -0
  154. assets/js/atomic/blocks/product/category-list/block.js +65 -0
  155. assets/js/atomic/blocks/product/category-list/edit.js +21 -0
  156. assets/js/atomic/blocks/product/category-list/index.js +30 -0
  157. assets/js/atomic/blocks/product/category-list/style.scss +23 -0
  158. assets/js/atomic/blocks/product/image/attributes.js +20 -0
  159. assets/js/atomic/blocks/product/image/block.js +144 -0
  160. assets/js/atomic/blocks/product/image/edit.js +148 -0
  161. assets/js/atomic/blocks/product/image/frontend.js +13 -0
  162. assets/js/atomic/blocks/product/image/index.js +32 -0
  163. assets/js/atomic/blocks/product/image/style.scss +53 -0
  164. assets/js/atomic/blocks/product/price/block.js +143 -0
  165. assets/js/atomic/blocks/product/price/edit.js +8 -0
  166. assets/js/atomic/blocks/product/price/index.js +30 -0
  167. assets/js/atomic/blocks/product/price/style.scss +19 -0
  168. assets/js/atomic/blocks/product/rating/block.js +80 -0
  169. assets/js/atomic/blocks/product/rating/edit.js +8 -0
  170. assets/js/atomic/blocks/product/rating/index.js +30 -0
  171. assets/js/atomic/blocks/product/rating/style.scss +54 -0
  172. assets/js/atomic/blocks/product/sale-badge/block.js +68 -0
  173. assets/js/atomic/blocks/product/sale-badge/edit.js +8 -0
  174. assets/js/atomic/blocks/product/sale-badge/index.js +33 -0
  175. assets/js/atomic/blocks/{product-elements → product}/sale-badge/style.scss +0 -0
  176. assets/js/atomic/blocks/{product-elements → product}/save.js +0 -0
  177. assets/js/atomic/blocks/product/sku/block.js +55 -0
  178. assets/js/atomic/blocks/product/sku/edit.js +18 -0
  179. assets/js/atomic/blocks/product/sku/index.js +30 -0
  180. assets/js/atomic/blocks/product/sku/style.scss +9 -0
  181. assets/js/atomic/blocks/product/stock-indicator/block.js +84 -0
  182. assets/js/atomic/blocks/product/stock-indicator/edit.js +18 -0
  183. assets/js/atomic/blocks/product/stock-indicator/index.js +30 -0
  184. assets/js/atomic/blocks/product/stock-indicator/style.scss +19 -0
  185. assets/js/atomic/blocks/product/summary/block.js +72 -0
  186. assets/js/atomic/blocks/product/summary/edit.js +8 -0
  187. assets/js/atomic/blocks/product/summary/index.js +30 -0
  188. assets/js/atomic/blocks/product/summary/style.scss +12 -0
  189. assets/js/atomic/blocks/product/tag-list/block.js +65 -0
  190. assets/js/atomic/blocks/product/tag-list/edit.js +21 -0
  191. assets/js/atomic/blocks/product/tag-list/index.js +30 -0
  192. assets/js/atomic/blocks/product/tag-list/style.scss +23 -0
  193. assets/js/atomic/blocks/product/title/attributes.js +12 -0
  194. assets/js/atomic/blocks/product/title/block.js +81 -0
  195. assets/js/atomic/blocks/product/title/edit.js +56 -0
  196. assets/js/atomic/blocks/product/title/frontend.js +13 -0
  197. assets/js/atomic/blocks/product/title/index.js +31 -0
  198. assets/js/atomic/blocks/product/title/style.scss +25 -0
  199. assets/js/atomic/utils/block-styling.js +0 -12
  200. assets/js/atomic/utils/index.js +4 -5
  201. assets/js/atomic/utils/render-inner-blocks.js +65 -0
  202. assets/js/atomic/utils/render-parent-block.js +41 -0
  203. assets/js/atomic/utils/render-parent-block.tsx +0 -126
  204. assets/js/atomic/utils/render-standalone-blocks.js +0 -27
  205. assets/js/base/components/block-error-boundary/block-error.js +2 -12
  206. assets/js/base/components/block-error-boundary/index.js +3 -13
  207. assets/js/base/components/block-error-boundary/style.scss +18 -16
  208. assets/js/base/components/button/index.js +48 -0
  209. assets/js/base/components/button/index.tsx +0 -48
  210. assets/js/base/components/button/stories/index.js +6 -2
  211. assets/js/base/components/button/style.scss +41 -3
  212. assets/js/base/components/cart-checkout/address-form/address-form.tsx +0 -244
  213. assets/js/base/components/cart-checkout/address-form/country-address-fields.js +546 -0
  214. assets/js/base/components/cart-checkout/address-form/default-address-fields.js +120 -0
  215. assets/js/base/components/cart-checkout/address-form/index.js +209 -0
  216. assets/js/base/components/cart-checkout/address-form/index.ts +0 -1
  217. assets/js/base/components/cart-checkout/address-form/prepare-address-fields.ts +0 -131
  218. assets/js/base/components/cart-checkout/address-form/test/index.js +0 -178
  219. assets/js/base/components/cart-checkout/button/index.js +46 -0
  220. assets/js/base/components/cart-checkout/button/stories/index.js +15 -0
  221. assets/js/base/components/cart-checkout/button/style.scss +69 -0
  222. assets/js/base/components/cart-checkout/form-step/index.js +8 -24
  223. assets/js/base/components/cart-checkout/form-step/style.scss +33 -41
  224. assets/js/base/components/cart-checkout/form-step/test/__snapshots__/index.js.snap +0 -262
  225. assets/js/base/components/cart-checkout/form-step/test/index.js +0 -100
  226. assets/js/base/components/cart-checkout/form/index.js +40 -0
  227. assets/js/base/components/cart-checkout/form/style.scss +4 -0
  228. assets/js/base/components/cart-checkout/index.js +7 -5
  229. assets/js/base/components/cart-checkout/order-summary/index.js +1 -2
  230. assets/js/base/components/cart-checkout/order-summary/order-summary-item.js +21 -115
  231. assets/js/base/components/cart-checkout/order-summary/style.scss +12 -29
  232. assets/js/base/components/cart-checkout/order-summary/test/index.js +0 -43
  233. assets/js/base/components/cart-checkout/payment-method-icons/common-icons.js +20 -20
  234. assets/js/base/components/cart-checkout/payment-method-icons/index.js +2 -3
  235. assets/js/base/components/cart-checkout/payment-method-icons/payment-method-icon.js +0 -5
  236. assets/js/base/components/cart-checkout/place-order-button/index.js +7 -7
  237. assets/js/base/components/cart-checkout/policies/index.js +57 -0
  238. assets/js/base/components/cart-checkout/policies/index.tsx +0 -57
  239. assets/js/base/components/cart-checkout/policies/style.scss +1 -1
  240. assets/js/base/components/cart-checkout/product-backorder-badge/index.tsx +0 -22
  241. assets/js/base/components/cart-checkout/product-badge/index.tsx +0 -32
  242. assets/js/base/components/cart-checkout/product-badge/style.scss +0 -10
  243. assets/js/base/components/cart-checkout/product-details/index.tsx +0 -60
  244. assets/js/base/components/cart-checkout/product-details/style.scss +0 -25
  245. assets/js/base/components/cart-checkout/product-details/test/__snapshots__/index.js.snap +0 -76
  246. assets/js/base/components/cart-checkout/product-details/test/index.js +0 -57
  247. assets/js/base/components/cart-checkout/product-image/index.js +27 -0
  248. assets/js/base/components/cart-checkout/product-image/index.tsx +0 -25
  249. assets/js/base/components/cart-checkout/product-low-stock-badge/index.js +35 -0
  250. assets/js/base/components/cart-checkout/product-low-stock-badge/index.tsx +0 -38
  251. assets/js/base/components/cart-checkout/product-low-stock-badge/style.scss +10 -0
  252. assets/js/base/components/cart-checkout/product-metadata/index.js +39 -0
  253. assets/js/base/components/cart-checkout/product-metadata/index.tsx +0 -45
  254. assets/js/base/components/cart-checkout/product-metadata/style.scss +1 -1
  255. assets/js/base/components/cart-checkout/product-name/index.js +31 -0
  256. assets/js/base/components/cart-checkout/product-name/style.scss +6 -0
  257. assets/js/base/components/cart-checkout/product-price/index.js +81 -0
  258. assets/js/base/components/cart-checkout/product-price/style.scss +5 -0
  259. assets/js/base/components/cart-checkout/product-sale-badge/index.js +50 -0
  260. assets/js/base/components/cart-checkout/product-sale-badge/index.tsx +0 -62
  261. assets/js/base/components/cart-checkout/product-sale-badge/style.scss +10 -0
  262. assets/js/base/components/cart-checkout/product-summary/index.js +38 -0
  263. assets/js/base/components/cart-checkout/product-summary/index.tsx +0 -41
  264. assets/js/base/components/cart-checkout/product-variation-data/index.js +49 -0
  265. assets/js/base/components/cart-checkout/shipping-calculator/address.js +87 -0
  266. assets/js/base/components/cart-checkout/shipping-calculator/address.tsx +0 -63
  267. assets/js/base/components/cart-checkout/shipping-calculator/index.js +37 -0
  268. assets/js/base/components/cart-checkout/shipping-calculator/index.tsx +0 -39
  269. assets/js/base/components/cart-checkout/shipping-calculator/style.scss +0 -1
  270. assets/js/base/components/cart-checkout/shipping-location/index.js +64 -0
  271. assets/js/base/components/cart-checkout/shipping-location/index.tsx +0 -70
  272. assets/js/base/components/cart-checkout/shipping-rates-control-package/index.tsx +0 -152
  273. assets/js/base/components/cart-checkout/shipping-rates-control-package/package-rates.tsx +0 -69
  274. assets/js/base/components/cart-checkout/shipping-rates-control-package/render-package-rate-option.tsx +0 -46
  275. assets/js/base/components/cart-checkout/shipping-rates-control-package/style.scss +0 -43
  276. assets/js/base/components/cart-checkout/shipping-rates-control/index.js +113 -0
  277. assets/js/base/components/cart-checkout/shipping-rates-control/index.tsx +0 -187
  278. assets/js/base/components/cart-checkout/shipping-rates-control/package-options.js +71 -0
  279. assets/js/base/components/cart-checkout/shipping-rates-control/package.js +126 -0
  280. assets/js/base/components/cart-checkout/shipping-rates-control/packages.js +71 -0
  281. assets/js/base/components/cart-checkout/shipping-rates-control/style.scss +35 -0
  282. assets/js/base/components/cart-checkout/totals/coupon/index.js +0 -121
  283. assets/js/base/components/cart-checkout/totals/coupon/stories/index.js +0 -47
  284. assets/js/base/components/cart-checkout/totals/coupon/style.scss +0 -41
  285. assets/js/base/components/cart-checkout/totals/discount/index.js +0 -126
  286. assets/js/base/components/cart-checkout/totals/discount/stories/index.js +0 -37
  287. assets/js/base/components/cart-checkout/totals/discount/style.scss +0 -9
  288. assets/js/base/components/cart-checkout/totals/footer-item/index.js +0 -80
  289. assets/js/base/components/cart-checkout/totals/footer-item/stories/index.js +0 -32
  290. assets/js/base/components/cart-checkout/totals/footer-item/style.scss +0 -14
  291. assets/js/base/components/cart-checkout/totals/footer-item/test/__snapshots__/index.js.snap +0 -79
  292. assets/js/base/components/cart-checkout/totals/footer-item/test/index.js +0 -81
  293. assets/js/base/components/cart-checkout/totals/index.js +8 -4
  294. assets/js/base/components/cart-checkout/totals/shipping/has-shipping-rate.js +0 -14
  295. assets/js/base/components/cart-checkout/totals/shipping/index.tsx +0 -215
  296. assets/js/base/components/cart-checkout/totals/shipping/shipping-rate-selector.js +0 -48
  297. assets/js/base/components/cart-checkout/totals/shipping/shipping-via.tsx +0 -17
  298. assets/js/base/components/cart-checkout/totals/shipping/stories/index.js +0 -35
  299. assets/js/base/components/cart-checkout/totals/shipping/style.scss +0 -42
  300. assets/js/base/components/cart-checkout/totals/subtotals-item/index.js +39 -0
  301. assets/js/base/components/cart-checkout/totals/totals-coupon-code-input/index.js +121 -0
  302. assets/js/base/components/cart-checkout/totals/totals-coupon-code-input/stories/index.js +46 -0
  303. assets/js/base/components/cart-checkout/totals/totals-coupon-code-input/style.scss +31 -0
  304. assets/js/base/components/cart-checkout/totals/totals-discount-item/index.js +102 -0
  305. assets/js/base/components/cart-checkout/totals/totals-discount-item/style.scss +5 -0
  306. assets/js/base/components/cart-checkout/totals/totals-fees-item/index.js +50 -0
  307. assets/js/base/components/cart-checkout/totals/totals-footer-item/index.js +59 -0
  308. assets/js/base/components/cart-checkout/totals/totals-footer-item/style.scss +14 -0
  309. assets/js/base/components/cart-checkout/totals/totals-item/index.js +52 -0
  310. assets/js/base/components/cart-checkout/totals/totals-item/style.scss +20 -0
  311. assets/js/base/components/cart-checkout/totals/totals-shipping-item/has-shipping-rate.js +12 -0
  312. assets/js/base/components/cart-checkout/totals/totals-shipping-item/index.js +148 -0
  313. assets/js/base/components/cart-checkout/totals/totals-shipping-item/shipping-rate-selector.js +65 -0
  314. assets/js/base/components/cart-checkout/totals/totals-shipping-item/style.scss +44 -0
  315. assets/js/base/components/cart-checkout/totals/totals-taxes-item/index.js +57 -0
  316. assets/js/base/components/cart-checkout/totals/totals-taxes-item/style.scss +3 -0
  317. assets/js/base/components/checkbox-control/index.js +0 -17
  318. assets/js/base/components/checkbox-control/stories/index.js +0 -27
  319. assets/js/base/components/checkbox-control/style.scss +22 -74
  320. assets/js/base/components/checkbox-list/index.js +3 -14
  321. assets/js/base/components/chip/chip.js +0 -74
  322. assets/js/base/components/chip/index.js +70 -2
  323. assets/js/base/components/chip/removable-chip.js +0 -105
  324. assets/js/base/components/chip/stories/index.js +0 -42
  325. assets/js/base/components/chip/style.scss +20 -41
  326. assets/js/base/components/chip/test/__snapshots__/index.js.snap +25 -232
  327. assets/js/base/components/chip/test/index.js +17 -81
  328. assets/js/base/components/country-input/CountryInputProps.ts +0 -15
  329. assets/js/base/components/country-input/billing-country-input.js +23 -0
  330. assets/js/base/components/country-input/billing-country-input.tsx +0 -16
  331. assets/js/base/components/country-input/country-input.js +90 -0
  332. assets/js/base/components/country-input/country-input.tsx +0 -84
  333. assets/js/base/components/country-input/{index.ts → index.js} +0 -0
  334. assets/js/base/components/country-input/shipping-country-input.js +23 -0
  335. assets/js/base/components/country-input/shipping-country-input.tsx +0 -16
  336. assets/js/base/components/country-input/stories/index.js +1 -1
  337. assets/js/base/components/country-input/style.scss +0 -3
  338. assets/js/base/components/dropdown-selector/index.js +1 -14
  339. assets/js/base/components/dropdown-selector/menu.js +0 -1
  340. assets/js/base/components/dropdown-selector/selected-chip.js +16 -9
  341. assets/js/base/components/dropdown-selector/selected-value.js +1 -2
  342. assets/js/base/components/dropdown-selector/style.scss +56 -50
  343. assets/js/base/components/filter-submit-button/index.js +1 -1
  344. assets/js/base/components/form/index.js +0 -33
  345. assets/js/base/components/formatted-monetary-amount/index.js +86 -0
  346. assets/js/base/components/formatted-monetary-amount/index.tsx +0 -104
  347. assets/js/base/components/label/index.js +65 -0
  348. assets/js/base/components/label/index.tsx +0 -62
  349. assets/js/base/components/loading-mask/index.js +17 -16
  350. assets/js/base/components/loading-mask/style.scss +3 -4
  351. assets/js/base/components/panel/index.js +62 -0
  352. assets/js/base/components/panel/style.scss +47 -0
  353. assets/js/base/components/payment-methods/express-checkout.js +66 -0
  354. assets/js/base/components/payment-methods/express-payment-methods.js +68 -0
  355. assets/js/base/components/payment-methods/index.js +3 -0
  356. assets/js/base/components/payment-methods/no-payment-methods/index.js +34 -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
@@ -8,8 +8,6 @@
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 {
8
  // See https://github.com/WordPress/gutenberg/tree/master/packages/viewport#usage
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,54 @@
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;
46
+
47
+ $gray-10: #c3c4c7;
48
+ $gray-20: #a7aaad;
49
+ $gray-50: #646970;
50
+ $gray-60: #50575e;
51
+ $gray-80: #2c3338;
52
 
53
+ $input-border-gray: #8d96a0;
 
 
 
 
54
  $input-text-active: #2b2d2f;
 
 
 
 
 
 
assets/css/abstracts/_mixins.scss CHANGED
@@ -26,13 +26,11 @@ $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
  > * {
@@ -52,7 +50,6 @@ $fontSizes: (
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,29 +59,6 @@ $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() {
@@ -124,7 +98,6 @@ $fontSizes: (
124
  background: transparent;
125
  box-shadow: none;
126
  display: inline;
127
- text-shadow: none;
128
 
129
  &:hover,
130
  &:focus,
@@ -170,24 +143,7 @@ $fontSizes: (
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
- }
26
  // Adds animation to placeholder section
27
  @mixin placeholder() {
28
  animation: loading-fade 1.2s ease-in-out infinite;
29
+ background-color: $core-grey-light-500 !important;
30
+ border-color: $core-grey-light-500 !important;
31
+ color: $core-grey-light-500 !important;
 
32
  box-shadow: none;
33
  pointer-events: none;
 
34
 
35
  // Forces direct descendants to keep layout but lose visibility.
36
  > * {
50
 
51
  // Hide an element from sighted users, but available to screen reader users.
52
  @mixin visually-hidden() {
 
53
  clip: rect(1px, 1px, 1px, 1px);
54
  clip-path: inset(50%);
55
  height: 1px;
59
  /* Many screen reader and browser combinations announce broken words as they would appear visually. */
60
  overflow-wrap: normal !important;
61
  word-wrap: normal !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  }
63
 
64
  @mixin reset-box() {
98
  background: transparent;
99
  box-shadow: none;
100
  display: inline;
 
101
 
102
  &:hover,
103
  &:focus,
143
  }
144
  }
145
 
 
 
 
 
 
 
 
146
  // Converts a px unit to em.
147
  @function em($size, $base: 16px) {
148
  @return $size / $base * 1em;
149
  }
 
 
 
 
 
 
 
 
 
 
assets/css/abstracts/_variables.scss CHANGED
@@ -1,12 +1,26 @@
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.
20
 
21
  // Cart block
22
  $cart-image-width: 5rem;
23
+
24
+ // Card element widths
25
+ $card-element-small-width: 5rem;
26
+ $card-element-width: 7rem;
assets/css/editor.scss CHANGED
@@ -19,7 +19,6 @@
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;
@@ -48,15 +47,16 @@
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
  .wc-block-grid__product {
24
  margin: 0 0 $gap-large 0;
47
  }
48
  }
49
 
50
+ // Adds border to placeholder lists, so they can be distinguished from the white background.
51
+ .components-placeholder .woocommerce-search-list__list {
52
+ border: 1px solid $core-grey-light-500;
 
 
53
  }
54
 
55
+ // Work-around to make the SearchList component work fine with the last versions of @wordpress/components.
56
+ // Ideally it should be possible to remove this once this issue is fixed in WC Admin:
57
+ // https://github.com/woocommerce/woocommerce-admin/issues/4349
58
+ .components-placeholder .woocommerce-search-list__list .woocommerce-search-list__item {
59
+ border-radius: 0;
60
+ height: auto;
61
+ text-align: left;
62
  }
assets/css/style.scss CHANGED
@@ -2,11 +2,6 @@
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;
@@ -21,7 +16,6 @@
21
  }
22
 
23
  img {
24
- height: auto;
25
  width: 100%;
26
 
27
  &[hidden] {
@@ -47,56 +41,38 @@
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
 
@@ -201,9 +177,6 @@
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 {
@@ -258,7 +231,7 @@
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;
@@ -307,11 +280,3 @@
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
- }
2
  @include link-button();
3
  }
4
 
 
 
 
 
 
5
  // These styles are for the server side rendered product grid blocks.
6
  .wc-block-grid__products .wc-block-grid__product-image {
7
  text-decoration: none;
16
  }
17
 
18
  img {
 
19
  width: 100%;
20
 
21
  &[hidden] {
41
  margin-right: 0.5em;
42
  }
43
  }
44
+ .wc-block-grid__product-add-to-cart {
45
  word-break: break-word;
46
  white-space: normal;
47
+ a,
48
+ button {
49
  word-break: break-word;
50
  white-space: normal;
51
  margin: 0 auto !important;
52
  display: inline-flex;
53
  justify-content: center;
 
 
 
 
54
 
55
  &.loading {
56
  opacity: 0.25;
57
  }
58
 
59
+ &::after {
60
+ margin-left: 0.5em;
61
+ display: inline-block;
62
+ }
63
+
64
  &.added::after {
65
  font-family: WooCommerce; /* stylelint-disable-line */
66
  content: "\e017";
 
 
 
 
67
  }
68
 
69
  &.loading::after {
70
  font-family: WooCommerce; /* stylelint-disable-line */
71
  content: "\e031";
72
  animation: spin 2s linear infinite;
 
 
 
 
73
  }
74
  }
75
  }
 
 
 
 
 
 
 
 
 
 
 
 
76
  .wc-block-grid__product-rating {
77
  display: block;
78
 
177
  .wc-block-components-product-sale-badge {
178
  line-height: 1;
179
  }
 
 
 
180
  }
181
 
182
  .theme-twentytwenty {
231
  }
232
 
233
  .wc-block-grid__products .wc-block-grid__product-onsale,
234
+ .wc-block-layout .wc-block-components-product-sale-badge {
235
  background: $twentytwenty-highlights-color;
236
  color: #fff;
237
  font-family: $twentytwenty-headings;
280
  }
281
  }
282
  }
 
 
 
 
 
 
 
 
assets/img/avatar.jpg ADDED
Binary file
{images/previews → assets/img}/beanie.jpg RENAMED
File without changes
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>
{images/previews → assets/img}/cap.jpg RENAMED
File without changes
assets/img/cart-preview.svg ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 230 250">
2
+ <g fill="#E1E3E6" fill-rule="evenodd">
3
+ <g transform="translate(0 43)">
4
+ <path d="M0 0h33v33H0zM38 0h24v8H38zM120 0h28v8h-28z"/>
5
+ <rect width="28" height="14" x="87" rx="2"/>
6
+ <path d="M38 10h44v8H38zM0 38h148v1H0z"/>
7
+ </g>
8
+ <g transform="translate(0 87)">
9
+ <path d="M0 0h33v33H0zM38 0h24v8H38zM120 0h28v8h-28z"/>
10
+ <rect width="28" height="14" x="87" rx="2"/>
11
+ <path d="M38 10h44v8H38zM0 38h148v1H0z"/>
12
+ </g>
13
+ <g transform="translate(0 131)">
14
+ <path d="M0 0h33v33H0zM38 0h24v8H38zM120 0h28v8h-28z"/>
15
+ <rect width="28" height="14" x="87" rx="2"/>
16
+ <path d="M38 10h44v8H38zM0 38h148v1H0z"/>
17
+ </g>
18
+ <path d="M164 0h66v170h-66zM0 24h33v8H0zM120 24h28v8h-28zM87 24h28v8H87zM0 37h148v1H0zM0 0h66v14H0z"/>
19
+ </g>
20
+ </svg>
assets/img/checkout-preview.svg ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 230 250">
2
+ <g fill="none" fill-rule="evenodd">
3
+ <g transform="translate(0 72)">
4
+ <path fill="#E1E3E6" d="M15 33h125V0H15z"/>
5
+ <circle cx="5.5" cy="5.5" r="5.5" fill="#D8D8D8"/>
6
+ <path fill="#D8D8D8" d="M5 16h1v23H5z"/>
7
+ </g>
8
+ <g transform="translate(0 113)">
9
+ <path fill="#E1E3E6" d="M15 33h125V0H15z"/>
10
+ <circle cx="5.5" cy="5.5" r="5.5" fill="#D8D8D8"/>
11
+ <path fill="#D8D8D8" d="M5 16h1v23H5z"/>
12
+ </g>
13
+ <g transform="translate(0 154)">
14
+ <path fill="#E1E3E6" d="M15 33h125V0H15z"/>
15
+ <circle cx="5.5" cy="5.5" r="5.5" fill="#D8D8D8"/>
16
+ </g>
17
+ <path fill="#E1E3E6" d="M164 0h66v148h-66zM61 57h33v8H61zM107 194h33v11h-33zM15 61h43v1H15zM97 60h43v1H97z"/>
18
+ <rect width="154" height="50" fill="#E1E3E6" rx="3"/>
19
+ </g>
20
+ </svg>
{images/previews → assets/img}/collection.jpg RENAMED
File without changes
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>
{images → assets/img}/payment-methods/alipay.svg RENAMED
File without changes
{images → assets/img}/payment-methods/amex.svg RENAMED
File without changes
{images → assets/img}/payment-methods/bancontact.svg RENAMED
File without changes
{images → assets/img}/payment-methods/diners.svg RENAMED
File without changes
{images → assets/img}/payment-methods/discover.svg RENAMED
File without changes
{images → assets/img}/payment-methods/eps.svg RENAMED
File without changes
{images → assets/img}/payment-methods/giropay.svg RENAMED
File without changes
{images → assets/img}/payment-methods/ideal.svg RENAMED
File without changes
{images → assets/img}/payment-methods/jcb.svg RENAMED
File without changes
{images → assets/img}/payment-methods/laser.svg RENAMED
File without changes
{images → assets/img}/payment-methods/maestro.svg RENAMED
File without changes
{images → assets/img}/payment-methods/mastercard.svg RENAMED
File without changes
{images → assets/img}/payment-methods/multibanco.svg RENAMED
File without changes
{images → assets/img}/payment-methods/p24.svg RENAMED
File without changes
{images → assets/img}/payment-methods/sepa.svg RENAMED
File without changes
{images → assets/img}/payment-methods/sofort.svg RENAMED
File without changes
{images → assets/img}/payment-methods/unionpay.svg RENAMED
File without changes
{images → assets/img}/payment-methods/visa.svg RENAMED
File without changes
{images → assets/img}/payment-methods/wechat.svg RENAMED
File without changes
{images/previews → assets/img}/pennant.jpg RENAMED
File without changes
assets/img/single-product-preview.svg ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 230 100">
2
+ <g fill="#E1E3E6" fill-rule="nonzero">
3
+ <path d="M76 0h11v6H76zM76 11h88v11H76zM76 27h28v6H76zM76 44h154v28H76zM76 83h22v17H76zM104 83h44v17h-44zM0 0h66v66H0z"/>
4
+ </g>
5
+ </svg>
assets/js/atomic/blocks/component-init.js CHANGED
@@ -2,117 +2,79 @@
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
  } );
2
  * External dependencies
3
  */
4
  import { registerBlockComponent } from '@woocommerce/blocks-registry';
 
 
5
 
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import ProductButton from './product/button/block';
10
+ import ProductImage from './product/image/frontend';
11
+ import ProductPrice from './product/price/block';
12
+ import ProductRating from './product/rating/block';
13
+ import ProductSaleBadge from './product/sale-badge/block';
14
+ import ProductSummary from './product/summary/block';
15
+ import ProductTitle from './product/title/frontend';
16
+ import ProductSku from './product/sku/block';
17
+ import ProductCategoryList from './product/category-list/block';
18
+ import ProductTagList from './product/tag-list/block';
19
+ import ProductStockIndicator from './product/stock-indicator/block';
20
+ import ProductAddToCart from './product/add-to-cart/frontend';
21
 
22
  registerBlockComponent( {
23
  blockName: 'woocommerce/product-price',
24
+ component: ProductPrice,
 
 
 
 
25
  } );
26
 
27
  registerBlockComponent( {
28
  blockName: 'woocommerce/product-image',
29
+ component: ProductImage,
 
 
 
 
30
  } );
31
 
32
  registerBlockComponent( {
33
  blockName: 'woocommerce/product-title',
34
+ component: ProductTitle,
 
 
 
 
35
  } );
36
 
37
  registerBlockComponent( {
38
  blockName: 'woocommerce/product-rating',
39
+ component: ProductRating,
 
 
 
 
40
  } );
41
 
42
  registerBlockComponent( {
43
  blockName: 'woocommerce/product-button',
44
+ component: ProductButton,
 
 
 
 
45
  } );
46
 
47
  registerBlockComponent( {
48
  blockName: 'woocommerce/product-summary',
49
+ component: ProductSummary,
 
 
 
 
50
  } );
51
 
52
  registerBlockComponent( {
53
  blockName: 'woocommerce/product-sale-badge',
54
+ component: ProductSaleBadge,
 
 
 
 
55
  } );
56
 
57
  registerBlockComponent( {
58
  blockName: 'woocommerce/product-sku',
59
+ component: ProductSku,
 
 
 
 
60
  } );
61
 
62
  registerBlockComponent( {
63
  blockName: 'woocommerce/product-category-list',
64
+ component: ProductCategoryList,
 
 
 
 
65
  } );
66
 
67
  registerBlockComponent( {
68
  blockName: 'woocommerce/product-tag-list',
69
+ component: ProductTagList,
 
 
 
 
70
  } );
71
 
72
  registerBlockComponent( {
73
  blockName: 'woocommerce/product-stock-indicator',
74
+ component: ProductStockIndicator,
 
 
 
 
75
  } );
76
 
77
  registerBlockComponent( {
78
  blockName: 'woocommerce/product-add-to-cart',
79
+ component: ProductAddToCart,
 
 
 
 
80
  } );
assets/js/atomic/blocks/index.js CHANGED
@@ -1,15 +1,15 @@
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';
1
  /**
2
  * Internal dependencies
3
  */
4
+ import './product/title';
5
+ import './product/price';
6
+ import './product/image';
7
+ import './product/rating';
8
+ import './product/button';
9
+ import './product/summary';
10
+ import './product/sale-badge';
11
+ import './product/sku';
12
+ import './product/category-list';
13
+ import './product/tag-list';
14
+ import './product/stock-indicator';
15
+ import './product/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/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/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/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/add-to-cart/attributes.js ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ export const blockAttributes = {
2
+ showFormElements: {
3
+ type: 'boolean',
4
+ default: false,
5
+ },
6
+ };
7
+
8
+ export default blockAttributes;
assets/js/atomic/blocks/product/add-to-cart/block.js ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import classnames from 'classnames';
6
+ import { AddToCartFormContextProvider } from '@woocommerce/base-context';
7
+ import { useProductDataContext } from '@woocommerce/shared-context';
8
+ import { isEmpty } from 'lodash';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import './style.scss';
14
+ import { AddToCartButton } from './shared';
15
+ import {
16
+ SimpleProductForm,
17
+ VariableProductForm,
18
+ ExternalProductForm,
19
+ GroupedProductForm,
20
+ } from './product-types';
21
+
22
+ /**
23
+ * Product Add to Form Block Component.
24
+ *
25
+ * @param {Object} props Incoming props.
26
+ * @param {string} [props.className] CSS Class name for the component.
27
+ * @param {boolean} [props.showFormElements] Should form elements be shown?
28
+ * @param {Object} [props.product] Optional product object. Product from context will be
29
+ * used if this is not provided.
30
+ * @return {*} The component.
31
+ */
32
+ const Block = ( { className, showFormElements, ...props } ) => {
33
+ const productDataContext = useProductDataContext();
34
+ const product = props.product || productDataContext.product || {};
35
+ const componentClass = classnames(
36
+ className,
37
+ 'wc-block-components-product-add-to-cart',
38
+ {
39
+ 'wc-block-components-product-add-to-cart--placeholder': isEmpty(
40
+ product
41
+ ),
42
+ }
43
+ );
44
+
45
+ return (
46
+ <AddToCartFormContextProvider
47
+ product={ product }
48
+ showFormElements={ showFormElements }
49
+ >
50
+ <div className={ componentClass }>
51
+ <>
52
+ { showFormElements ? (
53
+ <AddToCartForm
54
+ productType={ product.type || 'simple' }
55
+ />
56
+ ) : (
57
+ <AddToCartButton />
58
+ ) }
59
+ </>
60
+ </div>
61
+ </AddToCartFormContextProvider>
62
+ );
63
+ };
64
+
65
+ const AddToCartForm = ( { productType } ) => {
66
+ if ( productType === 'variable' ) {
67
+ return <VariableProductForm />;
68
+ }
69
+ if ( productType === 'grouped' ) {
70
+ return <GroupedProductForm />;
71
+ }
72
+ if ( productType === 'external' ) {
73
+ return <ExternalProductForm />;
74
+ }
75
+ if ( productType === 'simple' || productType === 'variation' ) {
76
+ return <SimpleProductForm />;
77
+ }
78
+ return null;
79
+ };
80
+
81
+ Block.propTypes = {
82
+ className: PropTypes.string,
83
+ product: PropTypes.object,
84
+ };
85
+
86
+ export default Block;
assets/js/atomic/blocks/product/add-to-cart/edit.js ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import EditProductLink from '@woocommerce/block-components/edit-product-link';
6
+ import { useProductDataContext } from '@woocommerce/shared-context';
7
+ import classnames from 'classnames';
8
+ import { Disabled, PanelBody, ToggleControl } from '@wordpress/components';
9
+ import { InspectorControls } from '@wordpress/block-editor';
10
+
11
+ /**
12
+ * Internal dependencies
13
+ */
14
+ import './style.scss';
15
+ import Block from './block';
16
+
17
+ export default ( { attributes, setAttributes } ) => {
18
+ const productDataContext = useProductDataContext();
19
+ const product = productDataContext.product || {};
20
+ const { className, showFormElements } = attributes;
21
+
22
+ return (
23
+ <div
24
+ className={ classnames(
25
+ className,
26
+ 'wc-block-components-product-add-to-cart'
27
+ ) }
28
+ >
29
+ <EditProductLink productId={ product.id || 0 } />
30
+ { product.type !== 'external' && (
31
+ <InspectorControls>
32
+ <PanelBody
33
+ title={ __( 'Layout', 'woo-gutenberg-products-block' ) }
34
+ >
35
+ <ToggleControl
36
+ label={ __(
37
+ 'Display form elements',
38
+ 'woo-gutenberg-products-block'
39
+ ) }
40
+ help={ __(
41
+ 'Depending on product type, allow customers to select a quantity, variations etc.',
42
+ 'woo-gutenberg-products-block'
43
+ ) }
44
+ checked={ showFormElements }
45
+ onChange={ () =>
46
+ setAttributes( {
47
+ showFormElements: ! showFormElements,
48
+ } )
49
+ }
50
+ />
51
+ </PanelBody>
52
+ </InspectorControls>
53
+ ) }
54
+ <Disabled>
55
+ <Block { ...attributes } />
56
+ </Disabled>
57
+ </div>
58
+ );
59
+ };
assets/js/atomic/blocks/product/add-to-cart/frontend.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { compose } from '@wordpress/compose';
5
+ import withFilteredAttributes from '@woocommerce/base-hocs/with-filtered-attributes';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import Block from './block';
11
+ import attributes from './attributes';
12
+
13
+ export default compose( withFilteredAttributes( attributes ) )( Block );
assets/js/atomic/blocks/product/add-to-cart/index.js ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerExperimentalBlockType } from '@woocommerce/block-settings';
6
+ import { Icon, cart } from '@woocommerce/icons';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import sharedConfig from '../shared-config';
12
+ import edit from './edit';
13
+ import attributes from './attributes';
14
+
15
+ const blockConfig = {
16
+ title: __( 'Add to Cart', 'woo-gutenberg-products-block' ),
17
+ description: __(
18
+ 'Displays an add to cart button. Optionally displays other add to cart form elements.',
19
+ 'woo-gutenberg-products-block'
20
+ ),
21
+ icon: {
22
+ src: <Icon srcElement={ cart } />,
23
+ foreground: '#96588a',
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 → product}/add-to-cart/product-types/external.js RENAMED
File without changes
assets/js/atomic/blocks/{product-elements → product}/add-to-cart/product-types/grouped/group-list/index.js RENAMED
File without changes
assets/js/atomic/blocks/{product-elements → product}/add-to-cart/product-types/grouped/index.js RENAMED
File without changes
assets/js/atomic/blocks/{product-elements → product}/add-to-cart/product-types/index.js RENAMED
File without changes
assets/js/atomic/blocks/product/add-to-cart/product-types/simple.js ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ setQuantity,
22
+ formDisabled,
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={ formDisabled }
47
+ onChange={ setQuantity }
48
+ />
49
+ <AddToCartButton />
50
+ </>
51
+ );
52
+ };
53
+
54
+ export default Simple;
assets/js/atomic/blocks/product/add-to-cart/product-types/variable/index.js ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ setQuantity,
27
+ formDisabled,
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 product={ product } />
48
+ <QuantityInput
49
+ value={ quantity }
50
+ min={ minQuantity }
51
+ max={ maxQuantity }
52
+ disabled={ formDisabled }
53
+ onChange={ setQuantity }
54
+ />
55
+ <AddToCartButton />
56
+ </>
57
+ );
58
+ };
59
+
60
+ export default Variable;
assets/js/atomic/blocks/product/add-to-cart/product-types/variable/variation-attributes/attribute-picker.js ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { useState, useEffect, useMemo } from '@wordpress/element';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import AttributeSelectControl from './attribute-select-control';
10
+ import {
11
+ getVariationsMatchingSelectedAttributes,
12
+ getSelectControlOptions,
13
+ } from './utils';
14
+
15
+ /**
16
+ * AttributePicker component.
17
+ *
18
+ * @param {*} props Component props.
19
+ */
20
+ const AttributePicker = ( { attributes, variationAttributes } ) => {
21
+ const [ variationId, setVariationId ] = useState( 0 );
22
+
23
+ // @todo Support default selected attributes in Variation Picker.
24
+ const [ selectedAttributes, setSelectedAttributes ] = useState( [] );
25
+
26
+ const attributeNames = Object.keys( attributes );
27
+ const hasSelectedAttributes =
28
+ Object.values( selectedAttributes ).filter( Boolean ).length > 0;
29
+ const hasSelectedAllAttributes =
30
+ Object.values( selectedAttributes ).filter(
31
+ ( selected ) => selected !== ''
32
+ ).length === attributeNames.length;
33
+
34
+ // Gets valid attribute options for the picker taking current selections into account.
35
+ const filteredAttributeOptions = useMemo( () => {
36
+ const options = [];
37
+
38
+ attributeNames.forEach( ( attributeName ) => {
39
+ const currentAttribute = attributes[ attributeName ];
40
+ const attributeNamesExcludingCurrentAttribute = attributeNames.filter(
41
+ ( name ) => name !== attributeName
42
+ );
43
+ const matchingVariationIds = hasSelectedAttributes
44
+ ? getVariationsMatchingSelectedAttributes( {
45
+ selectedAttributes,
46
+ variationAttributes,
47
+ attributeNames: attributeNamesExcludingCurrentAttribute,
48
+ } )
49
+ : null;
50
+ const validAttributeTerms =
51
+ matchingVariationIds !== null
52
+ ? matchingVariationIds.map(
53
+ ( varId ) =>
54
+ variationAttributes[ varId ][ attributeName ]
55
+ )
56
+ : null;
57
+ options[ attributeName ] = getSelectControlOptions(
58
+ currentAttribute.terms,
59
+ validAttributeTerms
60
+ );
61
+ } );
62
+
63
+ return options;
64
+ }, [
65
+ attributes,
66
+ variationAttributes,
67
+ attributeNames,
68
+ selectedAttributes,
69
+ hasSelectedAttributes,
70
+ ] );
71
+
72
+ // Select variation when selections change.
73
+ useEffect( () => {
74
+ if ( ! hasSelectedAllAttributes ) {
75
+ setVariationId( 0 );
76
+ return;
77
+ }
78
+
79
+ const matchingVariationIds = getVariationsMatchingSelectedAttributes( {
80
+ selectedAttributes,
81
+ variationAttributes,
82
+ attributeNames,
83
+ } );
84
+
85
+ setVariationId( matchingVariationIds[ 0 ] || 0 );
86
+ }, [
87
+ selectedAttributes,
88
+ variationAttributes,
89
+ attributeNames,
90
+ hasSelectedAllAttributes,
91
+ ] );
92
+
93
+ // @todo Hook up Variation Picker with Cart Form.
94
+ return (
95
+ <div className="wc-block-components-product-add-to-cart-attribute-picker">
96
+ { attributeNames.map( ( attributeName ) => (
97
+ <AttributeSelectControl
98
+ key={ attributeName }
99
+ attributeName={ attributeName }
100
+ options={ filteredAttributeOptions[ attributeName ] }
101
+ selected={ selectedAttributes[ attributeName ] }
102
+ onChange={ ( selected ) => {
103
+ setSelectedAttributes( {
104
+ ...selectedAttributes,
105
+ [ attributeName ]: selected,
106
+ } );
107
+ } }
108
+ />
109
+ ) ) }
110
+ <p>Matched variation ID: { variationId }</p>
111
+ </div>
112
+ );
113
+ };
114
+
115
+ export default AttributePicker;
assets/js/atomic/blocks/product/add-to-cart/product-types/variable/variation-attributes/attribute-select-control.js ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { decodeEntities } from '@wordpress/html-entities';
6
+ import { SelectControl } from '@wordpress/components';
7
+
8
+ // Default option for select boxes.
9
+ const selectAnOption = {
10
+ value: '',
11
+ label: __( 'Select an option', 'woo-gutenberg-products-block' ),
12
+ };
13
+
14
+ /**
15
+ * VariationAttributeSelect component.
16
+ *
17
+ * @param {*} props Component props.
18
+ */
19
+ const AttributeSelectControl = ( {
20
+ attributeName,
21
+ options = [],
22
+ selected = '',
23
+ onChange = () => {},
24
+ } ) => {
25
+ return (
26
+ <SelectControl
27
+ className="wc-block-components-product-add-to-cart-attribute-picker__select"
28
+ label={ decodeEntities( attributeName ) }
29
+ value={ selected || '' }
30
+ options={ [ selectAnOption, ...options ] }
31
+ onChange={ onChange }
32
+ />
33
+ );
34
+ };
35
+
36
+ export default AttributeSelectControl;
assets/js/atomic/blocks/product/add-to-cart/product-types/variable/variation-attributes/index.js ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 {*} props Component props.
12
+ */
13
+ const VariationAttributes = ( { product } ) => {
14
+ const {
15
+ attributes: productAttributes = {},
16
+ variations: productVariations = [],
17
+ } = product;
18
+
19
+ const attributes = getAttributes( productAttributes );
20
+ const variationAttributes = getVariationAttributes( productVariations );
21
+
22
+ if (
23
+ Object.keys( attributes ).length === 0 ||
24
+ variationAttributes.length === 0
25
+ ) {
26
+ return null;
27
+ }
28
+
29
+ return (
30
+ <AttributePicker
31
+ attributes={ attributes }
32
+ variationAttributes={ variationAttributes }
33
+ />
34
+ );
35
+ };
36
+
37
+ export default VariationAttributes;
assets/js/atomic/blocks/product/add-to-cart/product-types/variable/variation-attributes/style.scss ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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__select {
11
+ margin: 0 0 em($gap-small) 0;
12
+
13
+ select {
14
+ min-width: 60%;
15
+ min-height: 1.75em;
16
+ }
17
+ }
18
+ }
assets/js/atomic/blocks/product/add-to-cart/product-types/variable/variation-attributes/utils.js ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { keyBy } from 'lodash';
5
+
6
+ /**
7
+ * Key an array of attributes by name,
8
+ *
9
+ * @param {Object} attributes Attributes array.
10
+ */
11
+ export const getAttributes = ( attributes ) => {
12
+ return attributes
13
+ ? keyBy(
14
+ Object.values( attributes ).filter(
15
+ ( { has_variations: hasVariations } ) => hasVariations
16
+ ),
17
+ 'name'
18
+ )
19
+ : [];
20
+ };
21
+
22
+ /**
23
+ * Format variations from the API into a map of just the attribute names and values.
24
+ *
25
+ * @param {Array} variations Variations array.
26
+ */
27
+ export const getVariationAttributes = ( variations ) => {
28
+ if ( ! variations ) {
29
+ return {};
30
+ }
31
+
32
+ const attributesMap = {};
33
+
34
+ variations.forEach( ( { id, attributes } ) => {
35
+ attributesMap[ id ] = attributes.reduce( ( acc, { name, value } ) => {
36
+ acc[ name ] = value;
37
+ return acc;
38
+ }, [] );
39
+ } );
40
+
41
+ return attributesMap;
42
+ };
43
+
44
+ /**
45
+ * Given a list of terms, filter them and return options for the select boxes.
46
+ *
47
+ * @param {Object} attributeTerms List of attribute term objects.
48
+ * @param {?Array} validAttributeTerms Valid values if selections have been made already.
49
+ * @return {Array} Value/Label pairs of select box options.
50
+ */
51
+ export const getSelectControlOptions = (
52
+ attributeTerms,
53
+ validAttributeTerms = null
54
+ ) => {
55
+ return Object.values( attributeTerms )
56
+ .map( ( { name, slug } ) => {
57
+ if (
58
+ validAttributeTerms === null ||
59
+ validAttributeTerms.includes( null ) ||
60
+ validAttributeTerms.includes( slug )
61
+ ) {
62
+ return {
63
+ value: slug,
64
+ label: name,
65
+ };
66
+ }
67
+ return null;
68
+ } )
69
+ .filter( Boolean );
70
+ };
71
+
72
+ /**
73
+ * Given a list of variations and a list of attribute values, return variations which match.
74
+ *
75
+ * Allows an attribute to be excluded by name. This is used to filter displayed options for
76
+ * individual attribute selects.
77
+ *
78
+ * @param {Object} props
79
+ * @param {Object} props.selectedAttributes List of selected attributes.
80
+ * @param {Object} props.variationAttributes List of variations and their attributes.
81
+ * @param {Object} props.attributeNames List of all possible attribute names.
82
+ * @return {Array} List of matching variation IDs.
83
+ */
84
+ export const getVariationsMatchingSelectedAttributes = ( {
85
+ selectedAttributes,
86
+ variationAttributes,
87
+ attributeNames,
88
+ } ) => {
89
+ return Object.keys( variationAttributes ).filter( ( variationId ) =>
90
+ attributeNames.every( ( attributeName ) => {
91
+ const selectedAttribute = selectedAttributes[ attributeName ] || '';
92
+ const variationAttribute =
93
+ variationAttributes[ variationId ][ attributeName ];
94
+
95
+ // If there is no selected attribute, consider this a match.
96
+ if ( selectedAttribute === '' ) {
97
+ return true;
98
+ }
99
+ // If the variation attributes for this attribute are set to null, it matches all values.
100
+ if ( variationAttribute === null ) {
101
+ return true;
102
+ }
103
+ // Otherwise, only match if the selected values are the same.
104
+ return variationAttribute === selectedAttribute;
105
+ } )
106
+ );
107
+ };
assets/js/atomic/blocks/product/add-to-cart/shared/add-to-cart-button.js ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 } from '@wordpress/element';
8
+ import { useAddToCartFormContext } from '@woocommerce/base-context';
9
+
10
+ /**
11
+ * Add to Cart Form Button Component.
12
+ */
13
+ const AddToCartButton = () => {
14
+ const {
15
+ showFormElements,
16
+ product,
17
+ quantityInCart,
18
+ formDisabled,
19
+ formSubmitting,
20
+ onSubmit,
21
+ } = useAddToCartFormContext();
22
+
23
+ const {
24
+ is_purchasable: isPurchasable = true,
25
+ has_options: hasOptions,
26
+ add_to_cart: addToCartButtonData = {
27
+ url: '',
28
+ text: '',
29
+ },
30
+ } = product;
31
+
32
+ // If we are showing form elements, OR if the product has no additional form options, we can show
33
+ // a functional direct add to cart button, provided that the product is purchasable.
34
+ // No link is required to the full form under these circumstances.
35
+ if ( ( showFormElements || ! hasOptions ) && isPurchasable ) {
36
+ return (
37
+ <ButtonComponent
38
+ className="wc-block-components-product-add-to-cart-button"
39
+ quantityInCart={ quantityInCart }
40
+ disabled={ formDisabled }
41
+ loading={ formSubmitting }
42
+ onClick={ onSubmit }
43
+ />
44
+ );
45
+ }
46
+
47
+ return (
48
+ <LinkComponent
49
+ className="wc-block-components-product-add-to-cart-button"
50
+ href={ addToCartButtonData.url }
51
+ text={
52
+ addToCartButtonData.text ||
53
+ __( 'View Product', 'woo-gutenberg-products-block' )
54
+ }
55
+ />
56
+ );
57
+ };
58
+
59
+ /**
60
+ * Button for non-purchasable products.
61
+ */
62
+ const LinkComponent = ( { className, href, text } ) => {
63
+ return (
64
+ <Button className={ className } href={ href } rel="nofollow">
65
+ { text }
66
+ </Button>
67
+ );
68
+ };
69
+
70
+ /**
71
+ * Button for purchasable products.
72
+ */
73
+ const ButtonComponent = ( {
74
+ className,
75
+ quantityInCart,
76
+ loading,
77
+ disabled,
78
+ onClick,
79
+ } ) => {
80
+ const [ wasClicked, setWasClicked ] = useState( false );
81
+
82
+ return (
83
+ <Button
84
+ className={ className }
85
+ disabled={ disabled }
86
+ showSpinner={ loading }
87
+ onClick={ () => {
88
+ onClick();
89
+ setWasClicked( true );
90
+ } }
91
+ >
92
+ { quantityInCart > 0
93
+ ? sprintf(
94
+ // translators: %s number of products in cart.
95
+ _n(
96
+ '%d in cart',
97
+ '%d in cart',
98
+ quantityInCart,
99
+ 'woo-gutenberg-products-block'
100
+ ),
101
+ quantityInCart
102
+ )
103
+ : __( 'Add to cart', 'woo-gutenberg-products-block' ) }
104
+ { wasClicked && (
105
+ <Icon
106
+ srcElement={ doneIcon }
107
+ alt={ __( 'Done', 'woo-gutenberg-products-block' ) }
108
+ />
109
+ ) }
110
+ </Button>
111
+ );
112
+ };
113
+
114
+ export default AddToCartButton;
assets/js/atomic/blocks/{product-elements → product}/add-to-cart/shared/index.js RENAMED
File without changes
assets/js/atomic/blocks/{product-elements → product}/add-to-cart/shared/product-unavailable.js RENAMED
File without changes
assets/js/atomic/blocks/product/add-to-cart/shared/quantity-input.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Quantity Input Component.
3
+ */
4
+ const QuantityInput = ( { disabled, min, max, value, onChange } ) => {
5
+ return (
6
+ <input
7
+ className="wc-block-components-product-add-to-cart-quantity"
8
+ type="number"
9
+ value={ value }
10
+ min={ min }
11
+ max={ max }
12
+ hidden={ max === 1 }
13
+ disabled={ disabled }
14
+ onChange={ ( e ) => {
15
+ onChange( e.target.value );
16
+ } }
17
+ />
18
+ );
19
+ };
20
+
21
+ export default QuantityInput;
assets/js/atomic/blocks/product/add-to-cart/style.scss ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-layout {
2
+ .wc-block-components-product-add-to-cart {
3
+ margin: 0;
4
+ display: flex;
5
+ flex-wrap: wrap;
6
+
7
+ .wc-block-components-product-add-to-cart-button {
8
+ margin: 0 0 em($gap-small) 0;
9
+
10
+ .wc-block-components-button__text {
11
+ display: block;
12
+
13
+ > svg {
14
+ fill: currentColor;
15
+ vertical-align: top;
16
+ width: 1.5em;
17
+ height: 1.5em;
18
+ margin: -0.25em 0 -0.25em 0.5em;
19
+ }
20
+ }
21
+ }
22
+
23
+ .wc-block-components-product-add-to-cart-quantity {
24
+ margin: 0 1em em($gap-small) 0;
25
+ width: 5em;
26
+ padding: 0.618em;
27
+ background: $white;
28
+ border: 1px solid #ccc;
29
+ border-radius: 2px;
30
+ color: #43454b;
31
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.125);
32
+ text-align: center;
33
+ }
34
+ }
35
+ .wc-block-components-product-add-to-cart--placeholder {
36
+ .wc-block-components-product-add-to-cart-quantity,
37
+ .wc-block-components-product-add-to-cart-button {
38
+ @include placeholder();
39
+ }
40
+ }
41
+
42
+ .wc-block-grid .wc-block-components-product-add-to-cart {
43
+ justify-content: center;
44
+ }
45
+ }
assets/js/atomic/blocks/product/button/block.js ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 { useEffect, useRef } from '@wordpress/element';
8
+ import { useStoreAddToCart } from '@woocommerce/base-hooks';
9
+ import { decodeEntities } from '@wordpress/html-entities';
10
+ import { triggerFragmentRefresh } from '@woocommerce/base-utils';
11
+ import {
12
+ useInnerBlockLayoutContext,
13
+ useProductDataContext,
14
+ } from '@woocommerce/shared-context';
15
+
16
+ /**
17
+ * Internal dependencies
18
+ */
19
+ import './style.scss';
20
+
21
+ /**
22
+ * Product Button Block Component.
23
+ *
24
+ * @param {Object} props Incoming props.
25
+ * @param {string} [props.className] CSS Class name for the component.
26
+ * @param {Object} [props.product] Optional product object. Product from context will be used if
27
+ * this is not provided.
28
+ * @return {*} The component.
29
+ */
30
+ const Block = ( { className, ...props } ) => {
31
+ const { parentClassName } = useInnerBlockLayoutContext();
32
+ const productDataContext = useProductDataContext();
33
+ const product = props.product || productDataContext.product;
34
+
35
+ return (
36
+ <div
37
+ className={ classnames(
38
+ className,
39
+ 'wp-block-button',
40
+ 'wc-block-components-product-button',
41
+ `${ parentClassName }__product-add-to-cart`
42
+ ) }
43
+ >
44
+ { product ? (
45
+ <AddToCartButton product={ product } />
46
+ ) : (
47
+ <AddToCartButtonPlaceholder />
48
+ ) }
49
+ </div>
50
+ );
51
+ };
52
+
53
+ const AddToCartButton = ( { product } ) => {
54
+ const firstMount = useRef( true );
55
+
56
+ const {
57
+ id,
58
+ permalink,
59
+ add_to_cart: productCartDetails,
60
+ has_options: hasOptions,
61
+ is_purchasable: isPurchasable,
62
+ is_in_stock: isInStock,
63
+ } = product;
64
+
65
+ const { cartQuantity, addingToCart, addToCart } = useStoreAddToCart( id );
66
+
67
+ useEffect( () => {
68
+ // Avoid running on first mount when cart quantity is first set.
69
+ if ( firstMount.current ) {
70
+ firstMount.current = false;
71
+ return;
72
+ }
73
+ triggerFragmentRefresh();
74
+ }, [ cartQuantity ] );
75
+
76
+ const addedToCart = Number.isFinite( cartQuantity ) && cartQuantity > 0;
77
+ const allowAddToCart = ! hasOptions && isPurchasable && isInStock;
78
+ const buttonAriaLabel = decodeEntities(
79
+ productCartDetails?.description || ''
80
+ );
81
+ const buttonText = addedToCart
82
+ ? sprintf(
83
+ // translators: %s number of products in cart.
84
+ _n(
85
+ '%d in cart',
86
+ '%d in cart',
87
+ cartQuantity,
88
+ 'woo-gutenberg-products-block'
89
+ ),
90
+ cartQuantity
91
+ )
92
+ : decodeEntities(
93
+ productCartDetails?.text ||
94
+ __( 'Add to cart', 'woo-gutenberg-products-block' )
95
+ );
96
+
97
+ const ButtonTag = allowAddToCart ? 'button' : 'a';
98
+ const buttonProps = {};
99
+
100
+ if ( ! allowAddToCart ) {
101
+ buttonProps.href = permalink;
102
+ buttonProps.rel = 'nofollow';
103
+ } else {
104
+ buttonProps.onClick = () => {
105
+ addToCart();
106
+ };
107
+ }
108
+
109
+ return (
110
+ <ButtonTag
111
+ aria-label={ buttonAriaLabel }
112
+ className={ classnames(
113
+ 'wp-block-button__link',
114
+ 'add_to_cart_button',
115
+ 'wc-block-components-product-button__button',
116
+ {
117
+ loading: addingToCart,
118
+ added: addedToCart,
119
+ }
120
+ ) }
121
+ disabled={ addingToCart }
122
+ { ...buttonProps }
123
+ >
124
+ { buttonText }
125
+ </ButtonTag>
126
+ );
127
+ };
128
+
129
+ const AddToCartButtonPlaceholder = () => {
130
+ return (
131
+ <button
132
+ className={ classnames(
133
+ 'wp-block-button__link',
134
+ 'add_to_cart_button',
135
+ 'wc-block-components-product-button__button',
136
+ 'wc-block-components-product-button__button--placeholder'
137
+ ) }
138
+ disabled={ true }
139
+ />
140
+ );
141
+ };
142
+
143
+ Block.propTypes = {
144
+ className: PropTypes.string,
145
+ product: PropTypes.object,
146
+ };
147
+
148
+ export default Block;
assets/js/atomic/blocks/product/button/edit.js ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { Disabled } from '@wordpress/components';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import Block from './block';
10
+
11
+ export default ( { attributes } ) => {
12
+ return (
13
+ <Disabled>
14
+ <Block { ...attributes } />
15
+ </Disabled>
16
+ );
17
+ };
assets/js/atomic/blocks/product/button/index.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerBlockType } from '@wordpress/blocks';
6
+ import { Icon, cart } from '@woocommerce/icons';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import sharedConfig from '../shared-config';
12
+ import edit from './edit';
13
+
14
+ const blockConfig = {
15
+ title: __( 'Add to Cart Button', 'woo-gutenberg-products-block' ),
16
+ description: __(
17
+ 'Display a call to action button which either adds the product to the cart, or links to the product page.',
18
+ 'woo-gutenberg-products-block'
19
+ ),
20
+ icon: {
21
+ src: <Icon srcElement={ cart } />,
22
+ foreground: '#96588a',
23
+ },
24
+ edit,
25
+ };
26
+
27
+ registerBlockType( 'woocommerce/product-button', {
28
+ ...sharedConfig,
29
+ ...blockConfig,
30
+ } );
assets/js/atomic/blocks/product/button/style.scss ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-layout .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
+ .wc-block-layout--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
+ }
assets/js/atomic/blocks/product/category-list/block.js ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+ import './style.scss';
17
+
18
+ /**
19
+ * Product Category Block Component.
20
+ *
21
+ * @param {Object} props Incoming props.
22
+ * @param {string} [props.className] CSS Class name for the component.
23
+ * @param {Object} [props.product] Optional product object. Product from context will be used if
24
+ * this is not provided.
25
+ * @return {*} The component.
26
+ */
27
+ const Block = ( { className, ...props } ) => {
28
+ const { parentClassName } = useInnerBlockLayoutContext();
29
+ const productDataContext = useProductDataContext();
30
+ const { product } = productDataContext || props || {};
31
+
32
+ if ( isEmpty( product ) || isEmpty( product.categories ) ) {
33
+ return null;
34
+ }
35
+
36
+ return (
37
+ <div
38
+ className={ classnames(
39
+ className,
40
+ 'wc-block-components-product-category-list',
41
+ `${ parentClassName }__product-category-list`
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
+ product: PropTypes.object,
63
+ };
64
+
65
+ export default Block;
assets/js/atomic/blocks/product/category-list/edit.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { Disabled } from '@wordpress/components';
5
+ import EditProductLink from '@woocommerce/block-components/edit-product-link';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import Block from './block';
11
+
12
+ export default ( { attributes } ) => {
13
+ return (
14
+ <>
15
+ <EditProductLink />
16
+ <Disabled>
17
+ <Block { ...attributes } />
18
+ </Disabled>
19
+ </>
20
+ );
21
+ };
assets/js/atomic/blocks/product/category-list/index.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerExperimentalBlockType } from '@woocommerce/block-settings';
6
+ import { Icon, folder } from '@woocommerce/icons';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import sharedConfig from '../shared-config';
12
+ import edit from './edit';
13
+
14
+ const blockConfig = {
15
+ title: __( 'Product Category List', 'woo-gutenberg-products-block' ),
16
+ description: __(
17
+ 'Display a list of categories belonging to a product.',
18
+ 'woo-gutenberg-products-block'
19
+ ),
20
+ icon: {
21
+ src: <Icon srcElement={ folder } />,
22
+ foreground: '#96588a',
23
+ },
24
+ edit,
25
+ };
26
+
27
+ registerExperimentalBlockType( 'woocommerce/product-category-list', {
28
+ ...sharedConfig,
29
+ ...blockConfig,
30
+ } );
assets/js/atomic/blocks/product/category-list/style.scss ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-layout .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/image/attributes.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ };
19
+
20
+ export default blockAttributes;
assets/js/atomic/blocks/product/image/block.js ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import { useState } from '@wordpress/element';
6
+ import classnames from 'classnames';
7
+ import { PLACEHOLDER_IMG_SRC } from '@woocommerce/block-settings';
8
+ import {
9
+ useInnerBlockLayoutContext,
10
+ useProductDataContext,
11
+ } from '@woocommerce/shared-context';
12
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+ import ProductSaleBadge from './../sale-badge/block';
17
+ import './style.scss';
18
+
19
+ /**
20
+ * Product Image Block Component.
21
+ *
22
+ * @param {Object} props Incoming props.
23
+ * @param {string} [props.className] CSS Class name for the component.
24
+ * @param {boolean} [props.productLink] Whether or not to display a link to the product page.
25
+ * @param {boolean} [props.showSaleBadge] Whether or not to display the on sale badge.
26
+ * @param {string} [props.saleBadgeAlign] How should the sale badge be aligned if displayed.
27
+ * @param {Object} [props.product] Optional product object. Product from context will be used if
28
+ * this is not provided.
29
+ * @return {*} The component.
30
+ */
31
+ const Block = ( {
32
+ className,
33
+ imageSizing = 'full-size',
34
+ productLink = true,
35
+ showSaleBadge,
36
+ saleBadgeAlign = 'right',
37
+ ...props
38
+ } ) => {
39
+ const { parentClassName } = useInnerBlockLayoutContext();
40
+ const productDataContext = useProductDataContext();
41
+ const product = props.product || productDataContext.product;
42
+ const [ imageLoaded, setImageLoaded ] = useState( false );
43
+
44
+ if ( ! product ) {
45
+ return (
46
+ <div
47
+ className={ classnames(
48
+ className,
49
+ 'wc-block-components-product-image',
50
+ 'wc-block-components-product-image--placeholder',
51
+ `${ parentClassName }__product-image`
52
+ ) }
53
+ >
54
+ <ImagePlaceholder />
55
+ </div>
56
+ );
57
+ }
58
+
59
+ const image =
60
+ product?.images && product.images.length ? product.images[ 0 ] : null;
61
+
62
+ return (
63
+ <div
64
+ className={ classnames(
65
+ className,
66
+ 'wc-block-components-product-image',
67
+ `${ parentClassName }__product-image`
68
+ ) }
69
+ >
70
+ { productLink ? (
71
+ <a href={ product.permalink } rel="nofollow">
72
+ { !! showSaleBadge && (
73
+ <ProductSaleBadge
74
+ align={ saleBadgeAlign }
75
+ product={ product }
76
+ />
77
+ ) }
78
+ <Image
79
+ image={ image }
80
+ onLoad={ () => setImageLoaded( true ) }
81
+ loaded={ imageLoaded }
82
+ showFullSize={ imageSizing !== 'cropped' }
83
+ />
84
+ </a>
85
+ ) : (
86
+ <>
87
+ { !! showSaleBadge && (
88
+ <ProductSaleBadge
89
+ align={ saleBadgeAlign }
90
+ product={ product }
91
+ />
92
+ ) }
93
+ <Image
94
+ image={ image }
95
+ onLoad={ () => setImageLoaded( true ) }
96
+ loaded={ imageLoaded }
97
+ showFullSize={ imageSizing !== 'cropped' }
98
+ />
99
+ </>
100
+ ) }
101
+ </div>
102
+ );
103
+ };
104
+
105
+ const ImagePlaceholder = () => {
106
+ return <img src={ PLACEHOLDER_IMG_SRC } alt="" />;
107
+ };
108
+
109
+ const Image = ( { image, onLoad, loaded, showFullSize } ) => {
110
+ const { thumbnail, src, srcset, sizes, alt } = image || {};
111
+
112
+ let imageProps = {
113
+ alt,
114
+ onLoad,
115
+ hidden: ! loaded,
116
+ src: thumbnail,
117
+ };
118
+ if ( showFullSize ) {
119
+ imageProps = {
120
+ ...imageProps,
121
+ src,
122
+ srcSet: srcset,
123
+ sizes,
124
+ };
125
+ }
126
+
127
+ return (
128
+ <>
129
+ { /* eslint-disable-next-line jsx-a11y/alt-text */ }
130
+ <img { ...imageProps } />
131
+ { ! loaded && <ImagePlaceholder /> }
132
+ </>
133
+ );
134
+ };
135
+
136
+ Block.propTypes = {
137
+ className: PropTypes.string,
138
+ product: PropTypes.object,
139
+ productLink: PropTypes.bool,
140
+ showSaleBadge: PropTypes.bool,
141
+ saleBadgeAlign: PropTypes.string,
142
+ };
143
+
144
+ export default Block;
assets/js/atomic/blocks/product/image/edit.js ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 { __experimentalCreateInterpolateElement } from 'wordpress-element';
8
+ import ToggleButtonControl from '@woocommerce/block-components/toggle-button-control';
9
+ import { getAdminLink } from '@woocommerce/settings';
10
+
11
+ /**
12
+ * Internal dependencies
13
+ */
14
+ import Block from './block';
15
+
16
+ export default ( { attributes, setAttributes } ) => {
17
+ const {
18
+ productLink,
19
+ imageSizing,
20
+ showSaleBadge,
21
+ saleBadgeAlign,
22
+ } = attributes;
23
+
24
+ return (
25
+ <>
26
+ <InspectorControls>
27
+ <PanelBody
28
+ title={ __( 'Content', 'woo-gutenberg-products-block' ) }
29
+ >
30
+ <ToggleControl
31
+ label={ __(
32
+ 'Link to Product Page',
33
+ 'woo-gutenberg-products-block'
34
+ ) }
35
+ help={ __(
36
+ 'Links the image to the single product listing.',
37
+ 'woo-gutenberg-products-block'
38
+ ) }
39
+ checked={ productLink }
40
+ onChange={ () =>
41
+ setAttributes( {
42
+ productLink: ! productLink,
43
+ } )
44
+ }
45
+ />
46
+ <ToggleControl
47
+ label={ __(
48
+ 'Show On-Sale Badge',
49
+ 'woo-gutenberg-products-block'
50
+ ) }
51
+ help={ __(
52
+ 'Overlay a "sale" badge if the product is on-sale.',
53
+ 'woo-gutenberg-products-block'
54
+ ) }
55
+ checked={ showSaleBadge }
56
+ onChange={ () =>
57
+ setAttributes( {
58
+ showSaleBadge: ! showSaleBadge,
59
+ } )
60
+ }
61
+ />
62
+ { showSaleBadge && (
63
+ <ToggleButtonControl
64
+ label={ __(
65
+ 'Sale Badge Alignment',
66
+ 'woo-gutenberg-products-block'
67
+ ) }
68
+ value={ saleBadgeAlign }
69
+ options={ [
70
+ {
71
+ label: __(
72
+ 'Left',
73
+ 'woo-gutenberg-products-block'
74
+ ),
75
+ value: 'left',
76
+ },
77
+ {
78
+ label: __(
79
+ 'Center',
80
+ 'woo-gutenberg-products-block'
81
+ ),
82
+ value: 'center',
83
+ },
84
+ {
85
+ label: __(
86
+ 'Right',
87
+ 'woo-gutenberg-products-block'
88
+ ),
89
+ value: 'right',
90
+ },
91
+ ] }
92
+ onChange={ ( value ) =>
93
+ setAttributes( { saleBadgeAlign: value } )
94
+ }
95
+ />
96
+ ) }
97
+ <ToggleButtonControl
98
+ label={ __(
99
+ 'Image Sizing',
100
+ 'woo-gutenberg-products-block'
101
+ ) }
102
+ help={ __experimentalCreateInterpolateElement(
103
+ __(
104
+ 'Product image cropping can be modified in the <a>Customizer</a>.',
105
+ 'woo-gutenberg-products-block'
106
+ ),
107
+ {
108
+ a: (
109
+ // eslint-disable-next-line jsx-a11y/anchor-has-content
110
+ <a
111
+ href={ `${ getAdminLink(
112
+ 'customize.php'
113
+ ) }?autofocus[panel]=woocommerce&autofocus[section]=woocommerce_product_images` }
114
+ target="_blank"
115
+ rel="noopener noreferrer"
116
+ />
117
+ ),
118
+ }
119
+ ) }
120
+ value={ imageSizing }
121
+ options={ [
122
+ {
123
+ label: __(
124
+ 'Full Size',
125
+ 'woo-gutenberg-products-block'
126
+ ),
127
+ value: 'full-size',
128
+ },
129
+ {
130
+ label: __(
131
+ 'Cropped',
132
+ 'woo-gutenberg-products-block'
133
+ ),
134
+ value: 'cropped',
135
+ },
136
+ ] }
137
+ onChange={ ( value ) =>
138
+ setAttributes( { imageSizing: value } )
139
+ }
140
+ />
141
+ </PanelBody>
142
+ </InspectorControls>
143
+ <Disabled>
144
+ <Block { ...attributes } />
145
+ </Disabled>
146
+ </>
147
+ );
148
+ };
assets/js/atomic/blocks/product/image/frontend.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { compose } from '@wordpress/compose';
5
+ import withFilteredAttributes from '@woocommerce/base-hocs/with-filtered-attributes';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import Block from './block';
11
+ import attributes from './attributes';
12
+
13
+ export default compose( withFilteredAttributes( attributes ) )( Block );
assets/js/atomic/blocks/product/image/index.js ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerBlockType } from '@wordpress/blocks';
6
+ import { Icon, image } from '@woocommerce/icons';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import sharedConfig from '../shared-config';
12
+ import attributes from './attributes';
13
+ import edit from './edit';
14
+
15
+ const blockConfig = {
16
+ title: __( 'Product Image', 'woo-gutenberg-products-block' ),
17
+ description: __(
18
+ 'Display the main product image',
19
+ 'woo-gutenberg-products-block'
20
+ ),
21
+ icon: {
22
+ src: <Icon srcElement={ image } />,
23
+ foreground: '#96588a',
24
+ },
25
+ attributes,
26
+ edit,
27
+ };
28
+
29
+ registerBlockType( 'woocommerce/product-image', {
30
+ ...sharedConfig,
31
+ ...blockConfig,
32
+ } );
assets/js/atomic/blocks/product/image/style.scss ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .editor-styles-wrapper .wc-block-layout .wc-block-grid__products .wc-block-grid__product .wc-block-components-product-image,
2
+ .wc-block-layout .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
+ &--alignleft {
27
+ position: absolute;
28
+ left: $gap-smaller/2;
29
+ top: $gap-smaller/2;
30
+ right: auto;
31
+ margin: 0;
32
+ }
33
+ &--aligncenter {
34
+ position: absolute;
35
+ top: $gap-smaller/2;
36
+ left: 50%;
37
+ right: auto;
38
+ transform: translateX(-50%);
39
+ margin: 0;
40
+ }
41
+ &--alignright {
42
+ position: absolute;
43
+ right: $gap-smaller/2;
44
+ top: $gap-smaller/2;
45
+ left: auto;
46
+ margin: 0;
47
+ }
48
+ }
49
+ }
50
+
51
+ .wc-block-layout--is-loading .wc-block-components-product-image {
52
+ @include placeholder();
53
+ }
assets/js/atomic/blocks/product/price/block.js ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import classnames from 'classnames';
6
+ import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
7
+ import { getCurrencyFromPriceResponse } from '@woocommerce/base-utils';
8
+ import {
9
+ useInnerBlockLayoutContext,
10
+ useProductDataContext,
11
+ } from '@woocommerce/shared-context';
12
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+ import './style.scss';
17
+
18
+ /**
19
+ * Product Price Block Component.
20
+ *
21
+ * @param {Object} props Incoming props.
22
+ * @param {string} [props.className] CSS Class name for the component.
23
+ * @param {Object} [props.product] Optional product object. Product from context will be used if
24
+ * this is not provided.
25
+ * @return {*} The component.
26
+ */
27
+ const Block = ( { className, ...props } ) => {
28
+ const { parentClassName } = useInnerBlockLayoutContext();
29
+ const productDataContext = useProductDataContext();
30
+ const product = props.product || productDataContext.product;
31
+
32
+ if ( ! product ) {
33
+ return (
34
+ <div
35
+ className={ classnames(
36
+ className,
37
+ 'price',
38
+ 'wc-block-components-product-price',
39
+ `${ parentClassName }__product-price`
40
+ ) }
41
+ />
42
+ );
43
+ }
44
+
45
+ const prices = product.prices || {};
46
+ const currency = getCurrencyFromPriceResponse( prices );
47
+
48
+ return (
49
+ <div
50
+ className={ classnames(
51
+ className,
52
+ 'price',
53
+ 'wc-block-components-product-price',
54
+ `${ parentClassName }__product-price`
55
+ ) }
56
+ >
57
+ { hasPriceRange( prices ) ? (
58
+ <PriceRange
59
+ currency={ currency }
60
+ minAmount={ prices.price_range.min_amount }
61
+ maxAmount={ prices.price_range.max_amount }
62
+ />
63
+ ) : (
64
+ <Price
65
+ currency={ currency }
66
+ price={ prices.price }
67
+ regularPrice={ prices.regular_price }
68
+ />
69
+ ) }
70
+ </div>
71
+ );
72
+ };
73
+
74
+ const hasPriceRange = ( prices ) => {
75
+ return (
76
+ prices.price_range &&
77
+ prices.price_range.min_amount &&
78
+ prices.price_range.max_amount
79
+ );
80
+ };
81
+
82
+ const PriceRange = ( { currency, minAmount, maxAmount } ) => {
83
+ const { parentClassName } = useInnerBlockLayoutContext();
84
+
85
+ return (
86
+ <span
87
+ className={ classnames(
88
+ 'wc-block-components-product-price__value',
89
+ `${ parentClassName }__product-price__value`
90
+ ) }
91
+ >
92
+ <FormattedMonetaryAmount
93
+ currency={ currency }
94
+ value={ minAmount }
95
+ />
96
+ &nbsp;&mdash;&nbsp;
97
+ <FormattedMonetaryAmount
98
+ currency={ currency }
99
+ value={ maxAmount }
100
+ />
101
+ </span>
102
+ );
103
+ };
104
+
105
+ const Price = ( { currency, price, regularPrice } ) => {
106
+ const { parentClassName } = useInnerBlockLayoutContext();
107
+
108
+ return (
109
+ <>
110
+ { regularPrice !== price && (
111
+ <del
112
+ className={ classnames(
113
+ 'wc-block-components-product-price__regular',
114
+ `${ parentClassName }__product-price__regular`
115
+ ) }
116
+ >
117
+ <FormattedMonetaryAmount
118
+ currency={ currency }
119
+ value={ regularPrice }
120
+ />
121
+ </del>
122
+ ) }
123
+ <span
124
+ className={ classnames(
125
+ 'wc-block-components-product-price__value',
126
+ `${ parentClassName }__product-price__value`
127
+ ) }
128
+ >
129
+ <FormattedMonetaryAmount
130
+ currency={ currency }
131
+ value={ price }
132
+ />
133
+ </span>
134
+ </>
135
+ );
136
+ };
137
+
138
+ Block.propTypes = {
139
+ className: PropTypes.string,
140
+ product: PropTypes.object,
141
+ };
142
+
143
+ export default Block;
assets/js/atomic/blocks/product/price/edit.js ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import Block from './block';
5
+
6
+ export default ( { attributes } ) => {
7
+ return <Block { ...attributes } />;
8
+ };
assets/js/atomic/blocks/product/price/index.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerBlockType } from '@wordpress/blocks';
6
+ import { Icon, bill } from '@woocommerce/icons';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import sharedConfig from '../shared-config';
12
+ import edit from './edit';
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: <Icon srcElement={ bill } />,
22
+ foreground: '#96588a',
23
+ },
24
+ edit,
25
+ };
26
+
27
+ registerBlockType( 'woocommerce/product-price', {
28
+ ...sharedConfig,
29
+ ...blockConfig,
30
+ } );
assets/js/atomic/blocks/product/price/style.scss ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-layout {
2
+ .wc-block-components-product-price {
3
+ margin-top: 0;
4
+ margin-bottom: $gap-small;
5
+ display: block;
6
+
7
+ &__regular {
8
+ margin-right: 0.5em;
9
+ }
10
+ }
11
+ &--is-loading {
12
+ .wc-block-components-product-price::before {
13
+ @include placeholder();
14
+ content: ".";
15
+ display: inline-block;
16
+ width: 5em;
17
+ }
18
+ }
19
+ }
assets/js/atomic/blocks/product/rating/block.js ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import './style.scss';
16
+
17
+ /**
18
+ * Product Rating Block Component.
19
+ *
20
+ * @param {Object} props Incoming props.
21
+ * @param {string} [props.className] CSS Class name for the component.
22
+ * @param {Object} [props.product] Optional product object. Product from context will be used if
23
+ * this is not provided.
24
+ * @return {*} The component.
25
+ */
26
+ const Block = ( { className, ...props } ) => {
27
+ const { parentClassName } = useInnerBlockLayoutContext();
28
+ const productDataContext = useProductDataContext();
29
+ const product = props.product || productDataContext.product;
30
+ const rating = getAverageRating( product );
31
+
32
+ if ( ! rating ) {
33
+ return null;
34
+ }
35
+
36
+ const starStyle = {
37
+ width: ( rating / 5 ) * 100 + '%',
38
+ };
39
+
40
+ const ratingText = sprintf(
41
+ __( 'Rated %f out of 5', 'woo-gutenberg-products-block' ),
42
+ rating
43
+ );
44
+
45
+ return (
46
+ <div
47
+ className={ classnames(
48
+ className,
49
+ 'star-rating',
50
+ 'wc-block-components-product-rating',
51
+ `${ parentClassName }__product-rating`
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 || 0 );
71
+
72
+ return Number.isFinite( rating ) && rating > 0 ? rating : 0;
73
+ };
74
+
75
+ Block.propTypes = {
76
+ className: PropTypes.string,
77
+ product: PropTypes.object,
78
+ };
79
+
80
+ export default Block;
assets/js/atomic/blocks/product/rating/edit.js ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import Block from './block';
5
+
6
+ export default ( { attributes } ) => {
7
+ return <Block { ...attributes } />;
8
+ };
assets/js/atomic/blocks/product/rating/index.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerBlockType } from '@wordpress/blocks';
6
+ import { Icon, star } from '@woocommerce/icons';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import sharedConfig from '../shared-config';
12
+ import edit from './edit';
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: <Icon srcElement={ star } />,
22
+ foreground: '#96588a',
23
+ },
24
+ edit,
25
+ };
26
+
27
+ registerBlockType( 'woocommerce/product-rating', {
28
+ ...sharedConfig,
29
+ ...blockConfig,
30
+ } );
assets/js/atomic/blocks/product/rating/style.scss ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-layout {
2
+ .wc-block-components-product-rating {
3
+ display: block;
4
+ margin-top: 0;
5
+ margin-bottom: $gap-small;
6
+
7
+ &__stars {
8
+ overflow: hidden;
9
+ position: relative;
10
+ width: 5.3em;
11
+ height: 1.618em;
12
+ line-height: 1.618;
13
+ font-size: 1em;
14
+ /* stylelint-disable-next-line font-family-no-missing-generic-family-keyword */
15
+ font-family: star;
16
+ font-weight: 400;
17
+ margin: 0 auto;
18
+ text-align: left;
19
+
20
+ &::before {
21
+ content: "\53\53\53\53\53";
22
+ top: 0;
23
+ left: 0;
24
+ right: 0;
25
+ position: absolute;
26
+ opacity: 0.5;
27
+ color: #aaa;
28
+ white-space: nowrap;
29
+ }
30
+ span {
31
+ overflow: hidden;
32
+ top: 0;
33
+ left: 0;
34
+ right: 0;
35
+ position: absolute;
36
+ padding-top: 1.5em;
37
+ }
38
+ span::before {
39
+ content: "\53\53\53\53\53";
40
+ top: 0;
41
+ left: 0;
42
+ right: 0;
43
+ position: absolute;
44
+ color: #000;
45
+ white-space: nowrap;
46
+ }
47
+ }
48
+ }
49
+ .wc-block-single-product {
50
+ .wc-block-components-product-rating__stars {
51
+ margin: 0;
52
+ }
53
+ }
54
+ }
assets/js/atomic/blocks/product/sale-badge/block.js ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+ import './style.scss';
17
+
18
+ /**
19
+ * Product Sale Badge Block Component.
20
+ *
21
+ * @param {Object} props Incoming props.
22
+ * @param {string} [props.className] CSS Class name for the component.
23
+ * @param {string} [props.align] Alignment of the badge.
24
+ * @param {Object} [props.product] Optional product object. Product from context will be used if
25
+ * this is not provided.
26
+ * @return {*} The component.
27
+ */
28
+ const Block = ( { className, align, ...props } ) => {
29
+ const { parentClassName } = useInnerBlockLayoutContext();
30
+ const productDataContext = useProductDataContext();
31
+ const product = props.product || productDataContext.product;
32
+
33
+ if ( ! product || ! product.on_sale ) {
34
+ return null;
35
+ }
36
+
37
+ const alignClass =
38
+ typeof align === 'string'
39
+ ? `wc-block-components-product-sale-badge--align${ align }`
40
+ : '';
41
+
42
+ return (
43
+ <div
44
+ className={ classnames(
45
+ 'wc-block-components-product-sale-badge',
46
+ className,
47
+ alignClass,
48
+ `${ parentClassName }__product-onsale`
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
+ product: PropTypes.object,
66
+ };
67
+
68
+ export default Block;
assets/js/atomic/blocks/product/sale-badge/edit.js ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import Block from './block';
5
+
6
+ export default ( { attributes } ) => {
7
+ return <Block { ...attributes } />;
8
+ };
assets/js/atomic/blocks/product/sale-badge/index.js ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerBlockType } from '@wordpress/blocks';
6
+ import { Icon, tag } from '@woocommerce/icons';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import sharedConfig from '../shared-config';
12
+ import edit from './edit';
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: <Icon srcElement={ tag } />,
22
+ foreground: '#96588a',
23
+ },
24
+ supports: {
25
+ html: false,
26
+ },
27
+ edit,
28
+ };
29
+
30
+ registerBlockType( 'woocommerce/product-sale-badge', {
31
+ ...sharedConfig,
32
+ ...blockConfig,
33
+ } );
assets/js/atomic/blocks/{product-elements → product}/sale-badge/style.scss RENAMED
File without changes
assets/js/atomic/blocks/{product-elements → product}/save.js RENAMED
File without changes
assets/js/atomic/blocks/product/sku/block.js ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import './style.scss';
16
+
17
+ /**
18
+ * Product SKU Block Component.
19
+ *
20
+ * @param {Object} props Incoming props.
21
+ * @param {string} [props.className] CSS Class name for the component.
22
+ * @param {Object} [props.product] Optional product object. Product from context will be used if
23
+ * this is not provided.
24
+ * @return {*} The component.
25
+ */
26
+ const Block = ( { className, ...props } ) => {
27
+ const { parentClassName } = useInnerBlockLayoutContext();
28
+ const productDataContext = useProductDataContext();
29
+ const product = props.product || productDataContext.product || {};
30
+ const sku = product.sku || '';
31
+
32
+ if ( ! sku ) {
33
+ return null;
34
+ }
35
+
36
+ return (
37
+ <div
38
+ className={ classnames(
39
+ className,
40
+ 'wc-block-components-product-sku',
41
+ `${ parentClassName }__product-sku`
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
+ product: PropTypes.object,
53
+ };
54
+
55
+ export default Block;
assets/js/atomic/blocks/product/sku/edit.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import EditProductLink from '@woocommerce/block-components/edit-product-link';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import Block from './block';
10
+
11
+ export default ( { attributes } ) => {
12
+ return (
13
+ <>
14
+ <EditProductLink />
15
+ <Block { ...attributes } />
16
+ </>
17
+ );
18
+ };
assets/js/atomic/blocks/product/sku/index.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { Icon, barcode } from '@woocommerce/icons';
6
+ import { registerExperimentalBlockType } from '@woocommerce/block-settings';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import sharedConfig from '../shared-config';
12
+ import edit from './edit';
13
+
14
+ const blockConfig = {
15
+ title: __( 'Product SKU', 'woo-gutenberg-products-block' ),
16
+ description: __(
17
+ 'Display the SKU of a product.',
18
+ 'woo-gutenberg-products-block'
19
+ ),
20
+ icon: {
21
+ src: <Icon srcElement={ barcode } />,
22
+ foreground: '#96588a',
23
+ },
24
+ edit,
25
+ };
26
+
27
+ registerExperimentalBlockType( 'woocommerce/product-sku', {
28
+ ...sharedConfig,
29
+ ...blockConfig,
30
+ } );
assets/js/atomic/blocks/product/sku/style.scss ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ .wc-block-layout {
2
+ .wc-block-components-product-sku {
3
+ margin-top: 0;
4
+ margin-bottom: $gap-small;
5
+ display: block;
6
+ text-transform: uppercase;
7
+ @include font-size(small);
8
+ }
9
+ }
assets/js/atomic/blocks/product/stock-indicator/block.js ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 { isEmpty } from 'lodash';
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
+ * @param {Object} [props.product] Optional product object. Product from context will be used if
24
+ * this is not provided.
25
+ * @return {*} The component.
26
+ */
27
+ const Block = ( { className, ...props } ) => {
28
+ const { parentClassName } = useInnerBlockLayoutContext();
29
+ const productDataContext = useProductDataContext();
30
+ const product = props.product || productDataContext.product || {};
31
+
32
+ if ( isEmpty( product ) || ! product.is_purchasable ) {
33
+ return null;
34
+ }
35
+
36
+ const inStock = !! product.is_in_stock;
37
+ const lowStock = product.low_stock_remaining;
38
+ const isBackordered = product.is_on_backorder;
39
+
40
+ return (
41
+ <div
42
+ className={ classnames(
43
+ className,
44
+ 'wc-block-components-product-stock-indicator',
45
+ `${ parentClassName }__stock-indicator`,
46
+ {
47
+ 'wc-block-components-product-stock-indicator--in-stock': inStock,
48
+ 'wc-block-components-product-stock-indicator--out-of-stock': ! inStock,
49
+ 'wc-block-components-product-stock-indicator--low-stock': !! lowStock,
50
+ 'wc-block-components-product-stock-indicator--available-on-backorder': !! isBackordered,
51
+ }
52
+ ) }
53
+ >
54
+ { lowStock
55
+ ? lowStockText( lowStock )
56
+ : stockText( inStock, isBackordered ) }
57
+ </div>
58
+ );
59
+ };
60
+
61
+ const lowStockText = ( lowStock ) => {
62
+ return sprintf(
63
+ /* translators: %d stock amount (number of items in stock for product) */
64
+ __( '%d left in stock', 'woo-gutenberg-products-block' ),
65
+ lowStock
66
+ );
67
+ };
68
+
69
+ const stockText = ( inStock, isBackordered ) => {
70
+ if ( isBackordered ) {
71
+ return __( 'Available on backorder', 'woo-gutenberg-products-block' );
72
+ }
73
+
74
+ return inStock
75
+ ? __( 'In Stock', 'woo-gutenberg-products-block' )
76
+ : __( 'Out of Stock', 'woo-gutenberg-products-block' );
77
+ };
78
+
79
+ Block.propTypes = {
80
+ className: PropTypes.string,
81
+ product: PropTypes.object,
82
+ };
83
+
84
+ export default Block;
assets/js/atomic/blocks/product/stock-indicator/edit.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import EditProductLink from '@woocommerce/block-components/edit-product-link';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import Block from './block';
10
+
11
+ export default ( { attributes } ) => {
12
+ return (
13
+ <>
14
+ <EditProductLink />
15
+ <Block { ...attributes } />
16
+ </>
17
+ );
18
+ };
assets/js/atomic/blocks/product/stock-indicator/index.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerExperimentalBlockType } from '@woocommerce/block-settings';
6
+ import { Icon, box } from '@woocommerce/icons';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import sharedConfig from '../shared-config';
12
+ import edit from './edit';
13
+
14
+ const blockConfig = {
15
+ title: __( 'Product Stock Indicator', 'woo-gutenberg-products-block' ),
16
+ description: __(
17
+ 'Display product stock status.',
18
+ 'woo-gutenberg-products-block'
19
+ ),
20
+ icon: {
21
+ src: <Icon srcElement={ box } />,
22
+ foreground: '#96588a',
23
+ },
24
+ edit,
25
+ };
26
+
27
+ registerExperimentalBlockType( 'woocommerce/product-stock-indicator', {
28
+ ...sharedConfig,
29
+ ...blockConfig,
30
+ } );
assets/js/atomic/blocks/product/stock-indicator/style.scss ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-layout {
2
+ .wc-block-components-product-stock-indicator {
3
+ margin-top: 0;
4
+ margin-bottom: em($gap-small);
5
+ display: block;
6
+ @include font-size(small);
7
+
8
+ &--in-stock {
9
+ color: $valid-green;
10
+ }
11
+ &--out-of-stock {
12
+ color: $error-red;
13
+ }
14
+ &--low-stock,
15
+ &--available-on-backorder {
16
+ color: $notice-yellow;
17
+ }
18
+ }
19
+ }
assets/js/atomic/blocks/product/summary/block.js ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 { getSetting } from '@woocommerce/settings';
8
+ import {
9
+ useInnerBlockLayoutContext,
10
+ useProductDataContext,
11
+ } from '@woocommerce/shared-context';
12
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+ import './style.scss';
17
+
18
+ /**
19
+ * Product Summary Block Component.
20
+ *
21
+ * @param {Object} props Incoming props.
22
+ * @param {string} [props.className] CSS Class name for the component.
23
+ * @param {Object} [props.product] Optional product object. Product from context will be used if
24
+ * this is not provided.
25
+ * @return {*} The component.
26
+ */
27
+ const Block = ( { className, ...props } ) => {
28
+ const { parentClassName } = useInnerBlockLayoutContext();
29
+ const productDataContext = useProductDataContext();
30
+ const { product } = productDataContext || props;
31
+
32
+ if ( ! product ) {
33
+ return (
34
+ <div
35
+ className={ classnames(
36
+ className,
37
+ `wc-block-components-product-summary`
38
+ ) }
39
+ />
40
+ );
41
+ }
42
+
43
+ const source = product.short_description
44
+ ? product.short_description
45
+ : product.description;
46
+
47
+ if ( ! source ) {
48
+ return null;
49
+ }
50
+
51
+ const countType = getSetting( 'wordCountType', 'words' );
52
+
53
+ return (
54
+ <Summary
55
+ className={ classnames(
56
+ className,
57
+ `wc-block-components-product-summary`,
58
+ `${ parentClassName }__product-summary`
59
+ ) }
60
+ source={ source }
61
+ maxLength={ 150 }
62
+ countType={ countType }
63
+ />
64
+ );
65
+ };
66
+
67
+ Block.propTypes = {
68
+ className: PropTypes.string,
69
+ product: PropTypes.object,
70
+ };
71
+
72
+ export default Block;
assets/js/atomic/blocks/product/summary/edit.js ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import Block from './block';
5
+
6
+ export default ( { attributes } ) => {
7
+ return <Block { ...attributes } />;
8
+ };
assets/js/atomic/blocks/product/summary/index.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerBlockType } from '@wordpress/blocks';
6
+ import { Icon, notes } from '@woocommerce/icons';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import sharedConfig from '../shared-config';
12
+ import edit from './edit';
13
+
14
+ const blockConfig = {
15
+ title: __( 'Product Summary', 'woo-gutenberg-products-block' ),
16
+ description: __(
17
+ 'Display a short description about a product.',
18
+ 'woo-gutenberg-products-block'
19
+ ),
20
+ icon: {
21
+ src: <Icon srcElement={ notes } />,
22
+ foreground: '#96588a',
23
+ },
24
+ edit,
25
+ };
26
+
27
+ registerBlockType( 'woocommerce/product-summary', {
28
+ ...sharedConfig,
29
+ ...blockConfig,
30
+ } );
assets/js/atomic/blocks/product/summary/style.scss ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-layout .wc-block-components-product-summary {
2
+ margin-top: 0;
3
+ margin-bottom: $gap-small;
4
+ }
5
+
6
+ .wc-block-layout--is-loading .wc-block-components-product-summary::before {
7
+ @include placeholder();
8
+ content: ".";
9
+ display: block;
10
+ width: 100%;
11
+ height: 6em;
12
+ }
assets/js/atomic/blocks/product/tag-list/block.js ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+ import './style.scss';
17
+
18
+ /**
19
+ * Product Tag List Block Component.
20
+ *
21
+ * @param {Object} props Incoming props.
22
+ * @param {string} [props.className] CSS Class name for the component.
23
+ * @param {Object} [props.product] Optional product object. Product from context will be used if
24
+ * this is not provided.
25
+ * @return {*} The component.
26
+ */
27
+ const Block = ( { className, ...props } ) => {
28
+ const { parentClassName } = useInnerBlockLayoutContext();
29
+ const productDataContext = useProductDataContext();
30
+ const { product } = productDataContext || props || {};
31
+
32
+ if ( isEmpty( product ) || isEmpty( product.tags ) ) {
33
+ return null;
34
+ }
35
+
36
+ return (
37
+ <div
38
+ className={ classnames(
39
+ className,
40
+ 'wc-block-components-product-tag-list',
41
+ `${ parentClassName }__product-tag-list`
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
+ product: PropTypes.object,
63
+ };
64
+
65
+ export default Block;
assets/js/atomic/blocks/product/tag-list/edit.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { Disabled } from '@wordpress/components';
5
+ import EditProductLink from '@woocommerce/block-components/edit-product-link';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import Block from './block';
11
+
12
+ export default ( { attributes } ) => {
13
+ return (
14
+ <>
15
+ <EditProductLink />
16
+ <Disabled>
17
+ <Block { ...attributes } />
18
+ </Disabled>
19
+ </>
20
+ );
21
+ };
assets/js/atomic/blocks/product/tag-list/index.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { Icon, tag } from '@woocommerce/icons';
6
+ import { registerExperimentalBlockType } from '@woocommerce/block-settings';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import sharedConfig from '../shared-config';
12
+ import edit from './edit';
13
+
14
+ const blockConfig = {
15
+ title: __( 'Product Tag List', 'woo-gutenberg-products-block' ),
16
+ description: __(
17
+ 'Display a list of tags belonging to a product.',
18
+ 'woo-gutenberg-products-block'
19
+ ),
20
+ icon: {
21
+ src: <Icon srcElement={ tag } />,
22
+ foreground: '#96588a',
23
+ },
24
+ edit,
25
+ };
26
+
27
+ registerExperimentalBlockType( 'woocommerce/product-tag-list', {
28
+ ...sharedConfig,
29
+ ...blockConfig,
30
+ } );
assets/js/atomic/blocks/product/tag-list/style.scss ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-layout .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/title/attributes.js ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export const blockAttributes = {
2
+ headingLevel: {
3
+ type: 'number',
4
+ default: 2,
5
+ },
6
+ productLink: {
7
+ type: 'boolean',
8
+ default: true,
9
+ },
10
+ };
11
+
12
+ export default blockAttributes;
assets/js/atomic/blocks/product/title/block.js ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import classnames from 'classnames';
6
+ import { decodeEntities } from '@wordpress/html-entities';
7
+ import {
8
+ useInnerBlockLayoutContext,
9
+ useProductDataContext,
10
+ } from '@woocommerce/shared-context';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import './style.scss';
16
+
17
+ /**
18
+ * Product Title Block Component.
19
+ *
20
+ * @param {Object} props Incoming props.
21
+ * @param {string} [props.className] CSS Class name for the component.
22
+ * @param {number} [props.headingLevel] Heading level (h1, h2 etc)
23
+ * @param {boolean} [props.productLink] Whether or not to display a link to the product page.
24
+ * @param {Object} [props.product] Optional product object. Product from context will be used if
25
+ * this is not provided.
26
+ * @return {*} The component.
27
+ */
28
+ export const Block = ( {
29
+ className,
30
+ headingLevel = 2,
31
+ productLink = true,
32
+ ...props
33
+ } ) => {
34
+ const { parentClassName } = useInnerBlockLayoutContext();
35
+ const productDataContext = useProductDataContext();
36
+ const product = props.product || productDataContext.product;
37
+ const TagName = `h${ headingLevel }`;
38
+
39
+ if ( ! product ) {
40
+ return (
41
+ <TagName
42
+ // @ts-ignore
43
+ className={ classnames(
44
+ className,
45
+ 'wc-block-components-product-title',
46
+ `${ parentClassName }__product-title`
47
+ ) }
48
+ />
49
+ );
50
+ }
51
+
52
+ const productName = decodeEntities( product.name );
53
+
54
+ return (
55
+ // @ts-ignore
56
+ <TagName
57
+ className={ classnames(
58
+ className,
59
+ 'wc-block-components-product-title',
60
+ `${ parentClassName }__product-title`
61
+ ) }
62
+ >
63
+ { productLink ? (
64
+ <a href={ product.permalink } rel="nofollow">
65
+ { productName }
66
+ </a>
67
+ ) : (
68
+ productName
69
+ ) }
70
+ </TagName>
71
+ );
72
+ };
73
+
74
+ Block.propTypes = {
75
+ className: PropTypes.string,
76
+ product: PropTypes.object,
77
+ headingLevel: PropTypes.number,
78
+ productLink: PropTypes.bool,
79
+ };
80
+
81
+ export default Block;
assets/js/atomic/blocks/product/title/edit.js ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 HeadingToolbar from '@woocommerce/block-components/heading-toolbar';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import Block from './block';
13
+
14
+ export default ( { attributes, setAttributes } ) => {
15
+ const { headingLevel, productLink } = attributes;
16
+
17
+ return (
18
+ <>
19
+ <InspectorControls>
20
+ <PanelBody
21
+ title={ __( 'Content', 'woo-gutenberg-products-block' ) }
22
+ >
23
+ <p>{ __( 'Level', 'woo-gutenberg-products-block' ) }</p>
24
+ <HeadingToolbar
25
+ isCollapsed={ false }
26
+ minLevel={ 1 }
27
+ maxLevel={ 7 }
28
+ selectedLevel={ headingLevel }
29
+ onChange={ ( newLevel ) =>
30
+ setAttributes( { headingLevel: newLevel } )
31
+ }
32
+ />
33
+ <ToggleControl
34
+ label={ __(
35
+ 'Link to Product Page',
36
+ 'woo-gutenberg-products-block'
37
+ ) }
38
+ help={ __(
39
+ 'Links the image to the single product listing.',
40
+ 'woo-gutenberg-products-block'
41
+ ) }
42
+ checked={ productLink }
43
+ onChange={ () =>
44
+ setAttributes( {
45
+ productLink: ! productLink,
46
+ } )
47
+ }
48
+ />
49
+ </PanelBody>
50
+ </InspectorControls>
51
+ <Disabled>
52
+ <Block { ...attributes } />
53
+ </Disabled>
54
+ </>
55
+ );
56
+ };
assets/js/atomic/blocks/product/title/frontend.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { compose } from '@wordpress/compose';
5
+ import withFilteredAttributes from '@woocommerce/base-hocs/with-filtered-attributes';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import Block from './block';
11
+ import attributes from './attributes';
12
+
13
+ export default compose( withFilteredAttributes( attributes ) )( Block );
assets/js/atomic/blocks/product/title/index.js ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { registerBlockType } from '@wordpress/blocks';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import sharedConfig from '../shared-config';
11
+ import attributes from './attributes';
12
+ import edit from './edit';
13
+
14
+ const blockConfig = {
15
+ title: __( 'Product Title', 'woo-gutenberg-products-block' ),
16
+ description: __(
17
+ 'Display the name of a product.',
18
+ 'woo-gutenberg-products-block'
19
+ ),
20
+ icon: {
21
+ src: 'heading',
22
+ foreground: '#96588a',
23
+ },
24
+ attributes,
25
+ edit,
26
+ };
27
+
28
+ registerBlockType( 'woocommerce/product-title', {
29
+ ...sharedConfig,
30
+ ...blockConfig,
31
+ } );
assets/js/atomic/blocks/product/title/style.scss ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-layout {
2
+ .wc-block-components-product-title {
3
+ margin-top: 0;
4
+ margin-bottom: $gap-small;
5
+ }
6
+ .wc-block-grid .wc-block-components-product-title {
7
+ line-height: 1.2em;
8
+ font-weight: 700;
9
+ padding: 0;
10
+ color: inherit;
11
+ font-size: inherit;
12
+ display: block;
13
+ }
14
+ &--is-loading {
15
+ .wc-block-components-product-title::before {
16
+ @include placeholder();
17
+ content: ".";
18
+ display: inline-block;
19
+ width: 7em;
20
+ }
21
+ .wc-block-grid .wc-block-components-product-title::before {
22
+ width: 10em;
23
+ }
24
+ }
25
+ }
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/index.js CHANGED
@@ -1,5 +1,4 @@
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';
1
+ export * from './get-block-map.js';
2
+ export * from './create-blocks-from-template.js';
3
+ export * from './render-parent-block.js';
4
+ export * from './render-inner-blocks.js';
 
assets/js/atomic/utils/render-inner-blocks.js ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { cloneElement, isValidElement } from '@wordpress/element';
5
+ import parse from 'html-react-parser';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import { getBlockMap } from './get-block-map';
11
+
12
+ /**
13
+ * Replaces saved block HTML markup with Inner Block Components.
14
+ *
15
+ * @param {Object} props Render props.
16
+ * @param {Array} props.children Children/inner blocks to render.
17
+ * @param {string} props.blockName Parent Block Name used to get the block map and for keys.
18
+ * @param {number} [props.depth] Depth of inner blocks being rendered.
19
+ */
20
+ export const renderInnerBlocks = ( {
21
+ children,
22
+ blockName: parentBlockName,
23
+ depth = 1,
24
+ } ) => {
25
+ const blockMap = getBlockMap( parentBlockName );
26
+
27
+ return Array.from( children ).map( ( el, index ) => {
28
+ const componentProps = {
29
+ ...el.dataset,
30
+ key: `${ parentBlockName }_${ depth }_${ index }`,
31
+ };
32
+
33
+ const componentChildren =
34
+ el.children && el.children.length
35
+ ? renderInnerBlocks( {
36
+ children: el.children,
37
+ blockName: parentBlockName,
38
+ depth: depth + 1,
39
+ } )
40
+ : null;
41
+
42
+ const LayoutComponent =
43
+ componentProps.blockName && blockMap[ componentProps.blockName ]
44
+ ? blockMap[ componentProps.blockName ]
45
+ : null;
46
+
47
+ if ( ! LayoutComponent ) {
48
+ const element = parse( el.outerHTML );
49
+
50
+ if ( isValidElement( element ) ) {
51
+ return componentChildren
52
+ ? cloneElement( element, componentProps, componentChildren )
53
+ : cloneElement( element, componentProps );
54
+ }
55
+ return null;
56
+ }
57
+
58
+ return (
59
+ // eslint-disable-next-line react/jsx-key
60
+ <LayoutComponent { ...componentProps }>
61
+ { componentChildren }
62
+ </LayoutComponent>
63
+ );
64
+ } );
65
+ };
assets/js/atomic/utils/render-parent-block.js ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { renderFrontend } from '@woocommerce/base-utils';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { renderInnerBlocks } from './render-inner-blocks';
10
+
11
+ /**
12
+ * Renders a block component in the place of a specified set of selectors.
13
+ *
14
+ * @param {Object} props Render props.
15
+ * @param {Function} props.Block React component to use as a replacement.
16
+ * @param {string} props.selector CSS selector to match the elements to replace.
17
+ * @param {string} [props.blockName] Optional Block Name. Used for inner block component mapping.
18
+ * @param {Function} [props.getProps] Function to generate the props object for the block.
19
+ */
20
+ export const renderParentBlock = ( {
21
+ Block,
22
+ selector,
23
+ blockName = '',
24
+ getProps = () => {},
25
+ } ) => {
26
+ const getPropsWithChildren = ( el, i ) => {
27
+ const children =
28
+ el.children && el.children.length
29
+ ? renderInnerBlocks( {
30
+ blockName,
31
+ children: el.children,
32
+ } )
33
+ : null;
34
+ return { ...getProps( el, i ), children };
35
+ };
36
+ renderFrontend( {
37
+ Block,
38
+ selector,
39
+ getProps: getPropsWithChildren,
40
+ } );
41
+ };
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,11 +2,11 @@
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.',
@@ -14,7 +14,6 @@ const BlockError = ( {
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">
@@ -42,11 +41,6 @@ const BlockError = ( {
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>
52
  );
@@ -79,10 +73,6 @@ BlockError.propTypes = {
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 loading the content.',
14
  ),
15
  errorMessage,
16
  errorMessagePrefix = __( 'Error:', 'woo-gutenberg-products-block' ),
 
17
  } ) => {
18
  return (
19
  <div className="wc-block-error wc-block-components-error">
41
  { errorMessage }
42
  </p>
43
  ) }
 
 
 
 
 
44
  </div>
45
  </div>
46
  );
73
  * Text preceeding the error message.
74
  */
75
  errorMessagePrefix: PropTypes.string,
 
 
 
 
76
  };
77
 
78
  export default BlockError;
assets/js/base/components/block-error-boundary/index.js CHANGED
@@ -2,7 +2,7 @@
2
  * External dependencies
3
  */
4
  import PropTypes from 'prop-types';
5
- import { Component } from 'react';
6
 
7
  /**
8
  * Internal dependencies
@@ -20,10 +20,10 @@ class BlockErrorBoundary extends Component {
20
  ) {
21
  return {
22
  errorMessage: (
23
- <>
24
  <strong>{ error.status }</strong>:&nbsp;
25
  { error.statusText }
26
- </>
27
  ),
28
  hasError: true,
29
  };
@@ -39,15 +39,10 @@ class BlockErrorBoundary extends Component {
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 }
@@ -55,7 +50,6 @@ class BlockErrorBoundary extends Component {
55
  imageUrl={ imageUrl }
56
  text={ text }
57
  errorMessagePrefix={ errorMessagePrefix }
58
- button={ button }
59
  />
60
  );
61
  }
@@ -91,10 +85,6 @@ BlockErrorBoundary.propTypes = {
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 = {
2
  * External dependencies
3
  */
4
  import PropTypes from 'prop-types';
5
+ import { Component, Fragment } from 'react';
6
 
7
  /**
8
  * Internal dependencies
20
  ) {
21
  return {
22
  errorMessage: (
23
+ <Fragment>
24
  <strong>{ error.status }</strong>:&nbsp;
25
  { error.statusText }
26
+ </Fragment>
27
  ),
28
  hasError: true,
29
  };
39
  showErrorMessage,
40
  text,
41
  errorMessagePrefix,
 
 
42
  } = this.props;
43
  const { errorMessage, hasError } = this.state;
44
 
45
  if ( hasError ) {
 
 
 
46
  return (
47
  <BlockError
48
  errorMessage={ showErrorMessage ? errorMessage : null }
50
  imageUrl={ imageUrl }
51
  text={ text }
52
  errorMessagePrefix={ errorMessagePrefix }
 
53
  />
54
  );
55
  }
85
  * Text preceeding the error message.
86
  */
87
  errorMessagePrefix: PropTypes.string,
 
 
 
 
88
  };
89
 
90
  BlockErrorBoundary.defaultProps = {
assets/js/base/components/block-error-boundary/style.scss CHANGED
@@ -1,34 +1,36 @@
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-components-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-components-error__header {
12
  @include font-size(larger);
13
+ font-weight: bold;
14
  margin: 0;
 
15
  }
16
+
17
  .wc-block-components-error__image {
18
+ max-width: 25%;
 
19
  }
20
  .wc-block-components-error__text {
21
+ margin: 0;
 
 
 
22
  }
23
  .wc-block-components-error__message {
24
+ margin: 1em 0 0 0;
25
  font-style: italic;
 
 
26
  }
27
+
28
+ @include breakpoint( ">480px" ) {
29
+ .wc-block-components-error {
30
+ flex-direction: row;
31
+ }
32
+
33
+ .wc-block-components-error__image + .wc-block-components-error__content {
34
+ margin-left: $gap-large;
35
+ }
36
  }
assets/js/base/components/button/index.js ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { Button as WPButton } from 'wordpress-components';
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 that visually renders a button but semantically might be `<button>` or `<a>` depending on the props.
15
+ *
16
+ * @todo Update cart and checkout button component. Cart and checkout should use base/components/button instead of cart-checkout/button.
17
+ */
18
+ const Button = ( { className, showSpinner = false, children, ...props } ) => {
19
+ const buttonClassName = classNames(
20
+ 'wc-block-components-button',
21
+ className,
22
+ {
23
+ 'wc-block-components-button--loading': showSpinner,
24
+ }
25
+ );
26
+
27
+ return (
28
+ <WPButton className={ buttonClassName } { ...props }>
29
+ { showSpinner && (
30
+ <span
31
+ className="wc-block-components-button__spinner"
32
+ aria-hidden="true"
33
+ />
34
+ ) }
35
+ <span className="wc-block-components-button__text">
36
+ { children }
37
+ </span>
38
+ </WPButton>
39
+ );
40
+ };
41
+
42
+ Button.propTypes = {
43
+ className: PropTypes.string,
44
+ showSpinner: PropTypes.bool,
45
+ children: PropTypes.node,
46
+ };
47
+
48
+ export default Button;
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 CHANGED
@@ -4,8 +4,12 @@
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>;
 
 
 
 
4
  import Button from '../';
5
 
6
  export default {
7
+ title: 'WooCommerce Blocks/@base-components/cart-checkout/Button',
8
  component: Button,
9
  };
10
 
11
+ export const Default = () => (
12
+ <div className="wc-block-cart">
13
+ <Button>Buy now</Button>
14
+ </div>
15
+ );
assets/js/base/components/button/style.scss CHANGED
@@ -1,7 +1,7 @@
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;
@@ -18,7 +18,7 @@
18
  &:hover,
19
  &:focus,
20
  &:active {
21
- background-color: $gray-900;
22
  color: $white;
23
  }
24
 
@@ -29,7 +29,45 @@
29
  fill: currentColor;
30
  }
31
  }
32
- .wc-block-components-spinner + .wc-block-components-button__text {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  visibility: hidden;
34
  }
35
  }
 
 
 
 
 
 
 
 
 
 
1
  .wc-block-components-button:not(.is-link) {
2
  @include reset-typography();
3
  align-items: center;
4
+ background-color: $black;
5
  color: $white;
6
  display: inline-flex;
7
  font-weight: bold;
18
  &:hover,
19
  &:focus,
20
  &:active {
21
+ background-color: $black;
22
  color: $white;
23
  }
24
 
29
  fill: currentColor;
30
  }
31
  }
32
+ .wc-block-components-button__spinner {
33
+ width: 1em;
34
+ height: 1em;
35
+ position: absolute;
36
+ top: 50%;
37
+ left: 0;
38
+ width: 100%;
39
+ height: 100%;
40
+ margin-top: -0.5em;
41
+ color: inherit;
42
+ box-sizing: content-box;
43
+
44
+ &::after {
45
+ content: " ";
46
+ display: inline-block;
47
+ margin: 0 auto;
48
+ width: 1em;
49
+ height: 1em;
50
+ box-sizing: border-box;
51
+ transform-origin: 50% 50%;
52
+ transform: translateZ(0) scale(0.5);
53
+ backface-visibility: hidden;
54
+ border-radius: 50%;
55
+ border: 0.2em solid currentColor;
56
+ border-left-color: transparent;
57
+ animation: wc-block-components-button__spinner__animation 1s infinite linear;
58
+ }
59
+ }
60
+ .wc-block-components-button__spinner + .wc-block-components-button__text {
61
  visibility: hidden;
62
  }
63
  }
64
+
65
+ @keyframes wc-block-components-button__spinner__animation {
66
+ 0% {
67
+ animation-timing-function: cubic-bezier(0.5856, 0.0703, 0.4143, 0.9297);
68
+ transform: rotate(0deg);
69
+ }
70
+ 100% {
71
+ transform: rotate(360deg);
72
+ }
73
+ }
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/country-address-fields.js ADDED
@@ -0,0 +1,546 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /** @typedef { import('@woocommerce/type-defs/address-fields').CountryAddressFields } CountryAddressFields */
2
+ /** @typedef { import('@woocommerce/type-defs/address-fields').AddressFieldKey } AddressFieldKey */
3
+ /** @typedef { import('@woocommerce/type-defs/address-fields').AddressField } AddressField */
4
+
5
+ /**
6
+ * External dependencies
7
+ */
8
+ import { __ } from '@wordpress/i18n';
9
+
10
+ /**
11
+ * Used to render postcode before the city field.
12
+ *
13
+ * @type {Object <AddressFieldKey, AddressField>}
14
+ */
15
+ const postcodeBeforeCity = {
16
+ city: {
17
+ index: 9,
18
+ },
19
+ postcode: {
20
+ index: 7,
21
+ },
22
+ };
23
+
24
+ /**
25
+ * Used to make the state field optional.
26
+ *
27
+ * @type {Object <AddressFieldKey, AddressField>}
28
+ */
29
+ const optionalState = {
30
+ state: {
31
+ required: false,
32
+ },
33
+ };
34
+
35
+ /**
36
+ * Used to hide the state field.
37
+ *
38
+ * @type {Object <AddressFieldKey, AddressField>}
39
+ */
40
+ const hiddenState = {
41
+ state: {
42
+ required: false,
43
+ hidden: true,
44
+ },
45
+ };
46
+
47
+ /**
48
+ * Used to hide the postcode field.
49
+ *
50
+ * @type {Object <AddressFieldKey, AddressField>}
51
+ */
52
+ const hiddenPostcode = {
53
+ postcode: {
54
+ required: false,
55
+ hidden: true,
56
+ },
57
+ };
58
+
59
+ /**
60
+ * Country specific address field properties.
61
+ *
62
+ * @type {CountryAddressFields}
63
+ */
64
+ const countryAddressFields = {
65
+ AE: {
66
+ ...hiddenPostcode,
67
+ ...optionalState,
68
+ },
69
+ AF: hiddenState,
70
+ AO: {
71
+ ...hiddenPostcode,
72
+ state: {
73
+ label: __( 'Province', 'woo-gutenberg-products-block' ),
74
+ optionalLabel: __(
75
+ 'Province (optional)',
76
+ 'woo-gutenberg-products-block'
77
+ ),
78
+ },
79
+ },
80
+ AT: {
81
+ ...postcodeBeforeCity,
82
+ ...hiddenState,
83
+ },
84
+ AU: {
85
+ city: {
86
+ label: __( 'Suburb', 'woo-gutenberg-products-block' ),
87
+ optionalLabel: __(
88
+ 'Suburb (optional)',
89
+ 'woo-gutenberg-products-block'
90
+ ),
91
+ },
92
+ postcode: {
93
+ label: __( 'Postcode', 'woo-gutenberg-products-block' ),
94
+ optionalLabel: __(
95
+ 'Postcode (optional)',
96
+ 'woo-gutenberg-products-block'
97
+ ),
98
+ },
99
+ state: {
100
+ label: __( 'State', 'woo-gutenberg-products-block' ),
101
+ optionalLabel: __(
102
+ 'State (optional)',
103
+ 'woo-gutenberg-products-block'
104
+ ),
105
+ },
106
+ },
107
+ AX: {
108
+ ...postcodeBeforeCity,
109
+ ...hiddenState,
110
+ },
111
+ BD: {
112
+ postcode: {
113
+ required: false,
114
+ },
115
+ state: {
116
+ label: __( 'District', 'woo-gutenberg-products-block' ),
117
+ optionalLabel: __(
118
+ 'District (optional)',
119
+ 'woo-gutenberg-products-block'
120
+ ),
121
+ },
122
+ },
123
+ BE: {
124
+ ...postcodeBeforeCity,
125
+ ...hiddenState,
126
+ },
127
+ BH: {
128
+ postcode: {
129
+ required: false,
130
+ },
131
+ ...hiddenState,
132
+ },
133
+ BI: hiddenState,
134
+ BO: hiddenPostcode,
135
+ BS: hiddenPostcode,
136
+ CA: {
137
+ state: {
138
+ label: __( 'Province', 'woo-gutenberg-products-block' ),
139
+ optionalLabel: __(
140
+ 'Province (optional)',
141
+ 'woo-gutenberg-products-block'
142
+ ),
143
+ },
144
+ },
145
+ CH: {
146
+ ...postcodeBeforeCity,
147
+ state: {
148
+ label: __( 'Canton', 'woo-gutenberg-products-block' ),
149
+ optionalLabel: __(
150
+ 'Canton (optional)',
151
+ 'woo-gutenberg-products-block'
152
+ ),
153
+ required: false,
154
+ },
155
+ },
156
+ CL: {
157
+ city: {
158
+ require: true,
159
+ },
160
+ postcode: {
161
+ required: false,
162
+ },
163
+ state: {
164
+ label: __( 'Region', 'woo-gutenberg-products-block' ),
165
+ optionalLabel: __(
166
+ 'Region (optional)',
167
+ 'woo-gutenberg-products-block'
168
+ ),
169
+ },
170
+ },
171
+ CN: {
172
+ state: {
173
+ label: __( 'Province', 'woo-gutenberg-products-block' ),
174
+ optionalLabel: __(
175
+ 'Province (optional)',
176
+ 'woo-gutenberg-products-block'
177
+ ),
178
+ },
179
+ },
180
+ CO: {
181
+ postcode: {
182
+ required: false,
183
+ },
184
+ },
185
+ CZ: hiddenState,
186
+ DE: {
187
+ ...postcodeBeforeCity,
188
+ ...hiddenState,
189
+ },
190
+ DK: {
191
+ ...postcodeBeforeCity,
192
+ ...hiddenState,
193
+ },
194
+ EE: {
195
+ ...postcodeBeforeCity,
196
+ ...hiddenState,
197
+ },
198
+ ES: {
199
+ ...postcodeBeforeCity,
200
+ state: {
201
+ label: __( 'State', 'woo-gutenberg-products-block' ),
202
+ optionalLabel: __(
203
+ 'State (optional)',
204
+ 'woo-gutenberg-products-block'
205
+ ),
206
+ },
207
+ },
208
+ FI: {
209
+ ...postcodeBeforeCity,
210
+ ...hiddenState,
211
+ },
212
+ FR: {
213
+ ...postcodeBeforeCity,
214
+ ...hiddenState,
215
+ },
216
+ GB: {
217
+ postcode: {
218
+ label: __( 'Postcode', 'woo-gutenberg-products-block' ),
219
+ optionalLabel: __(
220
+ 'Postcode (optional)',
221
+ 'woo-gutenberg-products-block'
222
+ ),
223
+ },
224
+ state: {
225
+ label: __( 'County', 'woo-gutenberg-products-block' ),
226
+ optionalLabel: __(
227
+ 'County (optional)',
228
+ 'woo-gutenberg-products-block'
229
+ ),
230
+ },
231
+ },
232
+ GP: hiddenState,
233
+ GF: hiddenState,
234
+ GR: optionalState,
235
+ HK: {
236
+ postcode: {
237
+ required: false,
238
+ },
239
+ city: {
240
+ label: __( 'Town/District', 'woo-gutenberg-products-block' ),
241
+ optionalLabel: __(
242
+ 'Town/District (optional)',
243
+ 'woo-gutenberg-products-block'
244
+ ),
245
+ },
246
+ state: {
247
+ label: __( 'Region', 'woo-gutenberg-products-block' ),
248
+ optionalLabel: __(
249
+ 'Region (optional)',
250
+ 'woo-gutenberg-products-block'
251
+ ),
252
+ },
253
+ },
254
+ HU: {
255
+ state: {
256
+ label: __( 'County', 'woo-gutenberg-products-block' ),
257
+ optionalLabel: __(
258
+ 'County (optional)',
259
+ 'woo-gutenberg-products-block'
260
+ ),
261
+ },
262
+ },
263
+ ID: {
264
+ state: {
265
+ label: __( 'Province', 'woo-gutenberg-products-block' ),
266
+ optionalLabel: __(
267
+ 'Province (optional)',
268
+ 'woo-gutenberg-products-block'
269
+ ),
270
+ },
271
+ },
272
+ IE: {
273
+ postcode: {
274
+ label: __( 'Eircode', 'woo-gutenberg-products-block' ),
275
+ optionalLabel: __(
276
+ 'Eircode (optional)',
277
+ 'woo-gutenberg-products-block'
278
+ ),
279
+ required: false,
280
+ },
281
+ state: {
282
+ label: __( 'County', 'woo-gutenberg-products-block' ),
283
+ optionalLabel: __(
284
+ 'County (optional)',
285
+ 'woo-gutenberg-products-block'
286
+ ),
287
+ },
288
+ },
289
+ IS: {
290
+ ...postcodeBeforeCity,
291
+ ...hiddenState,
292
+ },
293
+ IL: {
294
+ ...postcodeBeforeCity,
295
+ ...hiddenState,
296
+ },
297
+ IM: hiddenState,
298
+ IT: {
299
+ ...postcodeBeforeCity,
300
+ state: {
301
+ label: __( 'Province', 'woo-gutenberg-products-block' ),
302
+ optionalLabel: __(
303
+ 'Province (optional)',
304
+ 'woo-gutenberg-products-block'
305
+ ),
306
+ },
307
+ },
308
+ JP: {
309
+ first_name: {
310
+ index: 2,
311
+ },
312
+ last_name: {
313
+ index: 1,
314
+ },
315
+ address_1: {
316
+ index: 7,
317
+ },
318
+ address_2: {
319
+ index: 8,
320
+ },
321
+ postcode: {
322
+ index: 4,
323
+ },
324
+ city: {
325
+ index: 6,
326
+ },
327
+ state: {
328
+ label: __( 'Prefecture', 'woo-gutenberg-products-block' ),
329
+ optionalLabel: __(
330
+ 'Prefecture (optional)',
331
+ 'woo-gutenberg-products-block'
332
+ ),
333
+ index: 5,
334
+ },
335
+ },
336
+ KR: hiddenState,
337
+ KW: hiddenState,
338
+ LB: hiddenState,
339
+ LI: {
340
+ ...postcodeBeforeCity,
341
+ state: {
342
+ label: __( 'Municipality', 'woo-gutenberg-products-block' ),
343
+ optionalLabel: __(
344
+ 'Municipality (optional)',
345
+ 'woo-gutenberg-products-block'
346
+ ),
347
+ required: false,
348
+ },
349
+ },
350
+ LK: hiddenState,
351
+ LU: hiddenState,
352
+ LV: {
353
+ state: {
354
+ label: __( 'Municipality', 'woo-gutenberg-products-block' ),
355
+ optionalLabel: __(
356
+ 'Municipality (optional)',
357
+ 'woo-gutenberg-products-block'
358
+ ),
359
+ required: false,
360
+ },
361
+ },
362
+ MQ: hiddenState,
363
+ MT: hiddenState,
364
+ MZ: {
365
+ ...hiddenPostcode,
366
+ state: {
367
+ label: __( 'Province', 'woo-gutenberg-products-block' ),
368
+ optionalLabel: __(
369
+ 'Province (optional)',
370
+ 'woo-gutenberg-products-block'
371
+ ),
372
+ },
373
+ },
374
+ NL: {
375
+ ...postcodeBeforeCity,
376
+ ...hiddenState,
377
+ },
378
+ NG: {
379
+ ...hiddenPostcode,
380
+ state: {
381
+ label: __( 'State', 'woo-gutenberg-products-block' ),
382
+ optionalLabel: __(
383
+ 'State (optional)',
384
+ 'woo-gutenberg-products-block'
385
+ ),
386
+ },
387
+ },
388
+ NO: {
389
+ ...postcodeBeforeCity,
390
+ ...hiddenState,
391
+ },
392
+ NP: {
393
+ postcode: {
394
+ required: false,
395
+ },
396
+ state: {
397
+ label: __( 'State', 'woo-gutenberg-products-block' ),
398
+ optionalLabel: __(
399
+ 'State (optional)',
400
+ 'woo-gutenberg-products-block'
401
+ ),
402
+ },
403
+ },
404
+ NZ: {
405
+ postcode: {
406
+ label: __( 'Postcode', 'woo-gutenberg-products-block' ),
407
+ optionalLabel: __(
408
+ 'Postcode (optional)',
409
+ 'woo-gutenberg-products-block'
410
+ ),
411
+ },
412
+ state: {
413
+ label: __( 'Region', 'woo-gutenberg-products-block' ),
414
+ optionalLabel: __(
415
+ 'Region (optional)',
416
+ 'woo-gutenberg-products-block'
417
+ ),
418
+ },
419
+ },
420
+ PL: {
421
+ ...postcodeBeforeCity,
422
+ ...hiddenState,
423
+ },
424
+ PT: hiddenState,
425
+ RE: hiddenState,
426
+ RO: {
427
+ state: {
428
+ label: __( 'County', 'woo-gutenberg-products-block' ),
429
+ optionalLabel: __(
430
+ 'County (optional)',
431
+ 'woo-gutenberg-products-block'
432
+ ),
433
+ },
434
+ },
435
+ RS: hiddenState,
436
+ SE: {
437
+ ...postcodeBeforeCity,
438
+ ...hiddenState,
439
+ },
440
+ SG: {
441
+ city: {
442
+ required: false,
443
+ },
444
+ ...hiddenState,
445
+ },
446
+ SK: {
447
+ ...postcodeBeforeCity,
448
+ ...hiddenState,
449
+ },
450
+ SI: {
451
+ ...postcodeBeforeCity,
452
+ ...hiddenState,
453
+ },
454
+ SR: {
455
+ ...hiddenPostcode,
456
+ },
457
+ ST: {
458
+ ...hiddenPostcode,
459
+ state: {
460
+ label: __( 'District', 'woo-gutenberg-products-block' ),
461
+ optionalLabel: __(
462
+ 'District (optional)',
463
+ 'woo-gutenberg-products-block'
464
+ ),
465
+ },
466
+ },
467
+ MD: {
468
+ state: {
469
+ label: __(
470
+ 'Municipality/District',
471
+ 'woo-gutenberg-products-block'
472
+ ),
473
+ optionalLabel: __(
474
+ 'Municipality/District (optional)',
475
+ 'woo-gutenberg-products-block'
476
+ ),
477
+ },
478
+ },
479
+ TR: {
480
+ ...postcodeBeforeCity,
481
+ state: {
482
+ label: __( 'Province', 'woo-gutenberg-products-block' ),
483
+ optionalLabel: __(
484
+ 'Province (optional)',
485
+ 'woo-gutenberg-products-block'
486
+ ),
487
+ },
488
+ },
489
+ UG: {
490
+ ...hiddenPostcode,
491
+ city: {
492
+ label: __( 'Town/Village', 'woo-gutenberg-products-block' ),
493
+ optionalLabel: __(
494
+ 'Town/Village (optional)',
495
+ 'woo-gutenberg-products-block'
496
+ ),
497
+ },
498
+ state: {
499
+ label: __( 'District', 'woo-gutenberg-products-block' ),
500
+ optionalLabel: __(
501
+ 'District (optional)',
502
+ 'woo-gutenberg-products-block'
503
+ ),
504
+ },
505
+ },
506
+ US: {
507
+ postcode: {
508
+ label: __( 'ZIP', 'woo-gutenberg-products-block' ),
509
+ optionalLabel: __(
510
+ 'ZIP (optional)',
511
+ 'woo-gutenberg-products-block'
512
+ ),
513
+ },
514
+ state: {
515
+ label: __( 'State', 'woo-gutenberg-products-block' ),
516
+ optionalLabel: __(
517
+ 'State (optional)',
518
+ 'woo-gutenberg-products-block'
519
+ ),
520
+ },
521
+ },
522
+ VN: {
523
+ city: {
524
+ index: 8,
525
+ },
526
+ postcode: {
527
+ index: 7,
528
+ required: false,
529
+ },
530
+ ...hiddenState,
531
+ },
532
+ WS: hiddenPostcode,
533
+ YT: hiddenState,
534
+ ZA: {
535
+ state: {
536
+ label: __( 'Province', 'woo-gutenberg-products-block' ),
537
+ optionalLabel: __(
538
+ 'Province (optional)',
539
+ 'woo-gutenberg-products-block'
540
+ ),
541
+ },
542
+ },
543
+ ZW: hiddenPostcode,
544
+ };
545
+
546
+ export default countryAddressFields;
assets/js/base/components/cart-checkout/address-form/default-address-fields.js ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /** @typedef { import('@woocommerce/type-defs/address-fields').AddressField } AddressField */
2
+
3
+ /**
4
+ * External dependencies
5
+ */
6
+ import { __ } from '@wordpress/i18n';
7
+
8
+ /**
9
+ * Default address field properties.
10
+ *
11
+ * @property {AddressField} first_name Customer first name.
12
+ * @property {AddressField} last_name Customer last name.
13
+ * @property {AddressField} company Company name.
14
+ * @property {AddressField} address_1 Street address.
15
+ * @property {AddressField} address_2 Second line of address.
16
+ * @property {AddressField} country Country code.
17
+ * @property {AddressField} city City name.
18
+ * @property {AddressField} state State name or code.
19
+ * @property {AddressField} postcode Postal code.
20
+ */
21
+ const AddressFields = {
22
+ first_name: {
23
+ label: __( 'First name', 'woo-gutenberg-products-block' ),
24
+ optionalLabel: __(
25
+ 'First name (optional)',
26
+ 'woo-gutenberg-products-block'
27
+ ),
28
+ autocomplete: 'given-name',
29
+ required: true,
30
+ hidden: false,
31
+ index: 1,
32
+ },
33
+ last_name: {
34
+ label: __( 'Last name', 'woo-gutenberg-products-block' ),
35
+ optionalLabel: __(
36
+ 'Last name (optional)',
37
+ 'woo-gutenberg-products-block'
38
+ ),
39
+ autocomplete: 'family-name',
40
+ required: true,
41
+ hidden: false,
42
+ index: 2,
43
+ },
44
+ company: {
45
+ label: __( 'Company', 'woo-gutenberg-products-block' ),
46
+ optionalLabel: __(
47
+ 'Company (optional)',
48
+ 'woo-gutenberg-products-block'
49
+ ),
50
+ autocomplete: 'organization',
51
+ required: false,
52
+ hidden: false,
53
+ index: 3,
54
+ },
55
+ address_1: {
56
+ label: __( 'Address', 'woo-gutenberg-products-block' ),
57
+ optionalLabel: __(
58
+ 'Address (optional)',
59
+ 'woo-gutenberg-products-block'
60
+ ),
61
+ autocomplete: 'address-line1',
62
+ required: true,
63
+ hidden: false,
64
+ index: 4,
65
+ },
66
+ address_2: {
67
+ label: __( 'Apartment, suite, etc.', 'woo-gutenberg-products-block' ),
68
+ optionalLabel: __(
69
+ 'Apartment, suite, etc. (optional)',
70
+ 'woo-gutenberg-products-block'
71
+ ),
72
+ autocomplete: 'address-line2',
73
+ required: false,
74
+ hidden: false,
75
+ index: 5,
76
+ },
77
+ country: {
78
+ label: __( 'Country/Region', 'woo-gutenberg-products-block' ),
79
+ optionalLabel: __(
80
+ 'Country/Region (optional)',
81
+ 'woo-gutenberg-products-block'
82
+ ),
83
+ autocomplete: 'country',
84
+ required: true,
85
+ hidden: false,
86
+ index: 6,
87
+ },
88
+ city: {
89
+ label: __( 'City', 'woo-gutenberg-products-block' ),
90
+ optionalLabel: __( 'City (optional)', 'woo-gutenberg-products-block' ),
91
+ autocomplete: 'address-level2',
92
+ required: true,
93
+ hidden: false,
94
+ index: 7,
95
+ },
96
+ state: {
97
+ label: __( 'State/County', 'woo-gutenberg-products-block' ),
98
+ optionalLabel: __(
99
+ 'State/County (optional)',
100
+ 'woo-gutenberg-products-block'
101
+ ),
102
+ autocomplete: 'address-level1',
103
+ required: true,
104
+ hidden: false,
105
+ index: 8,
106
+ },
107
+ postcode: {
108
+ label: __( 'Postal code', 'woo-gutenberg-products-block' ),
109
+ optionalLabel: __(
110
+ 'Postal code (optional)',
111
+ 'woo-gutenberg-products-block'
112
+ ),
113
+ autocomplete: 'postal-code',
114
+ required: true,
115
+ hidden: false,
116
+ index: 9,
117
+ },
118
+ };
119
+
120
+ export default AddressFields;
assets/js/base/components/cart-checkout/address-form/index.js ADDED
@@ -0,0 +1,209 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 } from '@wordpress/element';
16
+ import { __ } from '@wordpress/i18n';
17
+ import { withInstanceId } from '@woocommerce/base-hocs/with-instance-id';
18
+
19
+ /**
20
+ * Internal dependencies
21
+ */
22
+ import defaultAddressFields from './default-address-fields';
23
+ import countryAddressFields from './country-address-fields';
24
+
25
+ // If it's the shipping address form and the user starts entering address
26
+ // values without having set the country first, show an error.
27
+ const validateShippingCountry = (
28
+ values,
29
+ setValidationErrors,
30
+ clearValidationError,
31
+ hasValidationError
32
+ ) => {
33
+ if (
34
+ ! hasValidationError &&
35
+ ! values.country &&
36
+ ( values.city || values.state || values.postcode )
37
+ ) {
38
+ setValidationErrors( {
39
+ 'shipping-missing-country': {
40
+ message: __(
41
+ 'Please select a country to calculate rates.',
42
+ 'woo-gutenberg-products-block'
43
+ ),
44
+ hidden: false,
45
+ },
46
+ } );
47
+ }
48
+ if ( hasValidationError && values.country ) {
49
+ clearValidationError( 'shipping-missing-country' );
50
+ }
51
+ };
52
+
53
+ /**
54
+ * Checkout address form.
55
+ */
56
+ const AddressForm = ( {
57
+ id,
58
+ fields = Object.keys( defaultAddressFields ),
59
+ fieldConfig = {},
60
+ instanceId,
61
+ onChange,
62
+ type = 'shipping',
63
+ values,
64
+ } ) => {
65
+ const {
66
+ getValidationError,
67
+ setValidationErrors,
68
+ clearValidationError,
69
+ } = useValidationContext();
70
+ const countryLocale = countryAddressFields[ values.country ] || {};
71
+ const addressFields = fields.map( ( field ) => ( {
72
+ key: field,
73
+ ...defaultAddressFields[ field ],
74
+ ...countryLocale[ field ],
75
+ ...fieldConfig[ field ],
76
+ } ) );
77
+ const sortedAddressFields = addressFields.sort(
78
+ ( a, b ) => a.index - b.index
79
+ );
80
+ const countryValidationError =
81
+ getValidationError( 'shipping-missing-country' ) || {};
82
+ useEffect( () => {
83
+ if ( type === 'shipping' ) {
84
+ validateShippingCountry(
85
+ values,
86
+ setValidationErrors,
87
+ clearValidationError,
88
+ countryValidationError.message &&
89
+ ! countryValidationError.hidden
90
+ );
91
+ }
92
+ }, [
93
+ values,
94
+ countryValidationError,
95
+ setValidationErrors,
96
+ clearValidationError,
97
+ type,
98
+ ] );
99
+
100
+ id = id || instanceId;
101
+
102
+ return (
103
+ <div id={ id } className="wc-block-components-address-form">
104
+ { sortedAddressFields.map( ( field ) => {
105
+ if ( field.hidden ) {
106
+ return null;
107
+ }
108
+
109
+ if ( field.key === 'country' ) {
110
+ const Tag =
111
+ type === 'shipping'
112
+ ? ShippingCountryInput
113
+ : BillingCountryInput;
114
+ return (
115
+ <Tag
116
+ key={ field.key }
117
+ id={ `${ id }-${ field.key }` }
118
+ label={
119
+ field.required
120
+ ? field.label
121
+ : field.optionalLabel
122
+ }
123
+ value={ values.country }
124
+ autoComplete={ field.autocomplete }
125
+ onChange={ ( newValue ) =>
126
+ onChange( {
127
+ ...values,
128
+ country: newValue,
129
+ state: '',
130
+ city: '',
131
+ postcode: '',
132
+ } )
133
+ }
134
+ errorId={
135
+ type === 'shipping'
136
+ ? 'shipping-missing-country'
137
+ : null
138
+ }
139
+ errorMessage={ field.errorMessage }
140
+ required={ field.required }
141
+ />
142
+ );
143
+ }
144
+
145
+ if ( field.key === 'state' ) {
146
+ const Tag =
147
+ type === 'shipping'
148
+ ? ShippingStateInput
149
+ : BillingStateInput;
150
+ return (
151
+ <Tag
152
+ key={ field.key }
153
+ id={ `${ id }-${ field.key }` }
154
+ country={ values.country }
155
+ label={
156
+ field.required
157
+ ? field.label
158
+ : field.optionalLabel
159
+ }
160
+ value={ values.state }
161
+ autoComplete={ field.autocomplete }
162
+ onChange={ ( newValue ) =>
163
+ onChange( {
164
+ ...values,
165
+ state: newValue,
166
+ } )
167
+ }
168
+ errorMessage={ field.errorMessage }
169
+ required={ field.required }
170
+ />
171
+ );
172
+ }
173
+
174
+ return (
175
+ <ValidatedTextInput
176
+ key={ field.key }
177
+ id={ `${ id }-${ field.key }` }
178
+ className={ `wc-block-components-address-form__${ field.key }` }
179
+ label={
180
+ field.required ? field.label : field.optionalLabel
181
+ }
182
+ value={ values[ field.key ] }
183
+ autoComplete={ field.autocomplete }
184
+ onChange={ ( newValue ) =>
185
+ onChange( {
186
+ ...values,
187
+ [ field.key ]: newValue,
188
+ } )
189
+ }
190
+ errorMessage={ field.errorMessage }
191
+ required={ field.required }
192
+ />
193
+ );
194
+ } ) }
195
+ </div>
196
+ );
197
+ };
198
+
199
+ AddressForm.propTypes = {
200
+ onChange: PropTypes.func.isRequired,
201
+ values: PropTypes.object.isRequired,
202
+ fields: PropTypes.arrayOf(
203
+ PropTypes.oneOf( Object.keys( defaultAddressFields ) )
204
+ ),
205
+ fieldConfig: PropTypes.object,
206
+ type: PropTypes.oneOf( [ 'billing', 'shipping' ] ),
207
+ };
208
+
209
+ 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/button/index.js ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { Button as WPButton } from 'wordpress-components';
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 that visually renders a button but semantically might be `<button>` or `<a>` depending on the props.
15
+ */
16
+ const Button = ( { className, showSpinner = false, children, ...props } ) => {
17
+ const buttonClassName = classNames(
18
+ 'wc-block-components-button',
19
+ className,
20
+ {
21
+ 'wc-block-components-button--loading': showSpinner,
22
+ }
23
+ );
24
+
25
+ return (
26
+ <WPButton className={ buttonClassName } { ...props }>
27
+ { showSpinner && (
28
+ <span
29
+ className="wc-block-components-button__spinner"
30
+ aria-hidden="true"
31
+ />
32
+ ) }
33
+ <span className="wc-block-components-button__text">
34
+ { children }
35
+ </span>
36
+ </WPButton>
37
+ );
38
+ };
39
+
40
+ Button.propTypes = {
41
+ className: PropTypes.string,
42
+ showSpinner: PropTypes.bool,
43
+ children: PropTypes.node,
44
+ };
45
+
46
+ export default Button;
assets/js/base/components/cart-checkout/button/stories/index.js ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import Button from '../';
5
+
6
+ export default {
7
+ title: 'WooCommerce Blocks/@base-components/cart-checkout/Button',
8
+ component: Button,
9
+ };
10
+
11
+ export const Default = () => (
12
+ <div className="wc-block-cart">
13
+ <Button>Buy now</Button>
14
+ </div>
15
+ );
assets/js/base/components/cart-checkout/button/style.scss ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-components-button:not(.is-link) {
2
+ @include reset-typography();
3
+ align-items: center;
4
+ background-color: $black;
5
+ color: $white;
6
+ display: flex;
7
+ font-weight: bold;
8
+ min-height: 3em;
9
+ justify-content: center;
10
+ line-height: 1;
11
+ padding: 0 $gap-small;
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: $black;
22
+ color: $white;
23
+ }
24
+
25
+ .wc-block-components-button__text {
26
+ display: block;
27
+ }
28
+ .wc-block-components-button__spinner {
29
+ width: 1em;
30
+ height: 1em;
31
+ position: absolute;
32
+ top: 50%;
33
+ left: 0;
34
+ width: 100%;
35
+ height: 100%;
36
+ margin-top: -0.5em;
37
+ color: inherit;
38
+ box-sizing: content-box;
39
+
40
+ &::after {
41
+ content: " ";
42
+ display: inline-block;
43
+ margin: 0 auto;
44
+ width: 1em;
45
+ height: 1em;
46
+ box-sizing: border-box;
47
+ transform-origin: 50% 50%;
48
+ transform: translateZ(0) scale(0.5);
49
+ backface-visibility: hidden;
50
+ border-radius: 50%;
51
+ border: 0.2em solid currentColor;
52
+ border-left-color: transparent;
53
+ animation: wc-block-components-button__spinner__animation 1s infinite linear;
54
+ }
55
+ }
56
+ .wc-block-components-button__spinner + .wc-block-components-button__text {
57
+ visibility: hidden;
58
+ }
59
+ }
60
+
61
+ @keyframes wc-block-components-button__spinner__animation {
62
+ 0% {
63
+ animation-timing-function: cubic-bezier(0.5856, 0.0703, 0.4143, 0.9297);
64
+ transform: rotate(0deg);
65
+ }
66
+ 100% {
67
+ transform: rotate(360deg);
68
+ }
69
+ }
assets/js/base/components/cart-checkout/form-step/index.js CHANGED
@@ -35,37 +35,22 @@ const FormStep = ( {
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">
@@ -76,7 +61,7 @@ const FormStep = ( {
76
  { children }
77
  </div>
78
  </div>
79
- </Element>
80
  );
81
  };
82
 
@@ -86,7 +71,6 @@ FormStep.propTypes = {
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,
35
  description,
36
  children,
37
  disabled = false,
 
38
  stepHeadingContent = () => {},
39
  } ) => {
 
 
 
 
40
  return (
41
+ <fieldset
42
  className={ classnames(
43
  className,
44
+ 'wc-block-components-checkout-step'
 
 
 
 
45
  ) }
46
  id={ id }
47
  disabled={ disabled }
48
  >
49
+ <legend className="screen-reader-text">{ legend || title }</legend>
50
+ <StepHeading
51
+ title={ title }
52
+ stepHeadingContent={ stepHeadingContent() }
53
+ />
 
 
 
 
 
 
54
  <div className="wc-block-components-checkout-step__container">
55
  { !! description && (
56
  <p className="wc-block-components-checkout-step__description">
61
  { children }
62
  </div>
63
  </div>
64
+ </fieldset>
65
  );
66
  };
67
 
71
  title: PropTypes.string,
72
  description: PropTypes.string,
73
  children: PropTypes.node,
 
74
  stepHeadingContent: PropTypes.func,
75
  disabled: PropTypes.bool,
76
  legend: PropTypes.string,
assets/js/base/components/cart-checkout/form-step/style.scss CHANGED
@@ -1,8 +1,8 @@
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;
@@ -12,20 +12,6 @@
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 {
@@ -36,6 +22,10 @@
36
  padding-bottom: em($gap-large);
37
  }
38
 
 
 
 
 
39
  .wc-block-components-checkout-step__heading {
40
  display: flex;
41
  justify-content: space-between;
@@ -43,8 +33,6 @@
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 {
@@ -57,6 +45,8 @@
57
 
58
  .wc-block-components-checkout-step__heading-content {
59
  @include font-size(smaller);
 
 
60
 
61
  a {
62
  font-weight: bold;
@@ -70,28 +60,30 @@
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
  }
1
+ .wc-block-components-checkout-form {
2
  counter-reset: checkout-step;
3
  }
4
 
5
+ .wc-block-components-checkout-form fieldset.wc-block-components-checkout-step {
6
  position: relative;
7
  border: none;
8
  padding: 0 0 0 $gap-larger;
12
  .is-large & {
13
  padding-right: $gap-large;
14
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  }
16
 
17
  .wc-block-components-checkout-step__container {
22
  padding-bottom: em($gap-large);
23
  }
24
 
25
+ .wc-block-components-checkout-form fieldset.wc-block-components-checkout-step:disabled {
26
+ opacity: 0.6;
27
+ }
28
+
29
  .wc-block-components-checkout-step__heading {
30
  display: flex;
31
  justify-content: space-between;
33
  flex-wrap: wrap;
34
  margin: em($gap-small) 0 em($gap);
35
  position: relative;
 
 
36
  }
37
 
38
  .wc-block-components-checkout-step:first-child .wc-block-components-checkout-step__heading {
45
 
46
  .wc-block-components-checkout-step__heading-content {
47
  @include font-size(smaller);
48
+ position: absolute;
49
+ right: 0;
50
 
51
  a {
52
  font-weight: bold;
60
  margin-bottom: $gap;
61
  }
62
 
63
+ .wc-block-components-checkout-step__title::before {
64
+ @include reset-box();
65
+ background: transparent;
66
+ counter-increment: checkout-step;
67
+ content: "\00a0" counter(checkout-step) ".";
68
+ content: "\00a0" counter(checkout-step) "." / "";
69
+ position: absolute;
70
+ width: $gap-larger;
71
+ left: -$gap-larger/2;
72
+ top: 0;
73
+ text-align: center;
74
+ transform: translateX(-50%);
75
+ }
 
76
 
77
+ .wc-block-components-checkout-step__container::after {
78
+ content: "";
79
+ height: 100%;
80
+ border-left: 1px solid;
81
+ opacity: 0.3;
82
+ position: absolute;
83
+ left: -$gap-larger/2;
84
+ top: 0;
85
+ }
86
+
87
+ .wc-block-components-checkout-step:last-child .wc-block-components-checkout-step__container::after {
88
+ content: none;
89
  }
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/form/index.js ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import classnames from 'classnames';
5
+ import PropTypes from 'prop-types';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import './style.scss';
11
+
12
+ const CheckoutForm = ( {
13
+ className,
14
+ children,
15
+ onSubmit = ( event ) => void event,
16
+ } ) => {
17
+ const formOnSubmit = ( event ) => {
18
+ event.preventDefault();
19
+ onSubmit( event );
20
+ };
21
+ return (
22
+ <form
23
+ className={ classnames(
24
+ 'wc-block-components-checkout-form',
25
+ className
26
+ ) }
27
+ onSubmit={ formOnSubmit }
28
+ >
29
+ { children }
30
+ </form>
31
+ );
32
+ };
33
+
34
+ CheckoutForm.propTypes = {
35
+ className: PropTypes.string,
36
+ children: PropTypes.node,
37
+ onSubmit: PropTypes.func,
38
+ };
39
+
40
+ export default CheckoutForm;
assets/js/base/components/cart-checkout/form/style.scss ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ .wc-block-components-checkout-form {
2
+ margin: 0;
3
+ max-width: 100%;
4
+ }
assets/js/base/components/cart-checkout/index.js CHANGED
@@ -1,20 +1,22 @@
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';
1
+ export { default as AddressForm } from './address-form';
2
+ export { default as Button } from './button';
3
+ export { default as CheckoutForm } from './form';
4
  export { default as FormStep } from './form-step';
5
  export { default as OrderSummary } from './order-summary';
6
  export { default as PlaceOrderButton } from './place-order-button';
7
  export { default as Policies } from './policies';
 
 
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 ProductName } from './product-name';
13
+ export { default as ProductPrice } from './product-price';
14
  export { default as ProductSaleBadge } from './product-sale-badge';
15
+ export { default as ProductVariationData } from './product-variation-data';
16
  export { default as ReturnToCartButton } from './return-to-cart-button';
17
  export { default as ShippingCalculator } from './shipping-calculator';
18
  export { default as ShippingLocation } from './shipping-location';
19
  export { default as ShippingRatesControl } from './shipping-rates-control';
 
20
  export { default as PaymentMethodIcons } from './payment-method-icons';
21
  export { default as PaymentMethodLabel } from './payment-method-label';
22
+ export * from './totals/index.js';
assets/js/base/components/cart-checkout/order-summary/index.js CHANGED
@@ -4,7 +4,7 @@
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
@@ -23,7 +23,6 @@ const OrderSummary = ( { cartItems = [] } ) => {
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' ) }
4
  import { __ } from '@wordpress/i18n';
5
  import PropTypes from 'prop-types';
6
  import { useContainerWidthContext } from '@woocommerce/base-context';
7
+ import Panel from '@woocommerce/base-components/panel';
8
 
9
  /**
10
  * Internal dependencies
23
  <Panel
24
  className="wc-block-components-order-summary"
25
  initialOpen={ isLarge }
 
26
  title={
27
  <span className="wc-block-components-order-summary__button-text">
28
  { __( 'Order summary', 'woo-gutenberg-products-block' ) }
assets/js/base/components/cart-checkout/order-summary/order-summary-item.js CHANGED
@@ -2,111 +2,39 @@
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">
@@ -124,43 +52,21 @@ const OrderSummaryItem = ( { cartItem } ) => {
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
  };
2
  * External dependencies
3
  */
4
  import { __, sprintf } from '@wordpress/i18n';
5
+ import { getCurrency } from '@woocommerce/base-utils';
6
  import Label from '@woocommerce/base-components/label';
 
 
 
7
  import {
8
+ ProductImage,
9
+ ProductLowStockBadge,
10
+ ProductMetadata,
11
+ ProductName,
12
+ ProductPrice,
13
+ } from '@woocommerce/base-components/cart-checkout';
14
  import PropTypes from 'prop-types';
15
  import Dinero from 'dinero.js';
 
 
 
 
 
 
 
 
 
 
 
16
 
17
  const OrderSummaryItem = ( { cartItem } ) => {
18
  const {
19
  images,
20
  low_stock_remaining: lowStockRemaining = null,
21
+ name,
 
22
  permalink,
23
  prices,
24
  quantity,
25
  short_description: shortDescription,
26
  description: fullDescription,
 
27
  variation,
 
 
28
  } = cartItem;
29
 
30
+ const currency = getCurrency( prices );
31
+ const linePrice = Dinero( {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  amount: parseInt( prices.raw_prices.price, 10 ),
33
  precision: parseInt( prices.raw_prices.precision, 10 ),
34
  } )
35
+ .multiply( quantity )
36
+ .convertPrecision( currency.minorUnit )
37
  .getAmount();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
  return (
40
  <div className="wc-block-components-order-summary-item">
52
  <ProductImage image={ images.length ? images[ 0 ] : {} } />
53
  </div>
54
  <div className="wc-block-components-order-summary-item__description">
55
+ <div className="wc-block-components-order-summary-item__header">
56
+ <ProductName permalink={ permalink } name={ name } />
57
+ <ProductPrice
58
+ className="wc-block-components-order-summary-item__total-price"
59
+ currency={ currency }
60
+ value={ linePrice }
61
+ />
62
+ </div>
63
+ <ProductLowStockBadge lowStockRemaining={ lowStockRemaining } />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  <ProductMetadata
65
  shortDescription={ shortDescription }
66
  fullDescription={ fullDescription }
 
67
  variation={ variation }
68
  />
69
  </div>
 
 
 
 
 
 
 
70
  </div>
71
  );
72
  };
assets/js/base/components/cart-checkout/order-summary/style.scss CHANGED
@@ -1,12 +1,7 @@
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
 
@@ -17,16 +12,10 @@
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;
@@ -36,10 +25,6 @@
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,
@@ -50,6 +35,7 @@
50
 
51
  .wc-block-components-order-summary-item__image {
52
  width: #{$gap-large * 2};
 
53
  padding-bottom: $gap;
54
  position: relative;
55
 
@@ -60,6 +46,7 @@
60
  }
61
 
62
  .wc-block-components-order-summary-item__quantity {
 
63
  align-items: center;
64
  background: #fff;
65
  border: 2px solid;
@@ -74,7 +61,7 @@
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;
@@ -82,8 +69,9 @@
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 {
@@ -92,13 +80,8 @@
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
  }
1
  .wc-block-components-order-summary {
2
+ .wc-blocks-components-panel__button {
 
 
3
  margin-top: 0;
4
+ padding-top: 0;
 
 
 
5
  }
6
  }
7
 
12
 
13
  .wc-block-components-order-summary-item {
14
  @include with-translucent-border(0 0 1px);
15
+ display: table-row;
 
16
  padding-bottom: 1px;
 
17
  width: 100%;
18
 
 
 
 
 
19
  &:last-child {
20
  > div {
21
  padding-bottom: 0;
25
  display: none;
26
  }
27
  }
 
 
 
 
28
  }
29
 
30
  .wc-block-components-order-summary-item__image,
35
 
36
  .wc-block-components-order-summary-item__image {
37
  width: #{$gap-large * 2};
38
+ padding-top: $gap;
39
  padding-bottom: $gap;
40
  position: relative;
41
 
46
  }
47
 
48
  .wc-block-components-order-summary-item__quantity {
49
+ @include font-size(smaller);
50
  align-items: center;
51
  background: #fff;
52
  border: 2px solid;
61
  justify-content: center;
62
  min-width: 20px;
63
  right: 0;
64
+ top: $gap;
65
  transform: translate(50%, -50%);
66
  white-space: nowrap;
67
  z-index: 1;
69
 
70
  .wc-block-components-order-summary-item__description {
71
  padding-left: $gap-large;
72
+ padding-top: $gap;
73
  padding-bottom: $gap;
74
+ line-height: 1.375;
75
 
76
  p,
77
  .wc-block-components-product-metadata {
80
  }
81
  }
82
 
83
+ .wc-block-components-order-summary-item__header {
84
+ display: flex;
85
+ flex-wrap: wrap;
86
+ justify-content: space-between;
 
 
 
 
 
87
  }
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 CHANGED
@@ -1,7 +1,7 @@
1
  /**
2
  * External dependencies
3
  */
4
- import { WC_BLOCKS_IMAGE_URL } from '@woocommerce/block-settings';
5
 
6
  /**
7
  * Array of common assets.
@@ -10,97 +10,97 @@ 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
 
1
  /**
2
  * External dependencies
3
  */
4
+ import { WC_BLOCKS_ASSET_URL } from '@woocommerce/block-settings';
5
 
6
  /**
7
  * Array of common assets.
10
  {
11
  id: 'alipay',
12
  alt: 'Alipay',
13
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/alipay.svg',
14
  },
15
  {
16
  id: 'amex',
17
  alt: 'American Express',
18
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/amex.svg',
19
  },
20
  {
21
  id: 'bancontact',
22
  alt: 'Bancontact',
23
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/bancontact.svg',
24
  },
25
  {
26
  id: 'diners',
27
  alt: 'Diners Club',
28
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/diners.svg',
29
  },
30
  {
31
  id: 'discover',
32
  alt: 'Discover',
33
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/discover.svg',
34
  },
35
  {
36
  id: 'eps',
37
  alt: 'EPS',
38
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/eps.svg',
39
  },
40
  {
41
  id: 'giropay',
42
  alt: 'Giropay',
43
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/giropay.svg',
44
  },
45
  {
46
  id: 'ideal',
47
  alt: 'iDeal',
48
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/ideal.svg',
49
  },
50
  {
51
  id: 'jcb',
52
  alt: 'JCB',
53
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/jcb.svg',
54
  },
55
  {
56
  id: 'laser',
57
  alt: 'Laser',
58
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/laser.svg',
59
  },
60
  {
61
  id: 'maestro',
62
  alt: 'Maestro',
63
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/maestro.svg',
64
  },
65
  {
66
  id: 'mastercard',
67
  alt: 'Mastercard',
68
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/mastercard.svg',
69
  },
70
  {
71
  id: 'multibanco',
72
  alt: 'Multibanco',
73
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/multibanco.svg',
74
  },
75
  {
76
  id: 'p24',
77
  alt: 'Przelewy24',
78
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/p24.svg',
79
  },
80
  {
81
  id: 'sepa',
82
  alt: 'Sepa',
83
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/sepa.svg',
84
  },
85
  {
86
  id: 'sofort',
87
  alt: 'Sofort',
88
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/sofort.svg',
89
  },
90
  {
91
  id: 'unionpay',
92
  alt: 'Union Pay',
93
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/unionpay.svg',
94
  },
95
  {
96
  id: 'visa',
97
  alt: 'Visa',
98
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/visa.svg',
99
  },
100
  {
101
  id: 'wechat',
102
  alt: 'WeChat',
103
+ src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/wechat.svg',
104
  },
105
  ];
106
 
assets/js/base/components/cart-checkout/payment-method-icons/index.js CHANGED
@@ -15,9 +15,8 @@ import './style.scss';
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 );
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
  */
21
  export const PaymentMethodIcons = ( { icons = [], align = 'center' } ) => {
22
  const iconConfigs = normalizeIconConfig( icons );
assets/js/base/components/cart-checkout/payment-method-icons/payment-method-icon.js CHANGED
@@ -9,11 +9,6 @@ const getIconClassName = ( id ) => {
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 ) {
9
 
10
  /**
11
  * Return an element for an icon.
 
 
 
 
 
12
  */
13
  const PaymentMethodIcon = ( { id, src = null, alt = '' } ) => {
14
  if ( ! src ) {
assets/js/base/components/cart-checkout/place-order-button/index.js CHANGED
@@ -2,16 +2,19 @@
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();
@@ -21,10 +24,7 @@ const PlaceOrderButton = () => {
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
  >
2
  * External dependencies
3
  */
4
  import { __ } from '@wordpress/i18n';
5
+ import { useCheckoutSubmit } from '@woocommerce/base-hooks';
6
  import { Icon, done } from '@woocommerce/icons';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import Button from '../button';
12
 
13
  const PlaceOrderButton = () => {
14
  const {
15
  submitButtonText,
16
  onSubmit,
17
  isCalculating,
 
18
  waitingForProcessing,
19
  waitingForRedirect,
20
  } = useCheckoutSubmit();
24
  className="wc-block-components-checkout-place-order-button"
25
  onClick={ onSubmit }
26
  disabled={
27
+ isCalculating || waitingForProcessing || waitingForRedirect
 
 
 
28
  }
29
  showSpinner={ waitingForProcessing }
30
  >
assets/js/base/components/cart-checkout/policies/index.js ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 = () => {
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/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 CHANGED
@@ -14,7 +14,7 @@
14
  margin: 0;
15
 
16
  &:not(:first-child) {
17
- border-left: 1px solid $gray-400;
18
  }
19
 
20
  > a {
14
  margin: 0;
15
 
16
  &:not(:first-child) {
17
+ border-left: 1px solid $gray-10;
18
  }
19
 
20
  > a {
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.js ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { decodeEntities } from '@wordpress/html-entities';
5
+ import { PLACEHOLDER_IMG_SRC } from '@woocommerce/block-settings';
6
+ import PropTypes from 'prop-types';
7
+
8
+ /**
9
+ * Formats and returns an image element.
10
+ */
11
+ const ProductImage = ( { image = {} } ) => {
12
+ const imageProps = {
13
+ src: image.thumbnail || PLACEHOLDER_IMG_SRC,
14
+ alt: decodeEntities( image.alt ) || '',
15
+ };
16
+
17
+ return <img { ...imageProps } alt={ imageProps.alt } />;
18
+ };
19
+
20
+ ProductImage.propTypes = {
21
+ image: PropTypes.shape( {
22
+ alt: PropTypes.string,
23
+ thumbnail: PropTypes.string,
24
+ } ),
25
+ };
26
+
27
+ export default ProductImage;
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.js ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __, sprintf } from '@wordpress/i18n';
5
+ import PropTypes from 'prop-types';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import './style.scss';
11
+
12
+ /**
13
+ * Returns a low stock badge.
14
+ */
15
+ const ProductLowStockBadge = ( { lowStockRemaining } ) => {
16
+ if ( ! lowStockRemaining ) {
17
+ return null;
18
+ }
19
+
20
+ return (
21
+ <div className="wc-block-components-product-low-stock-badge">
22
+ { sprintf(
23
+ /* translators: %d stock amount (number of items in stock for product) */
24
+ __( '%d left in stock', 'woo-gutenberg-products-block' ),
25
+ lowStockRemaining
26
+ ) }
27
+ </div>
28
+ );
29
+ };
30
+
31
+ ProductLowStockBadge.propTypes = {
32
+ lowStockRemaining: PropTypes.number,
33
+ };
34
+
35
+ export default ProductLowStockBadge;
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-low-stock-badge/style.scss ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-components-product-low-stock-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-metadata/index.js ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import ProductVariationData from '../product-variation-data';
10
+ import ProductSummary from '../product-summary';
11
+ import './style.scss';
12
+
13
+ const ProductMetadata = ( {
14
+ shortDescription = '',
15
+ fullDescription = '',
16
+ variation = [],
17
+ } ) => {
18
+ return (
19
+ <div className="wc-block-components-product-metadata">
20
+ <ProductSummary
21
+ className="wc-block-components-product-metadata__description"
22
+ shortDescription={ shortDescription }
23
+ fullDescription={ fullDescription }
24
+ />
25
+ <ProductVariationData
26
+ className="wc-block-components-product-metadata__variation-data"
27
+ variation={ variation }
28
+ />
29
+ </div>
30
+ );
31
+ };
32
+
33
+ ProductMetadata.propTypes = {
34
+ shortDescription: PropTypes.string,
35
+ fullDescription: PropTypes.string,
36
+ variation: PropTypes.array,
37
+ };
38
+
39
+ export default ProductMetadata;
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 CHANGED
@@ -3,6 +3,6 @@
3
 
4
  .wc-block-components-product-metadata__description > p,
5
  .wc-block-components-product-metadata__variation-data {
6
- margin: 0.25em 0;
7
  }
8
  }
3
 
4
  .wc-block-components-product-metadata__description > p,
5
  .wc-block-components-product-metadata__variation-data {
6
+ margin: 0.25em 0 0 0;
7
  }
8
  }
assets/js/base/components/cart-checkout/product-name/index.js ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import { decodeEntities } from '@wordpress/html-entities';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import './style.scss';
11
+
12
+ const ProductName = ( { name, permalink, disabled } ) => {
13
+ return (
14
+ // we use tabIndex -1 to prevent the link from being focused, pointer-events
15
+ // disabled click events, so we get an almost disabled link.
16
+ <a
17
+ className="wc-block-components-product-name"
18
+ href={ permalink }
19
+ tabIndex={ disabled ? -1 : 0 }
20
+ >
21
+ { decodeEntities( name ) }
22
+ </a>
23
+ );
24
+ };
25
+
26
+ ProductName.propTypes = {
27
+ name: PropTypes.string,
28
+ permalink: PropTypes.string,
29
+ };
30
+
31
+ export default ProductName;
assets/js/base/components/cart-checkout/product-name/style.scss ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ .wc-block-components-product-name {
2
+ @include font-size(regular);
3
+ @include wrap-break-word();
4
+ display: block;
5
+ max-width: max-content;
6
+ }
assets/js/base/components/cart-checkout/product-price/index.js ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } 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
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import './style.scss';
13
+
14
+ const ProductPrice = ( { className, currency, regularValue, value } ) => {
15
+ const isDiscounted =
16
+ Number.isFinite( regularValue ) && regularValue !== value;
17
+
18
+ if ( isDiscounted ) {
19
+ return (
20
+ <span className="price wc-block-components-product-price">
21
+ <span className="screen-reader-text">
22
+ { __( 'Previous price:', 'woo-gutenberg-products-block' ) }
23
+ </span>
24
+ <del>
25
+ <FormattedMonetaryAmount
26
+ className={ classNames(
27
+ 'wc-block-components-product-price__regular',
28
+ className
29
+ ) }
30
+ currency={ currency }
31
+ value={ regularValue }
32
+ />
33
+ </del>
34
+ <span className="screen-reader-text">
35
+ { __(
36
+ 'Discounted price:',
37
+ 'woo-gutenberg-products-block'
38
+ ) }
39
+ </span>
40
+ <ins>
41
+ <FormattedMonetaryAmount
42
+ className={ classNames(
43
+ 'wc-block-components-product-price__value',
44
+ className,
45
+ {
46
+ 'is-discounted': isDiscounted,
47
+ }
48
+ ) }
49
+ currency={ currency }
50
+ value={ value }
51
+ />
52
+ </ins>
53
+ </span>
54
+ );
55
+ }
56
+
57
+ return (
58
+ <span className="price wc-block-components-product-price">
59
+ <FormattedMonetaryAmount
60
+ className={ classNames(
61
+ 'wc-block-components-product-price__value',
62
+ className,
63
+ {
64
+ 'is-discounted': isDiscounted,
65
+ }
66
+ ) }
67
+ currency={ currency }
68
+ value={ value }
69
+ />
70
+ </span>
71
+ );
72
+ };
73
+
74
+ ProductPrice.propTypes = {
75
+ currency: PropTypes.object.isRequired,
76
+ value: PropTypes.number.isRequired,
77
+ className: PropTypes.string,
78
+ regularValue: PropTypes.number,
79
+ };
80
+
81
+ export default ProductPrice;
assets/js/base/components/cart-checkout/product-price/style.scss ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ .wc-block-components-product-price__value {
2
+ &.is-discounted {
3
+ margin-left: 0.5em;
4
+ }
5
+ }
assets/js/base/components/cart-checkout/product-sale-badge/index.js ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __experimentalCreateInterpolateElement } from 'wordpress-element';
5
+ import { __ } from '@wordpress/i18n';
6
+ import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
7
+ import PropTypes from 'prop-types';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import './style.scss';
13
+
14
+ /**
15
+ * ProductSaleBadge
16
+ *
17
+ * @param {Object} props Incoming props.
18
+ * @param {Object} props.currency Currency object.
19
+ * @param {number} props.saleAmount Discounted amount.
20
+ *
21
+ * @return {*} The component.
22
+ */
23
+ const ProductSaleBadge = ( { currency, saleAmount } ) => {
24
+ if ( ! saleAmount ) {
25
+ return null;
26
+ }
27
+ return (
28
+ <div className="wc-block-components-sale-badge">
29
+ { __experimentalCreateInterpolateElement(
30
+ /* translators: <price/> will be replaced by the discount amount */
31
+ __( 'Save <price/>', 'woo-gutenberg-products-block' ),
32
+ {
33
+ price: (
34
+ <FormattedMonetaryAmount
35
+ currency={ currency }
36
+ value={ saleAmount }
37
+ />
38
+ ),
39
+ }
40
+ ) }
41
+ </div>
42
+ );
43
+ };
44
+
45
+ ProductSaleBadge.propTypes = {
46
+ currency: PropTypes.object,
47
+ saleAmount: PropTypes.number,
48
+ };
49
+
50
+ export default ProductSaleBadge;
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-sale-badge/style.scss ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-components-sale-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-summary/index.js ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import Summary from '@woocommerce/base-components/summary';
6
+ import { getSetting } from '@woocommerce/settings';
7
+
8
+ /**
9
+ * Returns an element containing a summary of the product.
10
+ */
11
+ const ProductSummary = ( {
12
+ className,
13
+ shortDescription = '',
14
+ fullDescription = '',
15
+ } ) => {
16
+ const source = shortDescription ? shortDescription : fullDescription;
17
+
18
+ if ( ! source ) {
19
+ return null;
20
+ }
21
+
22
+ return (
23
+ <Summary
24
+ className={ className }
25
+ source={ source }
26
+ maxLength={ 15 }
27
+ countType={ getSetting( 'wordCountType', 'words' ) }
28
+ />
29
+ );
30
+ };
31
+
32
+ ProductSummary.propTypes = {
33
+ className: PropTypes.string,
34
+ shortDescription: PropTypes.string,
35
+ fullDescription: PropTypes.string,
36
+ };
37
+
38
+ export default ProductSummary;
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/product-variation-data/index.js ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { decodeEntities } from '@wordpress/html-entities';
5
+ import PropTypes from 'prop-types';
6
+ import classNames from 'classnames';
7
+
8
+ /**
9
+ * Returns a formatted element containing variation details.
10
+ */
11
+ const ProductVariationData = ( { className, variation = [] } ) => {
12
+ if ( ! variation ) {
13
+ return null;
14
+ }
15
+
16
+ const variationsText = variation
17
+ .map( ( v ) => {
18
+ if ( v.attribute ) {
19
+ return `${ decodeEntities( v.attribute ) }: ${ decodeEntities(
20
+ v.value
21
+ ) }`;
22
+ }
23
+ // Support for product attributes with no name/key
24
+ return `${ decodeEntities( v.value ) }`;
25
+ } )
26
+ .join( ' / ' );
27
+
28
+ return (
29
+ <div
30
+ className={ classNames(
31
+ 'wc-block-components-product-variation-data',
32
+ className
33
+ ) }
34
+ >
35
+ { variationsText }
36
+ </div>
37
+ );
38
+ };
39
+
40
+ ProductVariationData.propTypes = {
41
+ variation: PropTypes.arrayOf(
42
+ PropTypes.shape( {
43
+ attribute: PropTypes.string,
44
+ value: PropTypes.string.isRequired,
45
+ } )
46
+ ),
47
+ };
48
+
49
+ export default ProductVariationData;
assets/js/base/components/cart-checkout/shipping-calculator/address.js ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import { __ } from '@wordpress/i18n';
6
+ import {
7
+ AddressForm,
8
+ Button,
9
+ } from '@woocommerce/base-components/cart-checkout';
10
+ import { useState } from '@wordpress/element';
11
+ import isShallowEqual from '@wordpress/is-shallow-equal';
12
+ import { useValidationContext } from '@woocommerce/base-context';
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ import './style.scss';
18
+
19
+ const ShippingCalculatorAddress = ( {
20
+ address: initialAddress,
21
+ onUpdate,
22
+ addressFields,
23
+ } ) => {
24
+ const [ address, setAddress ] = useState( initialAddress );
25
+ const {
26
+ hasValidationErrors,
27
+ showAllValidationErrors,
28
+ } = useValidationContext();
29
+
30
+ const validateSubmit = () => {
31
+ showAllValidationErrors();
32
+ return ! hasValidationErrors;
33
+ };
34
+
35
+ // Make all fields optional except 'country'.
36
+ const fieldConfig = {};
37
+ addressFields.forEach( ( field ) => {
38
+ if ( field === 'country' ) {
39
+ fieldConfig[ field ] = {
40
+ ...fieldConfig[ field ],
41
+ errorMessage: __(
42
+ 'Please select a country to calculate rates.',
43
+ 'woo-gutenberg-products-block'
44
+ ),
45
+ required: true,
46
+ };
47
+ } else {
48
+ fieldConfig[ field ] = {
49
+ ...fieldConfig[ field ],
50
+ required: false,
51
+ };
52
+ }
53
+ } );
54
+
55
+ return (
56
+ <form className="wc-block-components-shipping-calculator-address">
57
+ <AddressForm
58
+ fields={ addressFields }
59
+ fieldConfig={ fieldConfig }
60
+ onChange={ setAddress }
61
+ values={ address }
62
+ />
63
+ <Button
64
+ className="wc-block-components-shipping-calculator-address__button"
65
+ disabled={ isShallowEqual( address, initialAddress ) }
66
+ onClick={ ( e ) => {
67
+ e.preventDefault();
68
+ const isAddressValid = validateSubmit();
69
+ if ( isAddressValid ) {
70
+ return onUpdate( address );
71
+ }
72
+ } }
73
+ type="submit"
74
+ >
75
+ { __( 'Update', 'woo-gutenberg-products-block' ) }
76
+ </Button>
77
+ </form>
78
+ );
79
+ };
80
+
81
+ ShippingCalculatorAddress.propTypes = {
82
+ address: PropTypes.object.isRequired,
83
+ onUpdate: PropTypes.func.isRequired,
84
+ addressFields: PropTypes.array.isRequired,
85
+ };
86
+
87
+ export default ShippingCalculatorAddress;
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.js ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import { useShippingDataContext } from '@woocommerce/base-context';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import ShippingCalculatorAddress from './address';
11
+ import './style.scss';
12
+
13
+ const ShippingCalculator = ( {
14
+ onUpdate = () => {},
15
+ addressFields = [ 'country', 'state', 'city', 'postcode' ],
16
+ } ) => {
17
+ const { shippingAddress, setShippingAddress } = useShippingDataContext();
18
+ return (
19
+ <div className="wc-block-components-shipping-calculator">
20
+ <ShippingCalculatorAddress
21
+ address={ shippingAddress }
22
+ addressFields={ addressFields }
23
+ onUpdate={ ( newAddress ) => {
24
+ setShippingAddress( newAddress );
25
+ onUpdate( newAddress );
26
+ } }
27
+ />
28
+ </div>
29
+ );
30
+ };
31
+
32
+ ShippingCalculator.propTypes = {
33
+ onUpdate: PropTypes.func,
34
+ addressFields: PropTypes.array,
35
+ };
36
+
37
+ export default ShippingCalculator;
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 CHANGED
@@ -4,7 +4,6 @@
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 {
4
 
5
  .wc-block-components-shipping-calculator-address__button {
6
  width: 100%;
 
7
  }
8
 
9
  .wc-block-components-shipping-calculator {
assets/js/base/components/cart-checkout/shipping-location/index.js ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import { __, sprintf } from '@wordpress/i18n';
6
+ import {
7
+ SHIPPING_COUNTRIES,
8
+ SHIPPING_STATES,
9
+ } from '@woocommerce/block-settings';
10
+ import { decodeEntities } from '@wordpress/html-entities';
11
+
12
+ /**
13
+ * Shows a formatted shipping location.
14
+ */
15
+ const ShippingLocation = ( { address } ) => {
16
+ // we bail early if we don't have an address.
17
+ if ( Object.values( address ).length === 0 ) {
18
+ return null;
19
+ }
20
+ const formattedCountry =
21
+ typeof SHIPPING_COUNTRIES[ address.country ] === 'string'
22
+ ? decodeEntities( SHIPPING_COUNTRIES[ address.country ] )
23
+ : '';
24
+
25
+ const formattedState =
26
+ typeof SHIPPING_STATES[ address.country ] === 'object' &&
27
+ typeof SHIPPING_STATES[ address.country ][ address.state ] === 'string'
28
+ ? decodeEntities(
29
+ SHIPPING_STATES[ address.country ][ address.state ]
30
+ )
31
+ : address.state;
32
+
33
+ const addressParts = [];
34
+
35
+ addressParts.push( address.postcode.toUpperCase() );
36
+ addressParts.push( address.city );
37
+ addressParts.push( formattedState );
38
+ addressParts.push( formattedCountry );
39
+
40
+ const formattedLocation = addressParts.filter( Boolean ).join( ', ' );
41
+
42
+ return (
43
+ formattedLocation && (
44
+ <span className="wc-block-components-shipping-address">
45
+ { sprintf(
46
+ /* Translators: %s location. */
47
+ __( 'Shipping to %s', 'woo-gutenberg-products-block' ),
48
+ formattedLocation
49
+ ) + ' ' }
50
+ </span>
51
+ )
52
+ );
53
+ };
54
+
55
+ ShippingLocation.propTypes = {
56
+ address: PropTypes.shape( {
57
+ city: PropTypes.string,
58
+ state: PropTypes.string,
59
+ postcode: PropTypes.string,
60
+ country: PropTypes.string,
61
+ } ),
62
+ };
63
+
64
+ export default ShippingLocation;
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.js ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __, _n, sprintf } from '@wordpress/i18n';
5
+ import { useEffect } from 'react';
6
+ import PropTypes from 'prop-types';
7
+ import { speak } from '@wordpress/a11y';
8
+ import LoadingMask from '@woocommerce/base-components/loading-mask';
9
+ import {
10
+ getShippingRatesPackageCount,
11
+ getShippingRatesRateCount,
12
+ } from '@woocommerce/base-utils';
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ import Packages from './packages';
18
+ import './style.scss';
19
+
20
+ const ShippingRatesControl = ( {
21
+ shippingRates,
22
+ shippingRatesLoading,
23
+ className,
24
+ collapsibleWhenMultiple = false,
25
+ noResultsMessage,
26
+ renderOption,
27
+ } ) => {
28
+ useEffect( () => {
29
+ if ( shippingRatesLoading ) {
30
+ return;
31
+ }
32
+ const packages = getShippingRatesPackageCount( shippingRates );
33
+ const shippingOptions = getShippingRatesRateCount( shippingRates );
34
+ if ( shippingOptions === 0 ) {
35
+ speak(
36
+ __(
37
+ 'No shipping options were found.',
38
+ 'woo-gutenberg-products-block'
39
+ )
40
+ );
41
+ } else if ( packages === 1 ) {
42
+ speak(
43
+ sprintf(
44
+ // translators: %d number of shipping options found.
45
+ _n(
46
+ '%d shipping option was found.',
47
+ '%d shipping options were found.',
48
+ shippingOptions,
49
+ 'woo-gutenberg-products-block'
50
+ ),
51
+ shippingOptions
52
+ )
53
+ );
54
+ } else {
55
+ speak(
56
+ sprintf(
57
+ // translators: %d number of shipping packages packages.
58
+ _n(
59
+ 'Shipping option searched for %d package.',
60
+ 'Shipping options searched for %d packages.',
61
+ packages,
62
+ 'woo-gutenberg-products-block'
63
+ ),
64
+ packages
65
+ ) +
66
+ ' ' +
67
+ sprintf(
68
+ // translators: %d number of shipping options available.
69
+ _n(
70
+ '%d shipping option was found',
71
+ '%d shipping options were found',
72
+ shippingOptions,
73
+ 'woo-gutenberg-products-block'
74
+ ),
75
+ shippingOptions
76
+ )
77
+ );
78
+ }
79
+ }, [ shippingRatesLoading, shippingRates ] );
80
+
81
+ return (
82
+ <LoadingMask
83
+ isLoading={ shippingRatesLoading }
84
+ screenReaderLabel={ __(
85
+ 'Loading shipping rates…',
86
+ 'woo-gutenberg-products-block'
87
+ ) }
88
+ showSpinner={ true }
89
+ >
90
+ <Packages
91
+ className={ className }
92
+ collapsible={
93
+ shippingRates.length > 1 && collapsibleWhenMultiple
94
+ }
95
+ noResultsMessage={ noResultsMessage }
96
+ renderOption={ renderOption }
97
+ shippingRates={ shippingRates }
98
+ />
99
+ </LoadingMask>
100
+ );
101
+ };
102
+
103
+ ShippingRatesControl.propTypes = {
104
+ noResultsMessage: PropTypes.string.isRequired,
105
+ renderOption: PropTypes.func.isRequired,
106
+ className: PropTypes.string,
107
+ collapsibleWhenMultiple: PropTypes.bool,
108
+ shippingRates: PropTypes.array,
109
+ shippingRatesLoading: PropTypes.bool,
110
+ };
111
+
112
+ export default ShippingRatesControl;
113
+ export { Packages };
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/shipping-rates-control/package-options.js ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import RadioControl, {
6
+ RadioControlOptionLayout,
7
+ } from '@woocommerce/base-components/radio-control';
8
+ import { Notice } from 'wordpress-components';
9
+ import classnames from 'classnames';
10
+
11
+ const PackageOptions = ( {
12
+ className,
13
+ noResultsMessage,
14
+ onChange,
15
+ options,
16
+ renderOption,
17
+ selected,
18
+ } ) => {
19
+ if ( options.length === 0 ) {
20
+ return (
21
+ <Notice
22
+ isDismissible={ false }
23
+ className={ classnames(
24
+ 'wc-block-components-shipping-rates-control__no-results-notice',
25
+ 'woocommerce-message',
26
+ 'woocommerce-info'
27
+ ) }
28
+ >
29
+ { noResultsMessage }
30
+ </Notice>
31
+ );
32
+ }
33
+
34
+ if ( options.length > 1 ) {
35
+ return (
36
+ <RadioControl
37
+ className={ className }
38
+ onChange={ onChange }
39
+ selected={ selected }
40
+ options={ options.map( renderOption ) }
41
+ />
42
+ );
43
+ }
44
+
45
+ const {
46
+ label,
47
+ secondaryLabel,
48
+ description,
49
+ secondaryDescription,
50
+ } = renderOption( options[ 0 ] );
51
+
52
+ return (
53
+ <RadioControlOptionLayout
54
+ label={ label }
55
+ secondaryLabel={ secondaryLabel }
56
+ description={ description }
57
+ secondaryDescription={ secondaryDescription }
58
+ />
59
+ );
60
+ };
61
+
62
+ PackageOptions.propTypes = {
63
+ onChange: PropTypes.func.isRequired,
64
+ options: PropTypes.arrayOf( PropTypes.object ).isRequired,
65
+ renderOption: PropTypes.func.isRequired,
66
+ className: PropTypes.string,
67
+ noResultsMessage: PropTypes.string,
68
+ selected: PropTypes.string,
69
+ };
70
+
71
+ export default PackageOptions;
assets/js/base/components/cart-checkout/shipping-rates-control/package.js ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import { _n, sprintf } from '@wordpress/i18n';
6
+ import { decodeEntities } from '@wordpress/html-entities';
7
+ import Label from '@woocommerce/base-components/label';
8
+ import Title from '@woocommerce/base-components/title';
9
+ import Panel from '@woocommerce/base-components/panel';
10
+ import classNames from 'classnames';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import PackageOptions from './package-options';
16
+ import './style.scss';
17
+
18
+ const Package = ( {
19
+ className,
20
+ collapsible = false,
21
+ noResultsMessage,
22
+ onChange,
23
+ renderOption,
24
+ selected,
25
+ shippingRate,
26
+ showItems,
27
+ title,
28
+ } ) => {
29
+ const header = (
30
+ <>
31
+ { title && (
32
+ <Title
33
+ className="wc-block-components-shipping-rates-control__package-title"
34
+ headingLevel="3"
35
+ >
36
+ { title }
37
+ </Title>
38
+ ) }
39
+ { showItems && (
40
+ <ul className="wc-block-components-shipping-rates-control__package-items">
41
+ { Object.values( shippingRate.items ).map( ( v ) => {
42
+ const name = decodeEntities( v.name );
43
+ const quantity = v.quantity;
44
+ return (
45
+ <li
46
+ key={ name }
47
+ className="wc-block-components-shipping-rates-control__package-item"
48
+ >
49
+ <Label
50
+ label={ `${ name } ×${ quantity }` }
51
+ screenReaderLabel={ sprintf(
52
+ // translators: %s name of the product (ie: Sunglasses), %d number of units in the current cart package
53
+ _n(
54
+ '%s (%d unit)',
55
+ '%s (%d units)',
56
+ quantity,
57
+ 'woo-gutenberg-products-block'
58
+ ),
59
+ name,
60
+ quantity
61
+ ) }
62
+ />
63
+ </li>
64
+ );
65
+ } ) }
66
+ </ul>
67
+ ) }
68
+ </>
69
+ );
70
+ const body = (
71
+ <PackageOptions
72
+ className={ className }
73
+ noResultsMessage={ noResultsMessage }
74
+ onChange={ onChange }
75
+ options={ shippingRate.shipping_rates }
76
+ renderOption={ renderOption }
77
+ selected={ selected }
78
+ />
79
+ );
80
+ if ( collapsible ) {
81
+ return (
82
+ <Panel
83
+ className="wc-block-components-shipping-rates-control__package"
84
+ hasBorder={ true }
85
+ initialOpen={ true }
86
+ title={ header }
87
+ >
88
+ { body }
89
+ </Panel>
90
+ );
91
+ }
92
+ return (
93
+ <div
94
+ className={ classNames(
95
+ 'wc-block-components-shipping-rates-control__package',
96
+ className
97
+ ) }
98
+ >
99
+ { header }
100
+ { body }
101
+ </div>
102
+ );
103
+ };
104
+
105
+ Package.propTypes = {
106
+ onChange: PropTypes.func.isRequired,
107
+ renderOption: PropTypes.func.isRequired,
108
+ shippingRate: PropTypes.shape( {
109
+ shipping_rates: PropTypes.arrayOf( PropTypes.object ).isRequired,
110
+ items: PropTypes.arrayOf(
111
+ PropTypes.shape( {
112
+ name: PropTypes.string.isRequired,
113
+ key: PropTypes.string.isRequired,
114
+ quantity: PropTypes.number.isRequired,
115
+ } ).isRequired
116
+ ).isRequired,
117
+ } ).isRequired,
118
+ className: PropTypes.string,
119
+ collapsible: PropTypes.bool,
120
+ noResultsMessage: PropTypes.string,
121
+ selected: PropTypes.string,
122
+ showItems: PropTypes.bool,
123
+ title: PropTypes.string,
124
+ };
125
+
126
+ export default Package;
assets/js/base/components/cart-checkout/shipping-rates-control/packages.js ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import { useSelectShippingRate } from '@woocommerce/base-hooks';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import Package from './package';
11
+ import './style.scss';
12
+
13
+ const Packages = ( {
14
+ className,
15
+ collapsible = false,
16
+ noResultsMessage,
17
+ renderOption,
18
+ shippingRates = [],
19
+ } ) => {
20
+ const { selectShippingRate, selectedShippingRates } = useSelectShippingRate(
21
+ shippingRates
22
+ );
23
+ /* eslint-disable camelcase */
24
+ return (
25
+ <div className="wc-block-components-shipping-rates-control">
26
+ { shippingRates.map( ( { package_id, ...shippingRate } ) => (
27
+ <Package
28
+ key={ package_id }
29
+ className={ className }
30
+ collapsible={ collapsible }
31
+ noResultsMessage={ noResultsMessage }
32
+ onChange={ ( newShippingRate ) => {
33
+ selectShippingRate( newShippingRate, package_id );
34
+ } }
35
+ renderOption={ renderOption }
36
+ selected={ selectedShippingRates[ package_id ] }
37
+ shippingRate={ shippingRate }
38
+ showItems={ shippingRates.length > 1 }
39
+ title={
40
+ shippingRates.length > 1 ? shippingRate.name : null
41
+ }
42
+ />
43
+ ) ) }
44
+ </div>
45
+ );
46
+ /* eslint-enable */
47
+ };
48
+
49
+ Packages.propTypes = {
50
+ renderOption: PropTypes.func.isRequired,
51
+ className: PropTypes.string,
52
+ collapsible: PropTypes.bool,
53
+ noResultsMessage: PropTypes.string,
54
+ shippingRates: PropTypes.arrayOf(
55
+ PropTypes.shape( {
56
+ items: PropTypes.arrayOf(
57
+ PropTypes.shape( {
58
+ key: PropTypes.string,
59
+ name: PropTypes.string,
60
+ quantity: PropTypes.number,
61
+ } )
62
+ ).isRequired,
63
+ package_id: PropTypes.number,
64
+ name: PropTypes.string,
65
+ destination: PropTypes.object,
66
+ shipping_rates: PropTypes.arrayOf( PropTypes.object ),
67
+ } ).isRequired
68
+ ).isRequired,
69
+ };
70
+
71
+ export default Packages;
assets/js/base/components/cart-checkout/shipping-rates-control/style.scss ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-components-shipping-rates-control__package {
2
+ .wc-block-components-shipping-rates-control__package-title {
3
+ margin: 0;
4
+ }
5
+ }
6
+
7
+ .wc-block-components-shipping-rates-control__package-items {
8
+ @include font-size(small);
9
+ display: block;
10
+ list-style: none;
11
+ margin: 0;
12
+ padding: 0;
13
+ }
14
+
15
+ .wc-block-components-shipping-rates-control__package-item {
16
+ @include wrap-break-word();
17
+ display: inline-block;
18
+ margin: 0;
19
+ padding: 0;
20
+ }
21
+
22
+ .wc-block-components-shipping-rates-control__package-item:not(:last-child)::after {
23
+ content: ", ";
24
+ white-space: pre;
25
+ }
26
+
27
+ .components-notice.wc-block-components-shipping-rates-control__no-results-notice {
28
+ margin-bottom: 0;
29
+ }
30
+
31
+ .wc-block-components-shipping-rates-control {
32
+ .wc-blocks-components-panel__content {
33
+ padding-bottom: 0;
34
+ }
35
+ }
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 CHANGED
@@ -1,4 +1,8 @@
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';
 
 
 
 
1
+ export { default as SubtotalsItem } from './subtotals-item';
2
+ export { default as TotalsCouponCodeInput } from './totals-coupon-code-input';
3
+ export { default as TotalsDiscountItem } from './totals-discount-item';
4
+ export { default as TotalsFeesItem } from './totals-fees-item';
5
+ export { default as TotalsFooterItem } from './totals-footer-item';
6
+ export { default as TotalsItem } from './totals-item';
7
+ export { default as TotalsShippingItem } from './totals-shipping-item';
8
+ export { default as TotalsTaxesItem } from './totals-taxes-item';
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/cart-checkout/totals/subtotals-item/index.js ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { DISPLAY_CART_PRICES_INCLUDING_TAX } from '@woocommerce/block-settings';
6
+ import PropTypes from 'prop-types';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import TotalsItem from '../totals-item';
12
+
13
+ const SubtotalsItem = ( { currency, values } ) => {
14
+ const { total_items: totalItems, total_items_tax: totalItemsTax } = values;
15
+ const itemsValue = parseInt( totalItems, 10 );
16
+ const itemsTaxValue = parseInt( totalItemsTax, 10 );
17
+
18
+ return (
19
+ <TotalsItem
20
+ currency={ currency }
21
+ label={ __( 'Subtotal', 'woo-gutenberg-products-block' ) }
22
+ value={
23
+ DISPLAY_CART_PRICES_INCLUDING_TAX
24
+ ? itemsValue + itemsTaxValue
25
+ : itemsValue
26
+ }
27
+ />
28
+ );
29
+ };
30
+
31
+ SubtotalsItem.propTypes = {
32
+ currency: PropTypes.object.isRequired,
33
+ values: PropTypes.shape( {
34
+ total_items: PropTypes.string,
35
+ total_items_tax: PropTypes.string,
36
+ } ).isRequired,
37
+ };
38
+
39
+ export default SubtotalsItem;
assets/js/base/components/cart-checkout/totals/totals-coupon-code-input/index.js ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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/cart-checkout';
7
+ import { ValidatedTextInput } from '@woocommerce/base-components/text-input';
8
+ import Label from '@woocommerce/base-components/label';
9
+ import { ValidationInputError } from '@woocommerce/base-components/validation';
10
+ import LoadingMask from '@woocommerce/base-components/loading-mask';
11
+ import PropTypes from 'prop-types';
12
+ import { withInstanceId } from '@woocommerce/base-hocs/with-instance-id';
13
+ import { useValidationContext } from '@woocommerce/base-context';
14
+ import Panel from '@woocommerce/base-components/panel';
15
+
16
+ /**
17
+ * Internal dependencies
18
+ */
19
+ import './style.scss';
20
+
21
+ const TotalsCouponCodeInput = ( {
22
+ instanceId,
23
+ isLoading = false,
24
+ initialOpen = false,
25
+ onSubmit = () => {},
26
+ } ) => {
27
+ const [ couponValue, setCouponValue ] = useState( '' );
28
+ const currentIsLoading = useRef( false );
29
+ const { getValidationError, getValidationErrorId } = useValidationContext();
30
+
31
+ const validationError = getValidationError( 'coupon' );
32
+
33
+ useEffect( () => {
34
+ if ( currentIsLoading.current !== isLoading ) {
35
+ if ( ! isLoading && couponValue && ! validationError ) {
36
+ setCouponValue( '' );
37
+ }
38
+ currentIsLoading.current = isLoading;
39
+ }
40
+ }, [ isLoading, couponValue, validationError ] );
41
+
42
+ const textInputId = `wc-block-components-totals-coupon__input-${ instanceId }`;
43
+
44
+ return (
45
+ <Panel
46
+ className="wc-block-components-totals-coupon"
47
+ hasBorder={ true }
48
+ initialOpen={ initialOpen }
49
+ title={
50
+ <Label
51
+ label={ __(
52
+ 'Coupon Code?',
53
+ 'woo-gutenberg-products-block'
54
+ ) }
55
+ screenReaderLabel={ __(
56
+ 'Introduce Coupon Code',
57
+ 'woo-gutenberg-products-block'
58
+ ) }
59
+ htmlFor={ textInputId }
60
+ />
61
+ }
62
+ titleTag="h2"
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
+ TotalsCouponCodeInput.propTypes = {
117
+ onSubmit: PropTypes.func,
118
+ isLoading: PropTypes.bool,
119
+ };
120
+
121
+ export default withInstanceId( TotalsCouponCodeInput );
assets/js/base/components/cart-checkout/totals/totals-coupon-code-input/stories/index.js ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 CouponInput from '../';
14
+
15
+ export default {
16
+ title: 'WooCommerce Blocks/@base-components/CouponInput',
17
+ component: CouponInput,
18
+ };
19
+
20
+ const StoryComponent = ( { validCoupon, isLoading, invalidCouponText } ) => {
21
+ const { setValidationErrors } = useValidationContext();
22
+ const onSubmit = ( coupon ) => {
23
+ if ( coupon !== validCoupon ) {
24
+ setValidationErrors( { coupon: invalidCouponText } );
25
+ }
26
+ };
27
+ return <CouponInput isLoading={ isLoading } onSubmit={ onSubmit } />;
28
+ };
29
+
30
+ export const Default = () => {
31
+ const validCoupon = text( 'A valid coupon code', 'validcoupon' );
32
+ const invalidCouponText = text(
33
+ 'Error message for invalid code',
34
+ 'Invalid coupon code.'
35
+ );
36
+ const isLoading = boolean( 'Toggle isLoading state', false );
37
+ return (
38
+ <ValidationContextProvider>
39
+ <StoryComponent
40
+ validCoupon={ validCoupon }
41
+ isLoading={ isLoading }
42
+ invalidCouponText={ invalidCouponText }
43
+ />
44
+ </ValidationContextProvider>
45
+ );
46
+ };
assets/js/base/components/cart-checkout/totals/totals-coupon-code-input/style.scss ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-components-totals-coupon__form {
2
+ display: flex;
3
+ margin-bottom: 0;
4
+ width: 100%;
5
+
6
+ .wc-block-components-totals-coupon__input {
7
+ margin-bottom: 0;
8
+ margin-top: 0;
9
+ flex-grow: 1;
10
+ }
11
+
12
+ .wc-block-components-totals-coupon__button {
13
+ height: 48px;
14
+ flex-shrink: 0;
15
+ margin-left: $gap-smaller;
16
+ padding-left: $gap-large;
17
+ padding-right: $gap-large;
18
+ white-space: nowrap;
19
+ }
20
+ }
21
+
22
+ .wc-block-components-totals-coupon__content {
23
+ flex-direction: column;
24
+ position: relative;
25
+
26
+ .wc-block-components-validation-error {
27
+ margin-top: $gap-smaller;
28
+ position: relative;
29
+ width: 100%;
30
+ }
31
+ }
assets/js/base/components/cart-checkout/totals/totals-discount-item/index.js ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __, sprintf } from '@wordpress/i18n';
5
+ import { DISPLAY_CART_PRICES_INCLUDING_TAX } from '@woocommerce/block-settings';
6
+ import LoadingMask from '@woocommerce/base-components/loading-mask';
7
+ import Chip from '@woocommerce/base-components/chip';
8
+ import PropTypes from 'prop-types';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import TotalsItem from '../totals-item';
14
+ import './style.scss';
15
+
16
+ const TotalsDiscountItem = ( {
17
+ cartCoupons = [],
18
+ currency,
19
+ isRemovingCoupon,
20
+ removeCoupon,
21
+ values,
22
+ } ) => {
23
+ const {
24
+ total_discount: totalDiscount,
25
+ total_discount_tax: totalDiscountTax,
26
+ } = values;
27
+ const discountValue = parseInt( totalDiscount, 10 );
28
+
29
+ if ( ! discountValue && cartCoupons.length === 0 ) {
30
+ return null;
31
+ }
32
+
33
+ const discountTaxValue = parseInt( totalDiscountTax, 10 );
34
+ const discountTotalValue = DISPLAY_CART_PRICES_INCLUDING_TAX
35
+ ? discountValue + discountTaxValue
36
+ : discountValue;
37
+
38
+ return (
39
+ <TotalsItem
40
+ className="wc-block-components-totals-discount"
41
+ currency={ currency }
42
+ description={
43
+ cartCoupons.length !== 0 && (
44
+ <LoadingMask
45
+ screenReaderLabel={ __(
46
+ 'Removing coupon…',
47
+ 'woo-gutenberg-products-block'
48
+ ) }
49
+ isLoading={ isRemovingCoupon }
50
+ showSpinner={ false }
51
+ >
52
+ <ul className="wc-block-components-totals-discount__coupon-list">
53
+ { cartCoupons.map( ( cartCoupon ) => (
54
+ <Chip
55
+ key={ 'coupon-' + cartCoupon.code }
56
+ className="wc-block-components-totals-discount__coupon-list-item"
57
+ text={ cartCoupon.code }
58
+ screenReaderText={ sprintf(
59
+ /* Translators: %s Coupon code. */
60
+ __(
61
+ 'Coupon: %s',
62
+ 'woo-gutenberg-products-block'
63
+ ),
64
+ cartCoupon.code
65
+ ) }
66
+ disabled={ isRemovingCoupon }
67
+ onRemove={ () => {
68
+ removeCoupon( cartCoupon.code );
69
+ } }
70
+ radius="large"
71
+ />
72
+ ) ) }
73
+ </ul>
74
+ </LoadingMask>
75
+ )
76
+ }
77
+ label={
78
+ !! discountTotalValue
79
+ ? __( 'Discount', 'woo-gutenberg-products-block' )
80
+ : __( 'Coupons', 'woo-gutenberg-products-block' )
81
+ }
82
+ value={ discountTotalValue ? discountTotalValue * -1 : '-' }
83
+ />
84
+ );
85
+ };
86
+
87
+ TotalsDiscountItem.propTypes = {
88
+ cartCoupons: PropTypes.arrayOf(
89
+ PropTypes.shape( {
90
+ code: PropTypes.string.isRequired,
91
+ } )
92
+ ),
93
+ currency: PropTypes.object.isRequired,
94
+ isRemovingCoupon: PropTypes.bool.isRequired,
95
+ removeCoupon: PropTypes.func.isRequired,
96
+ values: PropTypes.shape( {
97
+ total_discount: PropTypes.string,
98
+ total_discount_tax: PropTypes.string,
99
+ } ).isRequired,
100
+ };
101
+
102
+ export default TotalsDiscountItem;
assets/js/base/components/cart-checkout/totals/totals-discount-item/style.scss ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ .wc-block-components-totals-discount__coupon-list {
2
+ list-style: none;
3
+ margin: 0;
4
+ padding: 0;
5
+ }
assets/js/base/components/cart-checkout/totals/totals-fees-item/index.js ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { DISPLAY_CART_PRICES_INCLUDING_TAX } from '@woocommerce/block-settings';
6
+ import { useShippingDataContext } from '@woocommerce/base-context';
7
+ import PropTypes from 'prop-types';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import TotalsItem from '../totals-item';
13
+
14
+ const TotalsFeesItem = ( { currency, values } ) => {
15
+ const { needsShipping } = useShippingDataContext();
16
+ if ( ! needsShipping ) {
17
+ return null;
18
+ }
19
+ const { total_fees: totalFees, total_fees_tax: totalFeesTax } = values;
20
+ const feesValue = parseInt( totalFees, 10 );
21
+
22
+ if ( ! feesValue ) {
23
+ return null;
24
+ }
25
+
26
+ const feesTaxValue = parseInt( totalFeesTax, 10 );
27
+
28
+ return (
29
+ <TotalsItem
30
+ className="wc-block-components-totals-fees"
31
+ currency={ currency }
32
+ label={ __( 'Fees', 'woo-gutenberg-products-block' ) }
33
+ value={
34
+ DISPLAY_CART_PRICES_INCLUDING_TAX
35
+ ? feesValue + feesTaxValue
36
+ : feesValue
37
+ }
38
+ />
39
+ );
40
+ };
41
+
42
+ TotalsFeesItem.propTypes = {
43
+ currency: PropTypes.object.isRequired,
44
+ values: PropTypes.shape( {
45
+ total_fees: PropTypes.string,
46
+ total_fees_tax: PropTypes.string,
47
+ } ).isRequired,
48
+ };
49
+
50
+ export default TotalsFeesItem;
assets/js/base/components/cart-checkout/totals/totals-footer-item/index.js ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { DISPLAY_CART_PRICES_INCLUDING_TAX } from '@woocommerce/block-settings';
6
+ import { __experimentalCreateInterpolateElement } from 'wordpress-element';
7
+ import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
8
+ import PropTypes from 'prop-types';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import TotalsItem from '../totals-item';
14
+ import './style.scss';
15
+
16
+ const TotalsFooterItem = ( { currency, values } ) => {
17
+ const { total_price: totalPrice, total_tax: totalTax } = values;
18
+
19
+ return (
20
+ <TotalsItem
21
+ className="wc-block-components-totals-footer-item"
22
+ currency={ currency }
23
+ label={ __( 'Total', 'woo-gutenberg-products-block' ) }
24
+ value={ parseInt( totalPrice, 10 ) }
25
+ description={
26
+ DISPLAY_CART_PRICES_INCLUDING_TAX && (
27
+ <p className="wc-block-components-totals-footer-item-tax">
28
+ { __experimentalCreateInterpolateElement(
29
+ __(
30
+ 'Including <TaxAmount/> in taxes',
31
+ 'woo-gutenberg-products-block'
32
+ ),
33
+ {
34
+ TaxAmount: (
35
+ <FormattedMonetaryAmount
36
+ className="wc-block-components-totals-footer-item-tax-value"
37
+ currency={ currency }
38
+ displayType="text"
39
+ value={ parseInt( totalTax, 10 ) }
40
+ />
41
+ ),
42
+ }
43
+ ) }
44
+ </p>
45
+ )
46
+ }
47
+ />
48
+ );
49
+ };
50
+
51
+ TotalsFooterItem.propTypes = {
52
+ currency: PropTypes.object.isRequired,
53
+ values: PropTypes.shape( {
54
+ total_price: PropTypes.string,
55
+ total_tax: PropTypes.string,
56
+ } ).isRequired,
57
+ };
58
+
59
+ export default TotalsFooterItem;
assets/js/base/components/cart-checkout/totals/totals-footer-item/style.scss ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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: normal;
9
+ }
10
+
11
+ .wc-block-components-totals-footer-item-tax {
12
+ margin-bottom: 0;
13
+ }
14
+ }
assets/js/base/components/cart-checkout/totals/totals-item/index.js ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import classnames from 'classnames';
6
+ import { isValidElement } from '@wordpress/element';
7
+ import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import './style.scss';
13
+
14
+ const TotalsItem = ( { className, currency, label, value, description } ) => {
15
+ return (
16
+ <div
17
+ className={ classnames(
18
+ 'wc-block-components-totals-item',
19
+ className
20
+ ) }
21
+ >
22
+ <span className="wc-block-components-totals-item__label">
23
+ { label }
24
+ </span>
25
+ { isValidElement( value ) ? (
26
+ <div className="wc-block-components-totals-item__value">
27
+ { value }
28
+ </div>
29
+ ) : (
30
+ <FormattedMonetaryAmount
31
+ className="wc-block-components-totals-item__value"
32
+ currency={ currency }
33
+ displayType="text"
34
+ value={ value }
35
+ />
36
+ ) }
37
+ <div className="wc-block-components-totals-item__description">
38
+ { description }
39
+ </div>
40
+ </div>
41
+ );
42
+ };
43
+
44
+ TotalsItem.propTypes = {
45
+ currency: PropTypes.object,
46
+ label: PropTypes.string.isRequired,
47
+ value: PropTypes.oneOfType( [ PropTypes.number, PropTypes.node ] ),
48
+ className: PropTypes.string,
49
+ description: PropTypes.node,
50
+ };
51
+
52
+ export default TotalsItem;
assets/js/base/components/cart-checkout/totals/totals-item/style.scss ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-block-components-totals-item {
2
+ display: flex;
3
+ flex-wrap: wrap;
4
+ padding: em($gap-small) 0;
5
+ width: 100%;
6
+ }
7
+
8
+ .wc-block-components-totals-item__label {
9
+ flex-grow: 1;
10
+ font-weight: bold;
11
+ }
12
+
13
+ .wc-block-components-totals-item__value {
14
+ white-space: nowrap;
15
+ }
16
+
17
+ .wc-block-components-totals-item__description {
18
+ @include font-size(small);
19
+ width: 100%;
20
+ }
assets/js/base/components/cart-checkout/totals/totals-shipping-item/has-shipping-rate.js ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
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( shippingRatePackage => shippingRatePackage.shipping_rates.length );
10
+ };
11
+
12
+ export default hasShippingRate;
assets/js/base/components/cart-checkout/totals/totals-shipping-item/index.js ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { DISPLAY_CART_PRICES_INCLUDING_TAX } from '@woocommerce/block-settings';
6
+ import {
7
+ ShippingCalculator,
8
+ ShippingLocation,
9
+ } from '@woocommerce/base-components/cart-checkout';
10
+ import PropTypes from 'prop-types';
11
+ import { useState } from '@wordpress/element';
12
+ import { useStoreCart } from '@woocommerce/base-hooks';
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ import TotalsItem from '../totals-item';
18
+ import ShippingRateSelector from './shipping-rate-selector';
19
+ import hasShippingRate from './has-shipping-rate';
20
+ import './style.scss';
21
+
22
+ /**
23
+ * Renders the shipping totals row, rates, and calculator if enabled.
24
+ */
25
+ const TotalsShippingItem = ( {
26
+ currency,
27
+ values,
28
+ isCheckout = false,
29
+ showCalculator = true,
30
+ showRatesWithoutAddress = false,
31
+ } ) => {
32
+ const [ isShippingCalculatorOpen, setIsShippingCalculatorOpen ] = useState(
33
+ false
34
+ );
35
+ const {
36
+ shippingRates,
37
+ shippingRatesLoading,
38
+ hasShippingAddress,
39
+ shippingAddress,
40
+ } = useStoreCart();
41
+ const totalShippingValue = DISPLAY_CART_PRICES_INCLUDING_TAX
42
+ ? parseInt( values.total_shipping, 10 ) +
43
+ parseInt( values.total_shipping_tax, 10 )
44
+ : parseInt( values.total_shipping, 10 );
45
+ const hasRates = hasShippingRate( shippingRates ) || totalShippingValue;
46
+ const showingRates = showRatesWithoutAddress || hasShippingAddress;
47
+
48
+ // If we have no rates, and an address is needed.
49
+ if ( ! hasRates && ! hasShippingAddress && ! isCheckout ) {
50
+ return (
51
+ <>
52
+ <TotalsItem
53
+ className="wc-block-components-totals-shipping"
54
+ label={ __( 'Shipping', 'woo-gutenberg-products-block' ) }
55
+ value={
56
+ showCalculator ? (
57
+ <button
58
+ className="wc-block-components-totals-shipping__change-address-button"
59
+ onClick={ () => {
60
+ setIsShippingCalculatorOpen(
61
+ ! isShippingCalculatorOpen
62
+ );
63
+ } }
64
+ >
65
+ { __(
66
+ 'Calculate',
67
+ 'woo-gutenberg-products-block'
68
+ ) }
69
+ </button>
70
+ ) : (
71
+ <em>
72
+ { __(
73
+ 'Calculated during checkout',
74
+ 'woo-gutenberg-products-block'
75
+ ) }
76
+ </em>
77
+ )
78
+ }
79
+ />
80
+ { showCalculator && isShippingCalculatorOpen && (
81
+ <ShippingCalculator
82
+ onUpdate={ () => {
83
+ setIsShippingCalculatorOpen( false );
84
+ } }
85
+ />
86
+ ) }
87
+ </>
88
+ );
89
+ }
90
+
91
+ return (
92
+ <div className="wc-block-components-totals-shipping">
93
+ <TotalsItem
94
+ label={ __( 'Shipping', 'woo-gutenberg-products-block' ) }
95
+ value={ totalShippingValue ? totalShippingValue : '' }
96
+ description={
97
+ <>
98
+ <ShippingLocation address={ shippingAddress } />{ ' ' }
99
+ { showCalculator && (
100
+ <button
101
+ className="wc-block-components-totals-shipping__change-address-button"
102
+ onClick={ () => {
103
+ setIsShippingCalculatorOpen(
104
+ ! isShippingCalculatorOpen
105
+ );
106
+ } }
107
+ aria-expanded={ isShippingCalculatorOpen }
108
+ >
109
+ { __(
110
+ '(change address)',
111
+ 'woo-gutenberg-products-block'
112
+ ) }
113
+ </button>
114
+ ) }
115
+ </>
116
+ }
117
+ currency={ currency }
118
+ />
119
+ { showCalculator && isShippingCalculatorOpen && (
120
+ <ShippingCalculator
121
+ onUpdate={ () => {
122
+ setIsShippingCalculatorOpen( false );
123
+ } }
124
+ />
125
+ ) }
126
+ { ! isCheckout && showingRates && (
127
+ <ShippingRateSelector
128
+ hasRates={ hasRates }
129
+ shippingRates={ shippingRates }
130
+ shippingRatesLoading={ shippingRatesLoading }
131
+ />
132
+ ) }
133
+ </div>
134
+ );
135
+ };
136
+
137
+ TotalsShippingItem.propTypes = {
138
+ currency: PropTypes.object.isRequired,
139
+ values: PropTypes.shape( {
140
+ total_shipping: PropTypes.string,
141
+ total_shipping_tax: PropTypes.string,
142
+ } ).isRequired,
143
+ isCheckout: PropTypes.bool,
144
+ showCalculator: PropTypes.bool,
145
+ showRatesWithoutAddress: PropTypes.bool,
146
+ };
147
+
148
+ export default TotalsShippingItem;
assets/js/base/components/cart-checkout/totals/totals-shipping-item/shipping-rate-selector.js ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
6
+ import { decodeEntities } from '@wordpress/html-entities';
7
+ import { getCurrencyFromPriceResponse } from '@woocommerce/base-utils';
8
+ import { ShippingRatesControl } from '@woocommerce/base-components/cart-checkout';
9
+ import { DISPLAY_CART_PRICES_INCLUDING_TAX } from '@woocommerce/block-settings';
10
+
11
+ const renderShippingRatesControlOption = ( option ) => {
12
+ const priceWithTaxes = DISPLAY_CART_PRICES_INCLUDING_TAX
13
+ ? parseInt( option.price, 10 ) + parseInt( option.taxes, 10 )
14
+ : parseInt( option.price, 10 );
15
+ return {
16
+ label: decodeEntities( option.name ),
17
+ value: option.rate_id,
18
+ description: (
19
+ <>
20
+ { Number.isFinite( priceWithTaxes ) && (
21
+ <FormattedMonetaryAmount
22
+ currency={ getCurrencyFromPriceResponse( option ) }
23
+ value={ priceWithTaxes }
24
+ />
25
+ ) }
26
+ { Number.isFinite( priceWithTaxes ) && option.delivery_time
27
+ ? ' — '
28
+ : null }
29
+ { decodeEntities( option.delivery_time ) }
30
+ </>
31
+ ),
32
+ };
33
+ };
34
+
35
+ const ShippingRateSelector = ( {
36
+ hasRates,
37
+ shippingRates,
38
+ shippingRatesLoading,
39
+ } ) => {
40
+ return (
41
+ <fieldset className="wc-block-components-totals-shipping__fieldset">
42
+ <legend className="screen-reader-text">
43
+ { hasRates
44
+ ? __( 'Shipping options', 'woo-gutenberg-products-block' )
45
+ : __(
46
+ 'Choose a shipping option',
47
+ 'woo-gutenberg-products-block'
48
+ ) }
49
+ </legend>
50
+ <ShippingRatesControl
51
+ className="wc-block-components-totals-shipping__options"
52
+ collapsibleWhenMultiple={ true }
53
+ noResultsMessage={ __(
54
+ 'No shipping options were found.',
55
+ 'woo-gutenberg-products-block'
56
+ ) }
57
+ renderOption={ renderShippingRatesControlOption }
58
+ shippingRates={ shippingRates }
59
+ shippingRatesLoading={ shippingRatesLoading }
60
+ />
61
+ </fieldset>
62
+ );
63
+ };
64
+
65
+ export default ShippingRateSelector;
assets/js/base/components/cart-checkout/totals/totals-shipping-item/style.scss ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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__options {
11
+ .wc-block-components-radio-control__label,
12
+ .wc-block-components-radio-control__description,
13
+ .wc-block-components-radio-control__secondary-label,
14
+ .wc-block-components-radio-control__secondary-description {
15
+ flex-basis: 100%;
16
+ text-align: left;
17
+ }
18
+ }
19
+
20
+ .wc-block-components-radio-control__option,
21
+ .wc-block-components-radio-control__option-layout {
22
+ &:last-child::after {
23
+ display: none;
24
+ }
25
+ }
26
+
27
+ .wc-block-components-shipping-rates-control__no-results-notice {
28
+ margin-bottom: em($gap-small);
29
+ }
30
+
31
+ .wc-block-components-totals-shipping__change-address-button {
32
+ @include link-button();
33
+
34
+ &:hover,
35
+ &:focus,
36
+ &:active {
37
+ opacity: 0.8;
38
+ }
39
+ }
40
+
41
+ .wc-blocks-components-panel:last-child::after {
42
+ border-bottom-width: 0;
43
+ }
44
+ }
assets/js/base/components/cart-checkout/totals/totals-taxes-item/index.js ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import PropTypes from 'prop-types';
6
+ import {
7
+ TAXES_ENABLED,
8
+ DISPLAY_ITEMIZED_TAXES,
9
+ } from '@woocommerce/block-settings';
10
+
11
+ /**
12
+ * Internal dependencies
13
+ */
14
+ import TotalsItem from '../totals-item';
15
+ import './style.scss';
16
+
17
+ const TotalsTaxesItem = ( { currency, values } ) => {
18
+ const { total_tax: totalTax, tax_lines: taxLines } = values;
19
+
20
+ if ( ! TAXES_ENABLED ) {
21
+ return null;
22
+ }
23
+
24
+ if ( ! DISPLAY_ITEMIZED_TAXES ) {
25
+ return (
26
+ <TotalsItem
27
+ className="wc-block-components-totals-taxes"
28
+ currency={ currency }
29
+ label={ __( 'Taxes', 'woo-gutenberg-products-block' ) }
30
+ value={ parseInt( totalTax, 10 ) }
31
+ />
32
+ );
33
+ }
34
+
35
+ return (
36
+ <>
37
+ { taxLines.map( ( { name, price }, i ) => (
38
+ <TotalsItem
39
+ key={ `tax-line-${ i }` }
40
+ className="wc-block-components-totals-taxes"
41
+ currency={ currency }
42
+ label={ name }
43
+ value={ parseInt( price, 10 ) }
44
+ />
45
+ ) ) }{ ' ' }
46
+ </>
47
+ );
48
+ };
49
+
50
+ TotalsTaxesItem.propTypes = {
51
+ currency: PropTypes.object.isRequired,
52
+ values: PropTypes.shape( {
53
+ total_tax: PropTypes.string,
54
+ } ).isRequired,
55
+ };
56
+
57
+ export default TotalsTaxesItem;
assets/js/base/components/cart-checkout/totals/totals-taxes-item/style.scss ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ .wc-block-components-totals-taxes {
2
+ @include with-translucent-border(1px 0 0);
3
+ }
assets/js/base/components/checkbox-control/index.js CHANGED
@@ -12,14 +12,6 @@ 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,
@@ -46,15 +38,6 @@ const CheckboxControl = ( {
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>
12
 
13
  /**
14
  * Component used to show a checkbox control with styles.
 
 
 
 
 
 
 
 
15
  */
16
  const CheckboxControl = ( {
17
  className,
38
  onChange={ ( event ) => onChange( event.target.checked ) }
39
  { ...rest }
40
  />
 
 
 
 
 
 
 
 
 
41
  <span className="wc-block-components-checkbox__label">
42
  { label }
43
  </span>
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 CHANGED
@@ -1,93 +1,41 @@
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
- }
1
  .wc-block-components-checkbox {
2
  @include reset-typography();
3
+ display: block;
 
 
4
  position: relative;
5
 
6
  .wc-block-components-checkbox__input[type="checkbox"] {
 
7
  appearance: none;
8
+ border: 1px solid currentColor;
9
+ height: 1rem;
 
 
10
  margin: 0;
11
+ min-height: 16px;
12
+ min-width: 16px;
13
  overflow: hidden;
14
  position: static;
15
  vertical-align: middle;
16
+ width: 1rem;
17
 
18
  &:checked {
19
+ background: currentColor;
20
+ border-color: currentColor;
21
+
22
+ &::before {
23
+ color: #fff;
24
+ content: "\2713";
25
+ display: block;
26
+ height: calc(1rem - 2px);
27
+ min-height: 14px;
28
+ min-width: 14px;
29
+ margin: 0;
30
+ line-height: 100%;
31
+ text-align: center;
32
+ width: calc(1rem - 2px);
 
 
 
 
 
 
33
  }
34
  }
35
  }
36
 
37
+ .wc-block-components-checkbox__input[type="checkbox"] + .wc-block-components-checkbox__label {
38
+ padding-left: $gap-smaller;
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  vertical-align: middle;
40
  }
41
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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,7 +100,7 @@ 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
@@ -138,11 +128,10 @@ const CheckboxList = ( {
138
  </Fragment>
139
  ) ) }
140
  { shouldTruncateOptions && renderedShowLess }
141
- </>
142
  );
143
  }, [
144
  options,
145
- onChange,
146
  checked,
147
  showExpanded,
148
  limit,
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.value }>
106
  <li
128
  </Fragment>
129
  ) ) }
130
  { shouldTruncateOptions && renderedShowLess }
131
+ </Fragment>
132
  );
133
  }, [
134
  options,
 
135
  checked,
136
  showExpanded,
137
  limit,
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 CHANGED
@@ -1,2 +1,70 @@
1
- export { default as Chip } from './chip';
2
- export { default as RemovableChip } from './removable-chip';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import classNames from 'classnames';
6
+ import { __, sprintf } from '@wordpress/i18n';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import './style.scss';
12
+
13
+ /**
14
+ * Component used to render a "chip" -- a list item containing some text with
15
+ * an X button to remove/dismiss each chip.
16
+ *
17
+ * Each chip defaults to a list element but this can be customized by providing
18
+ * a wrapperElement.
19
+ */
20
+ const Chip = ( {
21
+ text,
22
+ screenReaderText,
23
+ element = 'li',
24
+ className = '',
25
+ onRemove = () => {},
26
+ disabled = false,
27
+ radius = 'small',
28
+ } ) => {
29
+ const Wrapper = element;
30
+ const wrapperClassName = classNames(
31
+ className,
32
+ 'wc-block-components-chip',
33
+ 'wc-block-components-chip--radius-' + radius
34
+ );
35
+
36
+ return (
37
+ // @ts-ignore
38
+ <Wrapper className={ wrapperClassName }>
39
+ <span aria-hidden="true" className="wc-block-components-chip__text">
40
+ { text }
41
+ </span>
42
+ <span className="screen-reader-text">
43
+ { screenReaderText ? screenReaderText : text }
44
+ </span>
45
+ <button
46
+ className="wc-block-components-chip__remove"
47
+ onClick={ onRemove }
48
+ disabled={ disabled }
49
+ aria-label={ sprintf(
50
+ /* translators: %s chip text. */
51
+ __( 'Remove coupon "%s"', 'woo-gutenberg-products-block' ),
52
+ text
53
+ ) }
54
+ >
55
+
56
+ </button>
57
+ </Wrapper>
58
+ );
59
+ };
60
+
61
+ Chip.propTypes = {
62
+ text: PropTypes.string.isRequired,
63
+ screenReaderText: PropTypes.string,
64
+ element: PropTypes.elementType,
65
+ className: PropTypes.string,
66
+ onRemove: PropTypes.func,
67
+ radius: PropTypes.oneOf( [ 'none', 'small', 'medium', 'large' ] ),
68
+ };
69
+
70
+ export default 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 CHANGED
@@ -1,23 +1,13 @@
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
  }
@@ -25,41 +15,30 @@
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
  }
1
  .wc-block-components-chip {
2
+ display: inline-block;
3
+ background: $core-grey-light-500;
4
+ padding: 0.365em 0.5em;
 
 
5
  margin: 0 0.365em 0.365em 0;
6
+ color: $core-grey-dark-800;
7
  border-radius: 0;
8
+ line-height: 1em;
9
  max-width: 100%;
10
 
 
 
 
 
 
 
 
 
 
11
  &.wc-block-components-chip--radius-small {
12
  border-radius: 3px;
13
  }
15
  border-radius: 0.433em;
16
  }
17
  &.wc-block-components-chip--radius-large {
18
+ border-radius: 0.865em;
19
+ padding: 0.365em 0.75em;
 
20
  }
21
  .wc-block-components-chip__text {
 
 
 
22
  padding-right: 0.5em;
23
  }
 
 
 
24
  .wc-block-components-chip__remove {
25
  @include font-size(smaller);
26
  background: transparent;
27
  border: 0;
28
  appearance: none;
29
+ float: none;
 
 
 
30
  vertical-align: middle;
31
+ line-height: 1.33em;
32
+ padding: 0.66em; // Should equate to ~8px; chip has ~6px padding, and font size difference/2 is 2px.
33
+ margin: -0.66em;
34
 
35
+ &:hover,
36
+ &:focus {
37
+ color: #d94f4f;
38
+ }
39
+ &:disabled {
40
+ color: $core-grey-dark-100;
41
+ cursor: not-allowed;
42
+ }
43
+ }
 
 
44
  }
assets/js/base/components/chip/test/__snapshots__/index.js.snap CHANGED
@@ -1,176 +1,63 @@
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
@@ -178,135 +65,41 @@ exports[`RemovableChip should render screen reader text aria label 1`] = `
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
- `;
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  exports[`Chip with custom wrapper should render a chip made up of a div instead of a li 1`] = `
4
  <div
5
  className="wc-block-components-chip wc-block-components-chip--radius-small"
6
  >
7
  <span
8
+ aria-hidden="true"
9
  className="wc-block-components-chip__text"
10
  >
11
  Test
12
  </span>
 
 
 
 
 
 
 
13
  <span
14
+ className="screen-reader-text"
 
15
  >
16
+ Test
 
 
17
  </span>
18
  <button
19
+ aria-label="Remove coupon \\"Test\\""
20
  className="wc-block-components-chip__remove"
21
  disabled={false}
22
  onClick={[Function]}
 
23
  >
24
+
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  </button>
26
+ </div>
27
  `;
28
 
29
+ exports[`Chip without custom wrapper should render defined radius 1`] = `
30
  <li
31
+ className="wc-block-components-chip wc-block-components-chip--radius-large"
32
  >
33
  <span
34
+ aria-hidden="true"
35
  className="wc-block-components-chip__text"
36
  >
37
+ Test
 
 
38
  </span>
39
  <span
40
  className="screen-reader-text"
41
  >
42
+ Test
43
  </span>
44
  <button
45
+ aria-label="Remove coupon \\"Test\\""
46
  className="wc-block-components-chip__remove"
47
  disabled={false}
48
  onClick={[Function]}
 
49
  >
50
+
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  </button>
52
  </li>
53
  `;
54
 
55
+ exports[`Chip without custom wrapper should render text and the remove button 1`] = `
56
  <li
57
+ className="wc-block-components-chip wc-block-components-chip--radius-small"
58
  >
59
  <span
60
+ aria-hidden="true"
61
  className="wc-block-components-chip__text"
62
  >
63
  Test
65
  <span
66
  className="screen-reader-text"
67
  >
68
+ Test
69
  </span>
70
  <button
71
+ aria-label="Remove coupon \\"Test\\""
72
  className="wc-block-components-chip__remove"
73
  disabled={false}
74
  onClick={[Function]}
 
75
  >
76
+
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  </button>
78
  </li>
79
  `;
80
 
81
+ exports[`Chip without custom wrapper should render with disabled remove button 1`] = `
82
  <li
83
+ className="wc-block-components-chip wc-block-components-chip--radius-small"
84
  >
85
  <span
86
+ aria-hidden="true"
87
  className="wc-block-components-chip__text"
88
  >
89
  Test
90
  </span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  <span
92
+ className="screen-reader-text"
 
93
  >
94
  Test
95
  </span>
96
  <button
97
+ aria-label="Remove coupon \\"Test\\""
98
  className="wc-block-components-chip__remove"
99
  disabled={true}
100
  onClick={[Function]}
 
101
  >
102
+
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  </button>
104
  </li>
105
  `;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/base/components/chip/test/index.js CHANGED
@@ -6,101 +6,37 @@ import TestRenderer from 'react-test-renderer';
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();
6
  /**
7
  * Internal dependencies
8
  */
9
+ import Chip from '../';
10
 
11
  describe( 'Chip', () => {
12
+ describe( 'without custom wrapper', () => {
13
+ test( 'should render text and the remove button', () => {
14
+ const component = TestRenderer.create( <Chip text="Test" /> );
15
 
16
+ expect( component.toJSON() ).toMatchSnapshot();
17
+ } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
+ test( 'should render defined radius', () => {
 
20
  const component = TestRenderer.create(
21
+ <Chip text="Test" radius="large" />
22
  );
23
 
24
  expect( component.toJSON() ).toMatchSnapshot();
25
  } );
 
 
26
 
27
+ test( 'should render with disabled remove button', () => {
28
+ const component = TestRenderer.create(
29
+ <Chip text="Test" disabled={ true } />
30
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
+ expect( component.toJSON() ).toMatchSnapshot();
33
+ } );
34
  } );
35
 
36
+ describe( 'with custom wrapper', () => {
37
+ test( 'should render a chip made up of a div instead of a li', () => {
38
  const component = TestRenderer.create(
39
+ <Chip text="Test" element="div" />
40
  );
41
 
42
  expect( component.toJSON() ).toMatchSnapshot();
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.js ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import { ALLOWED_COUNTRIES } from '@woocommerce/block-settings';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import CountryInput from './country-input.js';
11
+
12
+ const BillingCountryInput = ( props ) => {
13
+ return <CountryInput countries={ ALLOWED_COUNTRIES } { ...props } />;
14
+ };
15
+
16
+ BillingCountryInput.propTypes = {
17
+ onChange: PropTypes.func.isRequired,
18
+ className: PropTypes.string,
19
+ label: PropTypes.string,
20
+ value: PropTypes.string,
21
+ };
22
+
23
+ export default BillingCountryInput;
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.js ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import PropTypes from 'prop-types';
6
+ import { decodeEntities } from '@wordpress/html-entities';
7
+ import classnames from 'classnames';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import { ValidatedSelect } from '../select';
13
+
14
+ const CountryInput = ( {
15
+ className,
16
+ countries,
17
+ id,
18
+ label,
19
+ onChange,
20
+ value = '',
21
+ autoComplete = 'off',
22
+ required = false,
23
+ errorId,
24
+ errorMessage = __(
25
+ 'Please select a country.',
26
+ 'woo-gutenberg-products-block'
27
+ ),
28
+ } ) => {
29
+ const options = Object.keys( countries ).map( ( key ) => ( {
30
+ key,
31
+ name: decodeEntities( countries[ key ] ),
32
+ } ) );
33
+
34
+ return (
35
+ <div
36
+ className={ classnames(
37
+ className,
38
+ 'wc-block-components-country-input'
39
+ ) }
40
+ >
41
+ <ValidatedSelect
42
+ id={ id }
43
+ label={ label }
44
+ onChange={ onChange }
45
+ options={ options }
46
+ value={ options.find( ( option ) => option.key === value ) }
47
+ errorId={ errorId }
48
+ errorMessage={ errorMessage }
49
+ required={ required }
50
+ />
51
+ { autoComplete !== 'off' && (
52
+ <input
53
+ type="text"
54
+ aria-hidden={ true }
55
+ autoComplete={ autoComplete }
56
+ value={ value }
57
+ onChange={ ( event ) => {
58
+ const textValue = event.target.value;
59
+ const foundOption = options.find(
60
+ ( option ) => option.key === textValue
61
+ );
62
+ onChange( foundOption ? foundOption.key : '' );
63
+ } }
64
+ style={ {
65
+ minHeight: '0',
66
+ height: '0',
67
+ border: '0',
68
+ padding: '0',
69
+ position: 'absolute',
70
+ } }
71
+ tabIndex={ -1 }
72
+ />
73
+ ) }
74
+ </div>
75
+ );
76
+ };
77
+
78
+ CountryInput.propTypes = {
79
+ countries: PropTypes.objectOf( PropTypes.string ).isRequired,
80
+ onChange: PropTypes.func.isRequired,
81
+ className: PropTypes.string,
82
+ id: PropTypes.string,
83
+ label: PropTypes.string,
84
+ value: PropTypes.string,
85
+ autoComplete: PropTypes.string,
86
+ errorId: PropTypes.string,
87
+ errorMessage: PropTypes.string,
88
+ };
89
+
90
+ export default CountryInput;
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 → index.js} RENAMED
File without changes
assets/js/base/components/country-input/shipping-country-input.js ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import PropTypes from 'prop-types';
5
+ import { SHIPPING_COUNTRIES } from '@woocommerce/block-settings';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import CountryInput from './country-input.js';
11
+
12
+ const ShippingCountryInput = ( props ) => {
13
+ return <CountryInput countries={ SHIPPING_COUNTRIES } { ...props } />;
14
+ };
15
+
16
+ ShippingCountryInput.propTypes = {
17
+ onChange: PropTypes.func.isRequired,
18
+ className: PropTypes.string,
19
+ label: PropTypes.string,
20
+ value: PropTypes.string,
21
+ };
22
+
23
+ export default ShippingCountryInput;
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/index.js CHANGED
@@ -27,7 +27,7 @@ const StoryComponent = ( { label, errorMessage } ) => {
27
  } = useValidationContext();
28
  useEffect( () => {
29
  setValidationErrors( { country: errorMessage } );
30
- }, [ errorMessage, setValidationErrors ] );
31
  const updateCountry = ( country ) => {
32
  clearValidationError( 'country' );
33
  selectCountry( country );
27
  } = useValidationContext();
28
  useEffect( () => {
29
  setValidationErrors( { country: errorMessage } );
30
+ }, [ errorMessage ] );
31
  const updateCountry = ( country ) => {
32
  clearValidationError( 'country' );
33
  selectCountry( country );
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 CHANGED
@@ -19,17 +19,6 @@ 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 = '',
@@ -102,8 +91,6 @@ const DropdownSelector = ( {
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 */ }
@@ -155,7 +142,7 @@ const DropdownSelector = ( {
155
  checked.length > 0 && multiple
156
  ? null
157
  : sprintf(
158
- /* translators: %s attribute name. */
159
  __(
160
  'Any %s',
161
  'woo-gutenberg-products-block'
19
 
20
  /**
21
  * Component used to show an input box with a dropdown with suggestions.
 
 
 
 
 
 
 
 
 
 
 
22
  */
23
  const DropdownSelector = ( {
24
  attributeLabel = '',
91
  className={ classNames( classes, {
92
  'is-multiple': multiple,
93
  'is-single': ! multiple,
 
 
94
  } ) }
95
  >
96
  { /* eslint-disable-next-line jsx-a11y/label-has-for */ }
142
  checked.length > 0 && multiple
143
  ? null
144
  : sprintf(
145
+ // Translators: %s attribute name.
146
  __(
147
  'Any %s',
148
  'woo-gutenberg-products-block'
assets/js/base/components/dropdown-selector/menu.js CHANGED
@@ -38,7 +38,6 @@ const DropdownSelectorMenu = ( {
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'
38
  item: option.value,
39
  'aria-label': selected
40
  ? sprintf(
 
41
  __(
42
  'Remove %s filter',
43
  'woo-gutenberg-products-block'
assets/js/base/components/dropdown-selector/selected-chip.js CHANGED
@@ -2,24 +2,31 @@
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
 
2
  * External dependencies
3
  */
4
  import { __, sprintf } from '@wordpress/i18n';
 
5
 
6
  const DropdownSelectorSelectedChip = ( { onRemoveItem, option } ) => {
7
  return (
8
+ <button
9
  className="wc-block-dropdown-selector__selected-chip wc-block-components-dropdown-selector__selected-chip"
10
+ onClick={ () => {
 
11
  onRemoveItem( option.value );
12
  } }
13
+ onKeyDown={ ( e ) => {
14
+ if ( e.key === 'Backspace' || e.key === 'Delete' ) {
15
+ onRemoveItem( option.value );
16
+ }
17
+ } }
18
+ aria-label={ sprintf(
19
  __( 'Remove %s filter', 'woo-gutenberg-products-block' ),
20
  option.name
21
  ) }
22
+ >
23
+ <span className="wc-block-dropdown-selector__selected-chip__label wc-block-components-dropdown-selector__selected-chip__label">
24
+ { option.label }
25
+ </span>
26
+ <span className="wc-block-dropdown-selector__selected-chip__remove wc-block-components-dropdown-selector__selected-chip__remove">
27
+ 𝘅
28
+ </span>
29
+ </button>
30
  );
31
  };
32
 
assets/js/base/components/dropdown-selector/selected-value.js CHANGED
@@ -3,7 +3,6 @@
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 );
@@ -48,7 +47,7 @@ const DropdownSelectorSelectedValue = ( { onClick, onRemoveItem, option } ) => {
48
  option.name
49
  ) }
50
  >
51
- <Icon srcElement={ noAlt } size={ 16 } />
52
  </button>
53
  </div>
54
  );
3
  */
4
  import { __, sprintf } from '@wordpress/i18n';
5
  import { useEffect, useRef } from '@wordpress/element';
 
6
 
7
  const DropdownSelectorSelectedValue = ( { onClick, onRemoveItem, option } ) => {
8
  const labelRef = useRef( null );
47
  option.name
48
  ) }
49
  >
50
+ 𝘅
51
  </button>
52
  </div>
53
  );
assets/js/base/components/dropdown-selector/style.scss CHANGED
@@ -1,7 +1,3 @@
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;
@@ -9,37 +5,34 @@ $dropdown-selector-line-height: 18/14;
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,
@@ -47,23 +40,24 @@ $dropdown-selector-line-height: 18/14;
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
 
@@ -82,6 +76,7 @@ $dropdown-selector-line-height: 18/14;
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;
@@ -100,39 +95,50 @@ $dropdown-selector-line-height: 18/14;
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
 
@@ -155,14 +161,14 @@ $dropdown-selector-line-height: 18/14;
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,
 
 
 
 
1
  .wc-block-components-dropdown-selector {
2
  max-width: 300px;
3
  position: relative;
5
  }
6
 
7
  .wc-block-components-dropdown-selector__input-wrapper {
 
 
 
8
  align-items: center;
9
+ border: 1px solid #9f9f9f;
10
  border-radius: 4px;
11
  cursor: text;
12
  display: flex;
13
  flex-wrap: wrap;
14
+ padding: 2px;
15
 
16
  .is-disabled & {
17
+ background-color: $core-grey-light-500;
 
 
 
 
18
  }
19
+ }
20
 
21
+ .wc-block-components-dropdown-selector__placeholder {
22
+ @include font-size(small);
23
+ height: 1.8em;
24
+ margin: 0 $gap-smallest;
25
+ white-space: nowrap;
26
  }
27
 
28
  .wc-block-components-dropdown-selector__input {
29
  @include font-size(small);
30
+ height: 1.8em;
 
31
  min-width: 0;
 
32
 
33
  .is-single & {
34
+ margin: 0 4px;
35
+ padding: 0;
36
  width: 100%;
37
 
38
  &:hover,
40
  &:active {
41
  outline: 0;
42
  }
 
43
 
44
+ &:not(:first-child):focus {
45
+ margin-bottom: 1.5px;
46
+ margin-top: 1.5px;
47
+ }
48
 
49
+ &:not(:first-child):not(:focus) {
50
+ @include visually-hidden();
51
+ // Fixes an issue in Firefox that `flex: wrap` in the container was making
52
+ // this element to still occupy one line.
53
+ position: absolute;
54
+ }
55
  }
56
 
57
  .is-multiple & {
58
  flex: 1;
59
  min-width: 0;
60
+ margin: 1.5px;
61
  }
62
  }
63
 
76
 
77
  .wc-block-components-dropdown-selector {
78
  // Reset <button> styles
79
+ .wc-block-components-dropdown-selector__selected-chip,
80
  .wc-block-components-dropdown-selector__selected-value__label,
81
  .wc-block-components-dropdown-selector__selected-value__remove {
82
  background-color: transparent;
95
  }
96
 
97
  .wc-block-components-dropdown-selector__selected-value {
 
98
  align-items: center;
99
+ color: $core-grey-dark-600;
100
  display: inline-flex;
101
+ height: 1.8em;
102
+ padding: 1.5px 1.5px 1.5px 4px;
103
  width: 100%;
104
  }
105
 
106
+ .wc-block-components-dropdown-selector__selected-chip {
107
+ align-items: center;
108
+ background-color: $core-grey-light-600;
109
+ border: 1px solid #9f9f9f;
110
+ border-radius: 4px;
111
+ color: $core-grey-dark-600;
112
+ display: inline-flex;
113
+ height: 1.8em;
114
+ margin: 1.5px;
115
+ padding: 0 0 0 4px;
116
+ white-space: nowrap;
117
+
118
+ &:hover,
119
+ &:focus,
120
+ &:active {
121
+ background-color: $core-grey-light-400;
122
+ border: 1px solid #9f9f9f;
123
+ color: $core-grey-dark-600;
124
+ }
125
+ }
126
+
127
+ .wc-block-components-dropdown-selector__selected-value__label,
128
+ .wc-block-components-dropdown-selector__selected-chip__label {
129
+ @include font-size(small);
130
  flex-grow: 1;
 
131
  padding: 0;
132
  text-align: left;
133
  }
134
 
135
+ .wc-block-components-dropdown-selector__selected-value__remove,
136
+ .wc-block-components-dropdown-selector__selected-chip__remove {
137
  background-color: transparent;
138
  border: 0;
139
  display: inline-block;
140
  line-height: 1;
141
+ padding: 0 0.3em;
 
 
 
 
 
 
 
 
 
 
 
142
  }
143
  }
144
 
161
 
162
  .wc-block-components-dropdown-selector__list-item {
163
  @include font-size(small);
164
+ color: $core-grey-dark-600;
165
  cursor: default;
166
  list-style: none;
167
  margin: 0;
168
  padding: 0 $gap-smallest;
169
 
170
  &.is-selected {
171
+ background-color: $core-grey-light-600;
172
  }
173
 
174
  &:hover,
assets/js/base/components/filter-submit-button/index.js CHANGED
@@ -14,7 +14,7 @@ import './style.scss';
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' ),
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' ),
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.js ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import NumberFormat from 'react-number-format';
5
+ import classNames from 'classnames';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import './style.scss';
11
+
12
+ /**
13
+ * Formats currency data into the expected format for NumberFormat.
14
+ *
15
+ * @param {Object} currency Currency data.
16
+ * @return {Object} Formatted props for NumberFormat.
17
+ */
18
+ const currencyToNumberFormat = ( currency ) => {
19
+ return {
20
+ thousandSeparator: currency.thousandSeparator,
21
+ decimalSeparator: currency.decimalSeparator,
22
+ decimalScale: currency.minorUnit,
23
+ fixedDecimalScale: true,
24
+ prefix: currency.prefix,
25
+ suffix: currency.suffix,
26
+ isNumericString: true,
27
+ };
28
+ };
29
+
30
+ /**
31
+ * Formatted price component.
32
+ *
33
+ * Takes a price and returns a formatted price using the NumberFormat component.
34
+ *
35
+ * @param {Object} props Component props.
36
+ */
37
+ const FormattedMonetaryAmount = ( {
38
+ className,
39
+ value,
40
+ currency,
41
+ onValueChange,
42
+ ...props
43
+ } ) => {
44
+ if ( value === '-' ) {
45
+ return null;
46
+ }
47
+
48
+ const priceValue = value / 10 ** currency.minorUnit;
49
+
50
+ if ( ! Number.isFinite( priceValue ) ) {
51
+ return null;
52
+ }
53
+
54
+ const classes = classNames(
55
+ 'wc-block-formatted-money-amount',
56
+ 'wc-block-components-formatted-money-amount',
57
+ className
58
+ );
59
+ const numberFormatProps = {
60
+ displayType: 'text',
61
+ ...props,
62
+ ...currencyToNumberFormat( currency ),
63
+ value: undefined,
64
+ currency: undefined,
65
+ onValueChange: undefined,
66
+ };
67
+
68
+ // Wrapper for NumberFormat onValueChange which handles subunit conversion.
69
+ const onValueChangeWrapper = onValueChange
70
+ ? ( values ) => {
71
+ const minorUnitValue = values.value * 10 ** currency.minorUnit;
72
+ onValueChange( minorUnitValue );
73
+ }
74
+ : () => {};
75
+
76
+ return (
77
+ <NumberFormat
78
+ className={ classes }
79
+ { ...numberFormatProps }
80
+ value={ priceValue }
81
+ onValueChange={ onValueChangeWrapper }
82
+ />
83
+ );
84
+ };
85
+
86
+ export default FormattedMonetaryAmount;
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/label/index.js ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ const hasLabel = typeof label !== 'undefined' && label !== null;
22
+ const hasScreenReaderLabel =
23
+ typeof screenReaderLabel !== 'undefined' && screenReaderLabel !== null;
24
+
25
+ if ( ! hasLabel && hasScreenReaderLabel ) {
26
+ Wrapper = wrapperElement || 'span';
27
+ wrapperProps = {
28
+ ...wrapperProps,
29
+ className: classNames(
30
+ wrapperProps.className,
31
+ 'screen-reader-text'
32
+ ),
33
+ };
34
+
35
+ return <Wrapper { ...wrapperProps }>{ screenReaderLabel }</Wrapper>;
36
+ }
37
+
38
+ Wrapper = wrapperElement || Fragment;
39
+
40
+ if ( hasLabel && hasScreenReaderLabel && label !== screenReaderLabel ) {
41
+ return (
42
+ <Wrapper { ...wrapperProps }>
43
+ <span aria-hidden="true">{ label }</span>
44
+ <span className="screen-reader-text">
45
+ { screenReaderLabel }
46
+ </span>
47
+ </Wrapper>
48
+ );
49
+ }
50
+
51
+ return <Wrapper { ...wrapperProps }>{ label }</Wrapper>;
52
+ };
53
+
54
+ Label.propTypes = {
55
+ label: PropTypes.node,
56
+ screenReaderLabel: PropTypes.node,
57
+ wrapperElement: PropTypes.elementType,
58
+ wrapperProps: PropTypes.object,
59
+ };
60
+
61
+ Label.defaultProps = {
62
+ wrapperProps: {},
63
+ };
64
+
65
+ 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/loading-mask/index.js CHANGED
@@ -4,14 +4,13 @@
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,
@@ -19,27 +18,29 @@ const LoadingMask = ( {
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
  };
4
  import { __ } from '@wordpress/i18n';
5
  import PropTypes from 'prop-types';
6
  import classNames from 'classnames';
7
+ import { Spinner } from 'wordpress-components';
8
 
9
  /**
10
  * Internal dependencies
11
  */
12
  import './style.scss';
 
13
 
 
14
  const LoadingMask = ( {
15
  children,
16
  className,
18
  showSpinner = false,
19
  isLoading = true,
20
  } ) => {
21
+ // If nothing is loading, just pass through the children.
22
+ if ( ! isLoading ) {
23
+ return children;
24
+ }
25
+
26
  return (
27
  <div
28
+ className={ classNames(
29
+ className,
30
+ 'wc-block-components-loading-mask'
31
+ ) }
32
  >
33
+ { showSpinner && <Spinner /> }
34
  <div
35
+ className="wc-block-components-loading-mask__children"
36
+ aria-hidden={ true }
 
 
37
  >
38
  { children }
39
  </div>
40
+ <span className="screen-reader-text">
41
+ { screenReaderLabel ||
42
+ __( 'Loading…', 'woo-gutenberg-products-block' ) }
43
+ </span>
 
 
44
  </div>
45
  );
46
  };
assets/js/base/components/loading-mask/style.scss CHANGED
@@ -1,7 +1,6 @@
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;
@@ -10,8 +9,8 @@
10
  left: 50%;
11
  transform: translate(-50%, -50%);
12
  }
 
13
 
14
- .wc-block-components-loading-mask__children {
15
- opacity: 0.25;
16
- }
17
  }
1
  .wc-block-components-loading-mask {
2
  position: relative;
3
  min-height: 18px + $gap;
 
4
 
5
  .components-spinner {
6
  position: absolute;
9
  left: 50%;
10
  transform: translate(-50%, -50%);
11
  }
12
+ }
13
 
14
+ .wc-block-components-loading-mask__children {
15
+ opacity: 0.5;
 
16
  }
assets/js/base/components/panel/index.js ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { useState } from '@wordpress/element';
5
+ import classNames from 'classnames';
6
+ import PropTypes from 'prop-types';
7
+ import { Icon, chevronUp, chevronDown } from '@woocommerce/icons';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import './style.scss';
13
+
14
+ const Panel = ( {
15
+ children,
16
+ className,
17
+ initialOpen = false,
18
+ hasBorder = false,
19
+ title,
20
+ titleTag: TitleTag = 'div',
21
+ } ) => {
22
+ const [ isOpen, setIsOpen ] = useState( initialOpen );
23
+
24
+ return (
25
+ <div
26
+ className={ classNames( className, 'wc-blocks-components-panel', {
27
+ 'has-border': hasBorder,
28
+ } ) }
29
+ >
30
+ <TitleTag>
31
+ <button
32
+ aria-expanded={ isOpen }
33
+ className="wc-blocks-components-panel__button"
34
+ onClick={ () => setIsOpen( ! isOpen ) }
35
+ >
36
+ <Icon
37
+ aria-hidden="true"
38
+ className="wc-blocks-components-panel__button-icon"
39
+ srcElement={ isOpen ? chevronUp : chevronDown }
40
+ />
41
+ { title }
42
+ </button>
43
+ </TitleTag>
44
+ <div
45
+ className="wc-blocks-components-panel__content"
46
+ hidden={ ! isOpen }
47
+ >
48
+ { children }
49
+ </div>
50
+ </div>
51
+ );
52
+ };
53
+
54
+ Panel.propTypes = {
55
+ className: PropTypes.string,
56
+ hasBorder: PropTypes.bool,
57
+ initialOpen: PropTypes.bool,
58
+ title: PropTypes.element,
59
+ titleTag: PropTypes.string,
60
+ };
61
+
62
+ export default Panel;
assets/js/base/components/panel/style.scss ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-blocks-components-panel.has-border {
2
+ @include with-translucent-border( 1px 0 );
3
+
4
+ + .wc-blocks-components-panel.has-border::after {
5
+ border-top-width: 0;
6
+ }
7
+ }
8
+
9
+ .wc-blocks-components-panel__button {
10
+ &,
11
+ &:hover,
12
+ &:focus,
13
+ &:active {
14
+ @include reset-box();
15
+ @include reset-typography();
16
+ background: transparent;
17
+ box-shadow: none;
18
+ height: auto;
19
+ line-height: 1;
20
+ margin-bottom: em(6px);
21
+ margin-top: em(6px);
22
+ padding-bottom: em($gap-small - 6px);
23
+ padding-right: #{24px + $gap-smaller};
24
+ padding-top: em($gap-small - 6px);
25
+ position: relative;
26
+ text-align: left;
27
+ width: 100%;
28
+ }
29
+
30
+ > .wc-blocks-components-panel__button-icon {
31
+ fill: currentColor;
32
+ position: absolute;
33
+ right: 0;
34
+ top: 50%;
35
+ transform: translateY(-50%);
36
+ width: auto;
37
+ }
38
+ }
39
+
40
+ .wc-blocks-components-panel__content {
41
+ padding-bottom: em($gap);
42
+ overflow: auto;
43
+ }
44
+
45
+ .theme-twentytwenty .wc-blocks-components-panel__button {
46
+ background: transparent;
47
+ }
assets/js/base/components/payment-methods/express-checkout.js ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { useExpressPaymentMethods } from '@woocommerce/base-hooks';
6
+ import { StoreNoticesProvider } from '@woocommerce/base-context';
7
+ import Title from '@woocommerce/base-components/title';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import ExpressPaymentMethods from './express-payment-methods';
13
+ import './style.scss';
14
+
15
+ const ExpressCheckoutContainer = ( { children } ) => {
16
+ return (
17
+ <>
18
+ <div className="wc-block-components-express-checkout">
19
+ <div className="wc-block-components-express-checkout__title-container">
20
+ <Title
21
+ className="wc-block-components-express-checkout__title"
22
+ headingLevel="2"
23
+ >
24
+ { __(
25
+ 'Express checkout',
26
+ 'woo-gutenberg-products-block'
27
+ ) }
28
+ </Title>
29
+ </div>
30
+ <div className="wc-block-components-express-checkout__content">
31
+ <StoreNoticesProvider context="wc/express-payment-area">
32
+ { children }
33
+ </StoreNoticesProvider>
34
+ </div>
35
+ </div>
36
+ <div className="wc-block-components-express-checkout-continue-rule">
37
+ { __( 'Or continue below', 'woo-gutenberg-products-block' ) }
38
+ </div>
39
+ </>
40
+ );
41
+ };
42
+
43
+ const ExpressCheckoutFormControl = () => {
44
+ const { paymentMethods, isInitialized } = useExpressPaymentMethods();
45
+
46
+ if (
47
+ ! isInitialized ||
48
+ ( isInitialized && Object.keys( paymentMethods ).length === 0 )
49
+ ) {
50
+ return null;
51
+ }
52
+
53
+ return (
54
+ <ExpressCheckoutContainer>
55
+ <p>
56
+ { __(
57
+ 'In a hurry? Use one of our express checkout options below:',
58
+ 'woo-gutenberg-products-block'
59
+ ) }
60
+ </p>
61
+ <ExpressPaymentMethods />
62
+ </ExpressCheckoutContainer>
63
+ );
64
+ };
65
+
66
+ export default ExpressCheckoutFormControl;
assets/js/base/components/payment-methods/express-payment-methods.js ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import {
5
+ useExpressPaymentMethods,
6
+ usePaymentMethodInterface,
7
+ } from '@woocommerce/base-hooks';
8
+ import {
9
+ cloneElement,
10
+ isValidElement,
11
+ useCallback,
12
+ useRef,
13
+ } from '@wordpress/element';
14
+ import {
15
+ useEditorContext,
16
+ usePaymentMethodDataContext,
17
+ } from '@woocommerce/base-context';
18
+
19
+ const ExpressPaymentMethods = () => {
20
+ const { isEditor } = useEditorContext();
21
+ const {
22
+ setActivePaymentMethod,
23
+ activePaymentMethod,
24
+ setPaymentStatus,
25
+ } = usePaymentMethodDataContext();
26
+ const paymentMethodInterface = usePaymentMethodInterface();
27
+ const { paymentMethods } = useExpressPaymentMethods();
28
+ const previousActivePaymentMethod = useRef( activePaymentMethod );
29
+
30
+ const onExpressPaymentClick = useCallback(
31
+ ( paymentMethodId ) => () => {
32
+ previousActivePaymentMethod.current = activePaymentMethod;
33
+ setPaymentStatus().started();
34
+ setActivePaymentMethod( paymentMethodId );
35
+ },
36
+ [ setActivePaymentMethod, setPaymentStatus, activePaymentMethod ]
37
+ );
38
+ const onExpressPaymentClose = useCallback( () => {
39
+ setActivePaymentMethod( previousActivePaymentMethod.current );
40
+ }, [ setActivePaymentMethod ] );
41
+ const paymentMethodIds = Object.keys( paymentMethods );
42
+ const content =
43
+ paymentMethodIds.length > 0 ? (
44
+ paymentMethodIds.map( ( id ) => {
45
+ const expressPaymentMethod = isEditor
46
+ ? paymentMethods[ id ].edit
47
+ : paymentMethods[ id ].content;
48
+ return isValidElement( expressPaymentMethod ) ? (
49
+ <li key={ id } id={ `express-payment-method-${ id }` }>
50
+ { cloneElement( expressPaymentMethod, {
51
+ ...paymentMethodInterface,
52
+ onClick: onExpressPaymentClick( id ),
53
+ onClose: onExpressPaymentClose,
54
+ } ) }
55
+ </li>
56
+ ) : null;
57
+ } )
58
+ ) : (
59
+ <li key="noneRegistered">No registered Payment Methods</li>
60
+ );
61
+ return (
62
+ <ul className="wc-block-components-express-checkout-payment-event-buttons">
63
+ { content }
64
+ </ul>
65
+ );
66
+ };
67
+
68
+ export default ExpressPaymentMethods;
assets/js/base/components/payment-methods/index.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ export { default as PaymentMethods } from './payment-methods';
2
+ export { default as ExpressPaymentMethods } from './express-payment-methods';
3
+ export { default as ExpressCheckoutFormControl } from './express-checkout';
assets/js/base/components/payment-methods/no-payment-methods/index.js ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { Placeholder, Button, Notice } from 'wordpress-components';
6
+ import { Icon, card } from '@woocommerce/icons';
7
+ import { ADMIN_URL } from '@woocommerce/settings';
8
+ import { useEditorContext } from '@woocommerce/base-context';
9
+ import classnames from 'classnames';
10
+
11
+ /**
12
+ * Internal dependencies
13
+ */
14
+ import './style.scss';
15
+
16
+ /**
17
+ * Render content when no payment methods are found depending on context.
18
+ */
19
+ const NoPaymentMethods = () => {
20
+ const { isEditor } = useEditorContext();
21
+
22
+ return isEditor ? (
23
+ <NoPaymentMethodsPlaceholder />
24
+ ) : (
25
+ <NoPaymentMethodsNotice />
26
+ );
27
+ };
28
+
29
+ /**
30
+ * Renders a placeholder in the editor.
31
+ */
32
+ const NoPaymentMethodsPlaceholder = () => {
33
+ return (
34
+ <Placehol