{-|
<<models/flags.glb>>
-}
module FlagExample
( flagExample
, welshFlag
, trinidadAndTobagoFlag
, prideFlag
, transPrideFlag
) where
import Waterfall (Solid)
import qualified Waterfall.Solids as Solids
import qualified Waterfall.TwoD.Shape as Shape
import Waterfall (Colour)
import qualified Waterfall.Colour as Colour
import qualified Waterfall.Booleans as Booleans
import qualified Waterfall.Transforms as Transforms
import qualified Waterfall.Paint as Paint
import Waterfall.SVG.FromSVG (parsePath)
import Data.Function ((&))
import Linear (zero, unit, _x, _z, _y, _xz, (*^), (^*), V3 (..))
import Control.Lens ((^.), (.~), (%~))
import Data.Foldable (fold, foldl')
welshFlagInner :: String
welshFlagInner =
"M 310.61119,45.397489 310.56429,45.452169"
<> "C 303.84692,51.729623 294.56248,54.190159 286.28299,57.770529 276.1142,62.349269 272.86922,65.356087 270.83969,70.805689 260.92189,71.280109 250.91549,71.400959 241.08579,69.792019 235.65399,69.011349 229.93159,68.287379 224.63459,70.163109 218.19022,72.455534 214.22215,78.058513 210.94509,83.731469 209.68889,83.632469 208.94707,83.522044 207.68837,83.471904 206.98807,84.111881 206.38354,87.045079 209.17535,89.151389 211.72448,91.073406 211.53251,99.825837 206.58379,101.95413"
<> "L 205.83189,100.26467"
<> "C 210.11585,98.422275 209.3075,91.626955 207.59159,90.333029 204.25176,87.813336 204.63906,84.252874 205.09939,83.315449 199.23264,83.163198 193.81426,83.698839 187.32799,84.641629 177.6363,86.140122 160.31612,90.124633 148.48229,100.29397 148.20549,100.49978 147.91539,100.75937 147.98029,100.84866 148.02529,100.90031 148.20519,100.88952 148.59939,100.76663 162.14536,96.435595 189.49251,99.649997 189.3616,100.43546 190.024,97.758256 193.45649,91.566389 194.04479,89.561549"
<> "L 195.99589,90.094749"
<> "C 195.99589,90.094749 193.29829,99.543677 192.87289,101.46194 191.19715,112.67778 199.77285,113.46457 199.85329,113.4717 206.85726,114.07071 212.47538,103.76766 222.97249,100.82327 227.04889,99.626737 231.54509,100.19844 235.25759,102.23538 244.6624,107.3459 260.87999,131.73831 263.48029,140.19045 265.75309,138.20677 267.77039,134.07652 268.87289,131.27639 271.69429,133.43336 273.23329,136.77931 274.56039,140.0342 275.90389,136.52218 276.94079,131.5344 277.34159,127.77053 279.62139,128.27184 283.41359,129.02062 288.34939,132.77444 288.85929,128.79837 285.09909,125.36936 282.12289,123.38186 285.73539,123.72105 289.88829,124.08417 293.24589,122.69827 289.30299,117.53996 286.69359,116.66953 282.91589,114.70608 287.34069,114.14732 289.55609,112.26276 292.96469,109.55374 289.62279,108.0478 286.68489,106.65545 282.14629,104.4971 284.45989,102.40568 287.67899,99.531857 288.72439,96.655299"
<> "L 289.81619,97.036159"
<> "C 288.99669,99.379747 287.66669,102.29698 285.98419,104.21194 289.51289,105.94147 292.9745,107.81116 296.59359,109.34866 293.874,111.61469 291.03108,113.71034 287.82009,115.22756 291.6155,117.6008 294.6325,121.55876 296.05059,123.4971 293.25517,124.97511 290.1638,125.58693 287.02719,125.7178 290.65477,129.15993 290.77078,133.66022 290.26939,136.74124 286.97474,133.81277 283.00345,131.91767 278.76939,130.78616 278.31763,134.51369 276.8078,138.99174 274.75179,144.85647 273.85449,141.01851 271.88518,137.69943 269.03499,134.98147 267.55744,138.6279 265.38659,141.92745 262.24589,144.31741 261.5684,138.85575 257.90736,134.3948 254.81039,130.04592 251.91789,129.06271 249.02479,128.01476 245.95099,127.83889 232.29557,126.75228 218.66949,135.58848 206.51939,136.93264 203.58819,137.23257 200.52089,136.9981 197.83579,135.70217 198.27812,141.24855 204.1649,144.04878 203.54089,149.82327 203.53269,154.18925 204.54019,158.59039 206.63069,162.43655 208.87842,150.14836 212.6283,157.54625 213.58305,137.3377 216.11175,141.26467 218.39466,145.21554 219.62679,149.73733 224.65144,141.93199 231.80269,135.20755 247.13442,132.11971 246.78229,134.4691 245.54735,136.25149 247.24789,139.43069 249.06193,143.18472 259.77549,149.54792 269.33379,151.11233"
<> "L 269.01159,153.08694"
<> "C 258.71719,151.40206 252.793,149.21616 249.0155,145.55439 241.09108,149.77431 240.4212,159.98125 241.14629,163.75295 243.61356,168.47823 258.14684,172.13665 262.64239,170.5596"
<> "L 263.30449,172.44827"
<> "C 255.50379,175.18475 243.14712,171.0017 239.63088,166.01761 232.36809,166.35284 231.23448,176.41312 232.10938,182.316 235.13484,189.78888 254.64959,195.12348 256.93929,192.74514"
<> "L 258.37869,194.13186"
<> "C 253.41939,199.28548 233.73096,191.71458 230.09174,185.27704 222.76055,189.79441 219.59183,196.93041 219.80259,204.85647 222.18907,213.54783 252.67928,218.2686 253.41979,212.98342"
<> "L 255.40219,213.26272"
<> "C 254.12773,222.35816 222.75474,217.26127 218.33204,207.80519 211.0333,212.16626 209.3203,220.64669 211.14439,228.67874 214.228,239.70392 251.1873,244.52006 251.64049,236.96584"
<> "L 253.63659,237.08499"
<> "C 252.99529,247.77928 218.8633,243.27784 211.33228,233.90952 205.481,238.14086 201.19981,247.21678 206.30259,257.37014 211.98767,275.26967 250.41188,271.20448 251.89862,260.91659"
<> "L 253.63849,261.49124"
<> "C 253.63849,261.91771 253.56869,262.33182 253.43929,262.73147 269.60269,242.04633 290.46764,228.59643 311.29214,221.24709 309.23174,216.65373 307.75399,212.77879 307.64629,207.70217 307.59065,196.93623 320.35779,198.35475 326.11899,199.54202 322.0134,189.3607 311.43506,190.57848 307.93729,186.20413 304.97868,182.51243 306.65092,172.99637 308.06429,170.79592 313.75402,166.02059 325.29968,171.70774 331.08769,174.37405 331.82059,174.95698 331.74269,174.4376 331.56429,173.78225 330.68739,169.29806 328.40009,164.87093 324.46079,162.36038 319.57435,159.08528 314.49807,161.27077 312.07799,156.87991 309.84408,152.82211 315.49307,138.95106 315.49307,138.95106 319.969,137.65907 333.65337,140.67609 335.88459,143.67874 334.94659,138.65202 332.19239,133.70326 327.66389,131.10256 321.77559,128.80071 315.32196,128.96898 316.15609,120.90334 316.61858,112.6621 322.28078,113.4336 326.74085,114.51216 322.65035,109.8941 318.64557,107.7479 312.90417,105.67329 308.02476,104.20935 302.97021,98.892834 302.97021,98.892834 302.97021,98.892834 292.01835,101.85524 292.2155,98.897984"
<> "L 292.50118,96.825123"
<> "C 297.22955,98.262331 306.0162,95.562136 308.72439,92.786159 306.69689,91.599989 304.65839,89.674269 304.70489,87.145529 307.19107,79.908519 316.61029,77.00905 322.86307,73.258383 320.80677,73.722403 319.8994,73.458864 318.57409,73.297879 323.60794,67.778558 325.56517,60.915102 326.05839,53.543969 322.23669,56.649499 317.46039,58.208349 312.83189,59.674829 311.23579,60.157929 293.27969,65.040489 286.83379,68.018579 280.38799,70.996659 275.32339,74.999919 273.32599,81.286159"
<> "L 271.41979,80.680689"
<> "C 273.63939,73.694939 279.28659,69.301089 285.99399,66.202169 292.49189,63.200019 300.15839,60.506279 306.95489,58.586939 308.95809,54.451359 310.32019,50.003309 310.61119,45.397489"
<> "Z"
<> "M 522.73419,54.047879"
<> "C 483.67475,76.298899 443.23191,96.571301 406.54279,122.71584 386.02003,137.66927 378.61365,147.55435 375.55059,155.18069 371.46181,165.20975 376.40405,174.97455 373.77909,202.17874 384.33095,190.21833 387.95663,174.97292 394.14239,160.73342 400.76639,146.10767 415.92029,132.09906 436.20099,116.51858 456.48159,100.93812 482.85449,86.313609 511.20489,68.874049"
<> "L 512.25179,70.577169"
<> "C 483.91609,88.007619 458.25189,104.30776 438.08379,119.80178 427.46709,127.95799 420.46799,133.39102 413.31429,141.13186 438.93779,131.36385 461.29759,123.13373 487.10139,113.68655 503.76569,107.58544 518.86429,104.08976 531.97439,99.407247 526.74189,99.600937 517.92449,97.903349 515.36699,86.969749 514.18289,82.020279 515.66549,72.962039 522.73419,54.047879"
<> "Z"
<> "M 139.93539,205.92874"
<> "C 142.72739,201.90413 147.06339,199.40832 150.85139,196.45022 154.16749,193.46494 155.11849,188.22223 153.25759,184.20022 149.85159,180.08351 145.88721,181.57009 142.56229,184.70608 140.13706,187.67459 139.47359,189.04286 138.07826,190.54153 137.81791,197.32185 137.28592,203.37458 139.93539,205.92874"
<> "Z"
<> "M 707.06429,93.036159 706.88849,93.204129"
<> "C 697.18115,104.05845 687.78639,113.94257 644.61309,155.01467 653.08589,155.31241 661.57949,154.80369 669.98619,153.73733 672.15819,153.46077 672.68569,153.20515 674.83579,152.79592 679.20579,143.72978 683.69949,134.72452 686.84159,125.73538"
<> "L 688.71659,126.43069"
<> "C 686.78179,131.6515 671.09269,170.06161 667.84749,177.6846 671.87389,180.41409 676.11309,184.76788 679.10329,188.62795 684.55249,174.40867 694.15519,137.49514 695.95299,132.04592"
<> "L 697.91389,132.4385"
<> "C 697.24152,138.43588 695.22039,146.47712 693.16519,156.05135 695.32499,159.05034 696.80169,159.84047 699.53499,162.33499 704.37869,166.81387 708.41149,170.16555 714.30059,173.13381 703.30324,143.10274 706.17927,101.66053 707.06429,93.036159"
<> "Z"
<> "M 102.99589,99.004909"
<> "C 106.76199,107.70001 129.09059,133.09625 138.26939,136.11428 135.84849,131.30295 131.08119,125.44845 129.98809,120.25491 135.04769,119.62708 143.41959,115.49311 146.06039,113.61038 137.91959,114.44648 112.45549,105.48846 102.99589,99.004909"
<> "Z"
<> "M 246.31096,116.26293"
<> "C 222.33504,121.12332 139.50364,125.25442 135.58844,122.17819"
<> "L 133.39721,122.88742 137.43729,129.30178"
<> "C 167.26269,127.14178 197.07419,133.23117 214.91189,132.39944 214.91189,132.39944 225.66589,127.56445 231.49589,126.78225 238.95589,125.78138 246.81186,124.49319 252.37926,126.06957"
<> "Z"
<> "M 619.56429,170.64553"
<> "C 607.58679,173.13682 594.88449,181.11217 592.27129,193.96975 591.30149,199.21214 591.84529,204.84474 594.31229,209.61624 601.12395,222.78904 620.38565,223.71853 627.24789,223.61428 639.68282,223.41937 650.17368,218.48552 653.48809,216.751 654.07039,210.68919 652.88489,207.98145 649.97439,204.26663 648.20169,205.54781 644.77139,207.2593 642.73419,208.08303 635.39088,211.26838 621.4477,210.8871 616.00959,208.16311 610.75406,205.57471 609.67553,198.30746 614.61509,194.42483 619.40548,190.60246 626.2651,190.17674 629.09359,190.17678 635.93719,190.24681 647.27509,191.25335 653.89049,205.32717 660.50589,219.40099 654.05159,226.49579 650.65019,229.9053 645.83099,234.76841 638.68909,236.94757 632.22049,238.92092 613.66474,244.40186 598.17776,241.53611 590.59939,239.3467 570.97307,234.27897 548.36741,231.78964 535.02129,231.06155 527.4176,230.65423 519.23346,230.68057 515.85139,230.94631 509.76917,240.60968 509.54022,251.36469 516.35529,260.33499 492.56463,254.8355 459.74221,264.1143 451.28299,287.05374 433.54642,279.71995 407.2588,285.17278 395.10729,307.6885 387.04589,289.42796 368.60795,291.03377 364.33579,291.62795 369.08879,302.21679 368.03169,314.52519 361.55449,324.14553 364.57869,325.0381 367.74549,325.50047 370.88659,325.04202 380.54439,323.76269 380.93479,316.89146 396.76159,316.91311 402.71409,316.92125 408.86419,317.84247 413.26549,318.36624"
<> "L 413.02909,320.35256"
<> "C 408.57339,319.82233 402.50429,318.92097 396.75759,318.91311 387.45029,318.51311 380.12149,322.31389 380.07989,332.3135 380.17829,337.63809 382.85229,343.01713 387.50179,345.77834 396.07599,351.13623 408.96565,347.64118 416.33579,344.85647"
<> "L 417.04279,346.72756"
<> "C 409.56719,349.55215 403.39369,350.68209 398.23229,350.60452 400.26314,358.61703 408.27176,361.62286 413.74399,362.26663 423.45401,362.80352 433.51285,358.58372 438.53889,350.10647"
<> "L 440.30649,351.04202"
<> "C 437.18129,356.94445 431.87289,361.35863 425.55839,363.37405 430.35669,367.69836 451.59207,376.1988 458.23809,350.88186"
<> "L 460.17369,351.38967"
<> "C 457.80559,360.41034 455.78169,365.58151 450.15309,368.2102 456.65469,368.64246 460.20889,370.15171 463.91979,371.26858"
<> "L 463.34359,373.1846"
<> "C 440.14359,367.4522 432.36579,373.25617 430.34749,375.47561 429.00919,376.99763 428.48269,379.66893 428.41189,381.64749 430.93689,382.17672 433.27029,383.26018 434.72439,385.19241 437.318,388.63842 436.47019,391.12213 434.86699,391.95608"
<> "L 433.94319,390.18069"
<> "C 435.208,389.52279 433.61116,387.03919 433.12679,386.39553 431.3936,384.09265 425.2108,383.93453 421.17169,385.751 419.42829,386.54792 417.30799,388.69514 416.36699,390.42483 418.22239,390.51267 420.22939,391.39354 421.64239,392.71194 422.67739,393.67761 424.92789,396.89615 422.76549,398.66311"
<> "L 421.50179,397.11428"
<> "C 421.84649,396.81341 421.84799,395.63856 420.27909,394.17483 418.57118,392.58123 412.04513,391.73316 409.55649,391.68069 404.70919,391.44747 399.67869,392.14907 395.35729,394.45803 388.89699,398.5916 382.44959,402.7834 375.28889,405.9717 372.76989,406.90704 370.23639,407.39412 367.50959,407.48733 361.81169,407.83202 356.35269,405.72614 351.18539,403.57717 347.14989,401.94945 342.10089,400.01444 338.88069,399.15725 335.66049,398.30006 332.76749,399.65824 332.37289,400.77639 332.37289,400.77639 334.97409,402.63295 333.49589,406.00881 332.33399,408.66237 329.52909,407.66311 329.52909,407.66311 328.30989,409.52397 333.43089,413.5436 335.95099,413.81936 338.47109,414.09512 339.07479,414.30963 340.58379,413.85256 348.85919,410.99911 356.19509,411.2238 365.81619,411.41702"
<> "L 365.96859,413.49319"
<> "C 360.28369,412.53521 345.66849,413.15078 343.01939,415.26663 341.53619,416.45131 340.81009,418.39509 341.16589,418.60256 341.16589,418.60256 344.14839,418.47819 344.96659,421.52249 345.78479,424.56679 344.30839,425.251 344.30839,425.251 347.83032,427.86747 353.54719,426.74138 355.97249,424.3096 362.97237,417.66451 371.141,417.952 379.87869,419.16897 382.97411,419.56539 384.64384,413.48853 390.97439,414.34084 396.20796,414.94046 398.36843,421.19742 402.81619,419.39553 407.83911,416.17737 412.52095,413.65614 418.68339,415.61428 421.96609,416.73224 424.71819,418.91355 427.30649,421.15334 428.85035,422.35928 441.37182,431.81216 446.79869,425.55764 448.22649,423.95434 449.47379,421.60339 448.49979,419.46194 445.51945,413.48376 437.93209,418.18656 425.78889,414.38772 422.88749,413.5009 420.42099,411.67776 417.79279,410.22561 423.69859,408.74988 429.60969,407.24099 435.31229,405.08694 446.80319,400.86436 457.60109,394.78704 467.21659,387.21389 475.01389,381.07542 482.17809,373.85987 488.44119,366.07717 489.07159,365.30368 493.82051,359.10183 493.82051,359.10183 487.11512,359.59486 482.03271,357.25948 476.25885,355.88946"
<> "L 477.32106,353.66302"
<> "C 477.2289,353.77822 489.16713,356.47788 495.83769,356.20022 505.19403,355.0797 511.78072,359.86422 520.23029,366.39358 519.68149,361.82383 517.87599,357.22156 514.33379,354.14749 505.34905,346.18592 489.39366,347.56785 476.74009,341.65334 466.99122,337.02182 461.63861,328.43211 465.41389,318.78811 468.56865,311.49764 474.1789,305.23034 480.52954,300.47975 477.65834,298.665 476.42178,296.22316 476.83189,292.46389"
<> "L 478.71859,291.80178"
<> "C 481.07914,294.84756 489.22309,298.73299 493.29389,300.62455 497.36469,302.51611 512.06239,298.90163 515.08189,293.51467 516.99859,290.58866 520.66159,285.97286 517.39239,282.74124"
<> "L 518.60329,281.14944"
<> "C 521.87459,283.64116 521.24349,289.32843 516.85529,294.73733 513.17699,299.27132 507.56439,303.99931 500.22149,304.25849 501.60409,306.78138 507.49329,311.50186 515.74979,313.27834 522.8767,314.81013 532.06022,311.71962 536.56229,300.92874 538.55352,296.15621 538.33897,291.66822 536.31039,291.05764"
<> "L 536.88659,289.14163"
<> "C 540.43812,290.21077 540.83993,295.86973 538.40799,301.69827 536.21759,306.94848 532.35379,313.111 525.42759,315.3096 528.25436,318.87879 539.92466,320.43944 547.56429,318.77249 550.97529,317.85892 560.67939,310.39774 562.20099,305.6846 562.84687,303.15486 565.80266,299.02305 562.98419,296.98733"
<> "L 563.35729,295.02249"
<> "C 566.83546,295.68456 567.09684,300.30265 563.99399,306.57131 561.66569,311.27494 557.81319,316.21157 553.39829,318.39553 559.42751,323.60629 571.86739,323.80457 578.55449,320.001 578.56109,320.00644 578.56749,320.01118 578.57409,320.01663 583.3631,316.96335 589.08063,302.6118 583.63459,301.48342"
<> "L 584.04089,299.52444"
<> "C 591.8576,301.14416 585.99751,317.09301 580.18729,321.34084 590.80482,329.6443 600.13016,316.79065 601.31619,315.05569 603.12279,312.41322 604.02886,309.96992 602.24399,308.96975"
<> "L 603.22249,307.22366"
<> "C 607.03318,309.359 604.37859,314.12196 602.96859,316.1846 601.12929,318.87507 598.62079,321.41462 596.80059,322.88186 596.82789,324.85108 596.92159,326.83014 597.86119,328.60647 599.13399,331.12659 601.55839,333.31352 604.31039,333.28225 607.06239,333.25098 610.55719,333.38182 613.40799,332.97952 615.05254,332.67555 617.55036,332.46094 617.68539,330.44436"
<> "L 619.66979,330.18264"
<> "C 620.09595,333.43375 616.47077,334.56718 613.68729,334.95999 610.49879,335.45972 607.66519,335.67865 605.21659,337.83303 603.76349,340.06004 603.93639,342.92383 604.45689,345.42092 605.00809,347.64475 605.87869,350.01064 607.88259,351.10647 609.88639,352.2023 612.96869,352.61832 615.35729,352.08108 616.95635,351.72139 619.29198,350.74042 619.15219,348.08303"
<> "L 621.15019,347.97756"
<> "C 621.29498,350.72745 619.58314,353.18055 615.79669,354.03225 613.58679,354.52932 611.09879,354.4071 608.93729,353.70217 607.40029,357.17735 606.16959,360.91303 606.57799,364.7471 606.55079,367.55167 611.05379,370.27214 613.32799,370.02444 615.60209,369.77674 617.53719,368.51076 618.00179,366.62991"
<> "L 619.94319,367.11038"
<> "C 619.22679,370.01053 616.43709,371.69767 613.54479,372.01272 611.54549,372.23048 609.39089,371.80607 607.68539,370.60647 605.16709,372.54575 602.55859,374.60273 601.42759,377.66116 600.75029,379.50567 601.04269,381.45639 601.67949,383.26858 602.56359,385.03334 604.47599,385.84923 606.65219,385.79983 608.91149,385.74854 611.29249,384.67791 612.54479,382.88967"
<> "L 614.18339,384.03616"
<> "C 612.48269,386.46492 609.53819,387.73537 606.69909,387.79983 604.85739,387.84164 602.99089,387.34 601.57599,386.22561 601.56279,386.24961 601.55169,386.2736 601.54089,386.29788 595.33251,395.49519 586.96824,404.82261 574.84939,402.90139 568.73669,401.73432 563.41539,398.16073 558.73229,394.21584 552.61265,389.76424 548.59254,380.97576 540.47439,379.89553 539.30469,379.80182 537.17559,380.66116 537.17559,380.66116 537.17559,380.66116 539.88059,383.02587 538.49009,386.42874 537.05549,389.76684 534.26349,389.35061 534.26349,389.35061 535.19256,393.76354 543.28283,393.45434 545.09749,398.38772 549.03169,398.37923 556.91009,399.16429 559.24589,399.65334"
<> "L 561.67169,402.68655"
<> "C 560.89659,402.18487 554.81989,401.17222 548.52129,400.72561 542.33328,401.14691 529.77169,398.78216 527.64829,403.05178 527.64829,403.05178 531.60819,402.91862 531.66589,406.29202 531.72099,409.66543 528.07799,409.77834 528.07799,409.77834 528.99839,411.09324 530.78179,412.35736 534.05059,412.05569 546.64918,410.893 548.97066,410.89242 552.75477,414.46169 557.3415,413.54236 562.3419,413.60757 565.46211,414.01586"
<> "L 567.1205,415.62781"
<> "C 567.1205,415.62781 540.95672,416.68321 541.33189,423.3467 541.33189,423.3467 545.33039,422.86009 545.95299,425.46194 547.28979,429.6733 545.62479,430.4092 545.62479,430.4092 551.9539,433.05506 555.83765,428.27382 559.69509,424.36233 563.86389,421.24578 569.01849,419.7312 574.12289,419.0596 590.12404,417.26669 587.38643,425.2465 597.95879,423.41116 607.72994,421.47422 608.72444,414.94604 621.93929,417.23538 626.55509,418.11194 631.15489,419.80343 634.78299,422.86233 637.66455,426.01739 641.91976,428.54389 646.23419,426.67288 648.25239,425.5095 648.69009,422.94038 648.62869,420.80178 648.35975,415.28032 641.39814,415.46021 637.31429,414.42874 625.21169,411.55956 624.99007,401.41454 625.55839,396.79006 626.76676,385.96445 632.03516,372.24557 634.62679,356.54788 636.43847,345.10931 638.18475,332.54497 626.26261,315.77987 635.67713,317.361 641.00141,317.9736 655.70328,325.41808 649.74051,318.40335 646.88246,316.24335 639.34446,311.25382 615.90166,295.86537 614.71754,302.78845 590.43339,286.10256 586.40959,284.63951 563.27159,262.66912 556.60329,256.43655 549.34299,249.65056 542.62159,245.34317 536.26739,245.92874"
<> "L 536.08379,243.9385"
<> "C 543.45659,243.25907 550.46269,248.19405 557.94509,254.95217 565.34869,261.63898 576.62817,270.23798 585.78147,277.59801 590.45927,277.5629 591.79799,277.47498 596.45099,276.94827 602.19604,276.36879 613.10193,274.81094 625.67949,270.8096 627.85689,270.11858 630.17719,269.31355 632.21659,268.55374 644.11219,264.08548 655.59119,258.04754 665.10529,249.53225 672.35959,243.03486 678.33409,234.82674 681.07989,225.39944 683.29469,217.86011 683.42269,209.75976 681.75759,202.09866 680.16439,194.79365 676.28099,187.98517 670.65409,183.04006 663.79529,176.91565 654.98829,173.41832 646.08579,171.52639 643.51714,170.97709 630.18631,168.35382 619.56429,170.64553"
<> "Z"
<> "M 349.53889,376.10256"
<> "C 349.34119,376.10216 349.14489,376.11182 348.95099,376.13186 347.55699,376.27594 346.25369,377.11233 346.25369,377.11233 346.25369,377.11233 349.24599,378.78198 347.93149,381.8721 346.61699,384.96218 343.72639,385.54788 343.72639,385.54788 343.72639,385.54788 344.82929,388.32869 346.17169,389.0967 347.90789,390.07986 349.98629,389.89215 351.87289,390.376 360.24718,392.09908 368.3864,396.91057 374.47049,402.75686 379.77909,401.82889 385.23459,398.20544 390.80259,395.46194 385.74939,396.1716 380.48459,396.16689 375.72829,394.16311 371.89409,392.61564 368.94969,389.96551 366.49199,386.69045 362.98879,382.48201 358.62899,378.77194 353.41589,376.91116 352.36339,376.56838 350.92249,376.10538 349.53889,376.10256"
<> "Z"
<> "M 157.93149,387.50295"
<> "C 156.85359,387.51763 156.25369,387.76663 156.25369,387.76663 156.25369,387.76663 157.99879,389.76733 156.55449,392.82522 154.81169,396.36962 150.72049,393.8135 150.72049,393.8135 150.48169,393.38359 148.41819,397.70472 149.28299,401.77053 160.06349,395.01072 171.09019,395.90812 178.19319,396.04006 174.81129,394.67035 167.36699,391.73177 165.32209,390.5303 162.97689,389.30146 160.71639,387.44363 157.93149,387.50295"
<> "Z"
<> "M 134.54869,192.4092"
<> "C 136.74177,182.20849 137.85888,184.45707 138.29669,174.13186 138.38324,167.34004 136.23568,162.65959 129.39239,164.41116 128.25448,164.68539 121.8998,166.64354 126.17169,175.42483 122.4104,180.74563 122.40415,186.5283 123.78109,192.50491 122.16099,191.83964 120.40159,191.4677 118.88849,190.56936 116.25829,188.79311 115.05779,185.69697 113.76739,182.93069 111.61697,177.49668 108.45984,172.43692 102.08189,175.29592 97.996758,177.24948 95.821298,183.50154 101.83769,187.39358 103.47607,187.95133 98.876778,192.49969 102.47439,197.48733 110.36895,205.22674 121.64467,206.77738 113.29279,221.10842 112.02259,224.84703 111.06679,229.0169 112.39829,232.876 114.38,239.64972 112.82155,244.69177 107.33769,246.48538 106.14239,247.53656 105.81419,249.20596 105.26349,250.63577 103.98874,255.7671 101.37164,259.42073 96.407988,261.05178 94.414688,262.00497 94.022788,264.54215 94.343588,266.51467 94.809688,269.72839 97.041788,272.83644 100.30059,273.63186 105.78479,275.21569 107.7809,270.1937 108.54279,265.73147 109.60059,261.52104 112.30909,258.01721 114.41389,254.29592 116.98991,250.177 117.70512,245.39572 119.22249,240.84866 127.58584,269.95759 139.86453,281.48872 161.32989,302.18655 175.26696,315.93084 188.19802,332.35627 190.52909,358.15139 194.52639,352.59959 201.76985,341.16373 202.29089,330.57131 217.48847,330.08553 223.88634,328.48808 230.45879,326.69436 231.05199,326.49972 231.64469,326.34476 232.22049,326.67874 234.93029,327.69135 242.02569,328.34983 242.02569,328.34983 242.02569,328.34983 240.43509,333.36315 240.84939,335.45022 242.00195,344.25069 253.46958,344.49366 255.21079,341.73147"
<> "L 256.90219,342.79788"
<> "C 253.89704,347.56552 243.73961,344.71171 240.72829,341.08889 239.79669,341.50036 238.91529,342.00458 238.23419,342.79592 235.53149,345.68329 234.03199,349.65701 234.01349,353.60061 234.02372,362.51537 243.5583,362.93561 244.24589,361.626"
<> "L 246.01739,362.55569"
<> "C 244.13086,366.1487 234.96152,363.68048 232.71859,358.06545 231.35039,358.30161 229.99999,358.65756 229.15609,359.83108 227.8723,365.42414 222.93737,375.19541 225.28109,380.62405 227.64219,384.9502 235.32619,384.58207 235.57989,382.89163"
<> "L 237.55839,383.1885"
<> "C 236.8362,388.00924 224.259,386.92824 222.79089,379.53811 221.52304,381.73324 217.22943,388.43858 209.49789,393.51663 200.00947,400.23937 188.89514,398.6821 178.08969,397.88967 173.39969,397.55759 156.00209,398.33284 148.92949,404.26663 148.46219,404.74679 148.07799,405.29397 148.07799,405.29397 148.07799,405.29397 150.25199,406.34352 150.35729,409.43069 150.46259,412.51786 146.93929,413.67483 146.93929,413.67483 146.93929,413.67483 148.26939,416.06952 149.65019,417.30569 160.72629,408.0976 168.86609,408.82986 177.17759,411.30569"
<> "L 177.72049,412.8135"
<> "C 168.29839,409.85911 158.16179,412.28936 149.70489,419.32913 149.06179,419.81378 149.14529,420.37989 149.37869,420.96194 151.41279,420.32446 154.19179,421.23846 155.48029,423.99319 156.19109,425.51276 155.90259,427.95743 154.63849,428.81545 154.63849,428.81545 160.93329,431.41233 164.29479,431.20022 165.83407,431.11227 177.11817,430.2657 183.07209,424.11624 186.42799,420.98045 191.02029,419.37412 195.58189,419.36038 202.99139,419.13566 210.34716,422.55001 212.25759,419.93264 215.51489,416.77411 220.08629,414.98623 224.62089,415.07327 233.01474,415.17516 233.56726,422.31141 236.88069,423.376 243.23786,425.44826 242.93417,421.18149 250.02329,426.69241 253.8822,428.96202 260.93884,426.56065 262.86899,422.98538 264.00229,420.06808 262.77179,416.55404 260.39239,414.626 255.29832,410.41555 255.05784,416.22195 239.78889,411.4053 237.23429,410.58314 234.75999,409.5423 232.29479,408.48733 234.8047,396.77419 240.58826,385.86255 255.52909,370.2803 270.84816,357.81632 278.43738,346.45257 288.35794,330.65507 291.38014,342.43854 287.0648,343.94353 291.48029,352.30178 294.18283,357.82547 298.78073,361.90701 300.05839,367.8135 303.50019,363.5568 305.96969,358.32167 306.10919,352.77834 306.47912,344.86343 301.3393,333.22872 305.59919,326.13154 312.24739,315.0476 312.75385,308.63637 311.33135,301.34149 307.79315,303.07957 305.53669,304.96329 302.66979,307.83694 301.10399,299.10251 298.94599,292.4264 302.46269,283.01663 293.18009,286.99762 284.57859,292.69651 277.17559,300.79397 277.17559,290.41441 277.20219,282.2247 276.74399,275.74905 271.66539,277.30804 264.91389,277.82913 264.91389,277.82913"
<> "L 265.54869,275.66311"
<> "C 271.31159,275.17763 275.06969,274.3179 278.58379,273.1221 279.04499,278.82261 279.88419,282.29398 279.89239,294.26272 286.74988,285.29682 294.95791,281.79107 305.37679,278.74124 304.36356,286.91326 302.96349,295.14338 304.68339,303.32327 318.09052,291.84121 330.33831,289.38236 339.52909,302.38186 336.78399,279.14422 344.54949,251.39198 349.57209,236.00881 338.53079,244.54864 326.93429,261.91754 321.53689,272.73538"
<> "L 319.96659,271.49905"
<> "C 332.93814,245.33594 351.7579,231.73596 353.42759,230.5635 350.84317,237.96226 339.49991,272.52465 342.16979,302.00295 349.80342,260.20734 370.2125,228.30169 371.70879,226.00686 381.08773,247.20521 390.83588,268.39469 395.5758,291.19812 395.79997,274.14684 392.66053,240.40451 381.20879,216.39358 399.11411,225.12894 416.55632,239.43777 443.43399,270.51703 430.48167,240.90802 410.21535,223.31614 388.39623,203.71735 420.43343,209.1832 463.44493,225.83941 490.38063,241.67242 459.06223,216.97256 399.18398,189.54966 399.18398,189.54966 399.18398,189.54966 466.57762,188.02172 533.56702,197.06934 493.09634,183.51239 399.15002,179.56859 399.15002,179.56859 399.34685,178.87969 473.10822,150.77216 534.89123,138.90856 486.75996,142.90615 423.71515,157.54925 412.64344,160.20665 425.84178,148.19092 547.52719,99.533317 570.83969,92.729519"
<> "L 571.40219,94.647489"
<> "C 549.69489,101.00981 473.42738,131.08334 438.26488,151.72809 506.34848,137.09487 548.75669,129.75943 600.44509,127.02639"
<> "L 600.63259,129.01467"
<> "C 533.45909,138.23215 462.47999,158.91492 413.39829,178.04006 458.00369,176.41652 525.69389,185.88188 563.09549,203.88381 558.55939,197.97042 553.34979,188.94718 553.32989,181.46975 553.24419,172.65096 556.57189,165.3437 561.50179,158.13772 568.21479,148.3496 580.16079,141.11278 590.43929,135.31936 595.89909,132.25203 601.63979,129.68969 607.54479,127.60842 599.81259,124.10425 585.78199,117.44094 589.03299,104.39358 591.88959,92.662169 607.28729,79.587429 624.19909,66.899439 602.62909,75.620029 580.99799,84.196419 559.22249,92.389669 557.64319,92.980609 511.42269,109.40296 489.45879,117.44436 462.96099,127.14574 437.32609,136.55031 429.26349,139.11038 413.42413,142.69765 404.01784,149.81351 396.76349,164.37405 385.6223,190.51228 384.11078,209.80491 352.45299,215.81936"
<> "L 352.42369,215.63577"
<> "C 339.50697,216.77412 326.86569,219.59277 314.46469,223.31741 288.90679,231.90294 262.65709,248.14107 245.72639,277.82717"
<> "L 243.98809,276.83694"
<> "C 246.22539,272.91407 247.78812,270.68378 250.32422,267.20933 241.09704,274.56176 219.30206,274.1136 212.18754,268.84996 209.25134,272.3978 208.51659,275.20459 208.29609,279.59432 209.9262,313.16033 247.08635,302.09067 247.80839,296.23928"
<> "L 249.79279,296.48342"
<> "C 248.59876,306.15842 206.59887,314.32777 204.83969,279.33108 202.45439,279.18576 198.16749,279.11418 195.66779,280.20217 196.91529,283.45017 197.22179,287.56485 196.82799,290.97366 196.0542,297.6727 192.36672,297.81535 190.63259,297.31936"
<> "L 191.18339,295.39749"
<> "C 193.73158,296.1263 194.57012,293.09331 194.84159,290.74319 195.24049,287.29081 194.54169,282.70635 193.60529,280.68264 191.15766,274.5591 182.84376,274.20858 177.94709,274.57522 179.16713,282.8909 172.51671,290.20381 168.54279,287.79397"
<> "L 169.57989,286.08303"
<> "C 172.12559,287.62668 177.27454,280.05224 176.05259,275.07717 175.07819,269.44596 169.80399,267.0239 164.76349,265.5342 163.91359,265.2881 163.04329,265.15441 162.16779,265.0635 161.44251,270.60116 154.83865,276.96749 151.93929,273.83889"
<> "L 153.40609,272.47952"
<> "C 154.94292,274.13813 162.5904,266.51209 159.18729,259.56545 156.81703,254.42176 152.37771,250.80805 147.94909,247.48733 147.56945,238.01313 146.02457,225.75951 138.90999,213.7842 136.06475,207.28981 132.78884,201.01216 134.54869,192.4092"
<> "Z"
<> "M 410.99399,192.34866"
<> "C 439.45009,203.65947 474.62579,221.43808 506.96469,249.01858 504.20639,241.81287 511.16899,225.04558 516.26549,221.57522 526.10245,211.19191 544.61862,205.30221 553.31619,204.2842 519.13991,196.43436 451.80603,191.6176 410.99399,192.34866"
<> "Z"
<> "M 399.63849,210.83303"
<> "C 415.98449,223.95714 442.15976,251.3489 451.20666,278.69652 465.45328,249.73604 489.89022,252.76244 505.82818,255.55178 488.33931,241.61388 443.65233,219.35939 399.63849,210.83303"
<> "Z"
<> "M 385.33379,220.85256"
<> "C 393.38769,240.02741 400.19439,273.39595 398.07209,297.58889 410.30144,279.52561 429.01301,275.74188 446.2507,281.60125 433.3843,261.58304 408.24149,233.19005 385.33379,220.85256"
<> "Z"
<> "M 371.38069,230.31741"
<> "C 359.62349,249.04689 349.71479,276.88106 345.48619,299.39358 355.25879,283.19139 382.45672,283.01306 392.72829,298.38381 391.53119,278.44216 380.82129,252.08408 371.38069,230.31741"
<> "Z"
<> "M 362.29669,291.97756"
<> "C 350.5106,294.07296 344.43264,302.79079 342.33969,313.75491 338.17587,298.53917 324.76248,295.63673 314.16189,299.91311 315.76829,307.73888 314.92849,315.86881 307.97829,327.45608 304.59418,333.61557 307.61889,340.2055 308.4936,346.65815 314.13048,344.98758 318.72971,341.85026 322.12869,337.0928 322.49769,336.69106 329.74009,320.499 329.74009,308.94241"
<> "H 331.74009"
<> "C 331.74009,320.45799 329.42829,329.58722 325.42559,336.33499 331.70384,337.96022 338.21295,337.38892 344.29869,335.24905 366.37722,326.69329 367.27497,299.32778 362.29669,291.97756"
<> "Z"
welshFlagInnerHoles :: String
welshFlagInnerHoles =
"M 335.28499,231.75491"
<> "C 331.95019,236.91623 325.90199,246.35127 320.15019,260.20999"
<> "L 318.30449,259.44241"
<> "C 321.97039,250.60962 322.47329,245.27345 327.56429,237.18069 300.21689,239.04697 275.76529,254.31194 262.10329,269.49319"
<> "L 260.61699,268.1553"
<> "C 291.26889,234.09471 332.34959,231.87113 335.28499,231.75491"
<> "Z"
<> "M 320.31819,61.790059"
<> "C 320.31819,61.790059 314.50869,66.771169 310.67369,68.438499 307.89679,69.645759 305.24609,70.659649 302.66779,71.676779 305.42429,72.212189 308.12409,72.989839 310.81619,73.780299 297.61089,76.066889 288.43889,82.436619 287.08769,84.985379 286.14979,87.018029 287.43279,87.969649 288.94909,88.692409 290.47209,89.418369 294.85829,90.903149 299.87869,92.374049 295.54189,92.654759 290.20569,91.195769 288.33769,90.596699 282.37789,88.685509 283.63799,85.289029 284.17169,84.282249 285.94789,80.931999 295.49889,75.497579 301.51939,73.706079 299.23829,73.099139 297.72909,72.790589 295.39629,72.473659 307.23049,67.644009 303.81799,69.910599 309.98029,67.231469 313.74769,65.593559 320.31819,61.790059 320.31819,61.790059"
<> "Z"
<> "M 232.33379,81.545919"
<> "C 233.52079,81.495119 235.01819,81.613459 236.76939,81.827169 239.41339,82.149819 242.63089,82.691079 246.11509,83.227559 246.67259,83.313399 247.62847,91.400236 247.62847,91.400236 247.62847,91.400236 248.98499,83.657379 249.58189,83.741239 259.18679,85.090619 269.96349,85.805879 275.87479,82.051779"
<> "L 276.34749,84.282249"
<> "C 271.28959,87.494349 263.53349,87.653929 255.78299,86.924829 256.93379,91.900329 249.93939,93.707299 244.90219,93.159199 240.53049,92.683699 236.03869,87.952869 237.59159,83.889669 235.27849,83.170569 232.41729,82.747519 230.58769,83.170919"
<> "L 229.66389,82.473659"
<> "C 230.20329,81.759859 231.14679,81.596619 232.33379,81.545919"
<> "Z"
welshFlagOuter :: String
welshFlagOuter =
"M 311.50356,39.897694"
<> "C 308.25556,51.709694 274.685,52.774903 269.0754,67.679903 260.127,68.108903 252.58402,68.233304 244.86402,67.128304 232.67514,64.529883 217.13533,59.279781 208.54898,80.478723 185.16553,78.488912 153.56199,85.893013 142.41589,104.31936 160.42459,100.94436 176.95779,100.38261 190.83579,103.47561 189.65279,110.22561 197.03499,120.63061 207.36899,113.60061 216.29269,107.52798 228.51579,92.023319 244.80259,114.15139 220.91339,117.62351 168.83769,122.54672 139.60919,120.85452 144.80749,118.42504 149.95249,114.54061 152.45299,112.75491 141.52799,113.87891 111.11869,102.63106 98.423688,93.915059 102.85169,110.78706 129.71879,138.62825 145.95879,143.40725 144.10349,139.71366 141.28589,135.56063 138.60529,131.52639 158.24379,130.25104 177.49449,132.43331 196.23809,133.51663 194.61569,140.88403 201.98559,144.9645 201.75759,149.31155 201.46459,154.93555 203.23569,163.09135 208.25569,168.15334 208.54969,156.06135 215.33969,152.968 215.33969,144.251 217.40669,147.627 218.29259,152.126 218.88259,155.501 223.67159,147.338 229.54139,138.58424 244.56039,135.49124 244.39129,138.40863 245.43909,141.26419 247.45489,143.37991 238.89489,147.59891 236.89296,155.73882 238.36996,163.05082 232.16996,163.61382 227.00224,175.0507 228.47824,182.64472 218.73624,188.55069 216.90216,197.97323 217.11216,205.00523 205.09708,210.90282 205.80273,224.45728 209.4347,231.72202 197.99661,238.03139 196.91592,255.44243 207.81155,266.47348 205.02585,269.86975 204.97567,272.20486 204.96547,276.59737 201.86347,276.31739 196.44573,276.05509 194.52373,277.04009 191.97573,271.84009 183.89733,271.15429 177.99233,271.71929 176.69233,266.28729 167.65758,262.43783 162.78758,262.15483 162.78758,257.09483 158.65256,251.79472 151.27256,246.45072 150.67956,232.67072 147.7275,221.98488 142.4135,212.98588 139.7565,207.07988 148.1712,202.77018 152.6012,199.39618 156.4739,196.44415 157.24619,190.1562 155.91589,185.51858 160.86549,179.6255 159.04509,169.7907 150.86119,166.06155 153.49439,171.10455 152.93499,175.68043 149.73809,179.31741 145.41249,178.97505 143.11661,181.13277 139.53426,184.85233 140.86937,178.74128 143.55202,165.015 134.78322,162.08053 134.52642,154.18604 125.88959,148.75258 116.99979,151.66506 123.56999,153.8196 125.7894,157.67305 125.2086,163.65172 122.1637,165.96548 120.58287,170.526 122.91077,175.32956 120.25277,179.54853 119.80326,184.60592 120.68826,187.98092 114.92026,186.14754 115.34827,172.3795 106.56317,172.10908 103.31177,165.43957 93.538388,163.0805 86.318188,168.01272 92.663788,168.26012 96.007898,171.21694 97.608998,176.23646 94.461698,179.99805 95.282448,185.9699 99.829748,189.12047 97.468748,194.46347 99.481948,201.32951 105.67995,203.85951 111.88095,206.38951 114.95539,212.58374 113.18539,216.80374 111.41239,221.02074 108.75609,227.77058 110.52909,233.39358 112.30009,239.01758 110.37962,242.6331 105.95162,244.0391 101.52362,245.4451 103.81266,256.39666 96.725658,258.08566 91.574258,259.31118 90.513068,267.28954 93.361768,271.87087 91.586168,276.96631 88.159488,279.73151 81.706888,279.7217 88.504888,284.79446 97.801968,283.30239 101.58067,277.16839 106.75697,277.71424 110.73743,273.33189 111.48863,268.08522 112.37263,261.89922 119.09025,255.91717 119.38425,248.60717 127.35725,297.81717 185.07845,305.70149 187.43845,367.56849 194.52545,359.69349 206.77763,342.49717 206.77783,335.74917 215.97253,335.609 221.27138,334.19487 230.11928,331.68903 232.64358,332.62237 234.25223,333.20193 236.93553,333.40974 237.1537,336.02427 237.58782,336.99734 239.10904,338.80668 234.38504,340.49568 230.34058,348.69329 231.72658,355.45829 220.33258,357.22029 231.01685,370.63496 213.22485,387.29896 192.70485,406.28096 170.41346,389.89673 163.77046,386.38273 160.74186,384.77993 157.23169,385.63478 155.00179,386.64749 148.31109,382.41349 138.05669,385.19092 135.03299,393.44045"
<> "V 393.44241"
<> "C 140.08659,390.34102 143.89053,390.04903 148.08403,392.80383 146.64533,396.0942 146.18453,399.85545 146.91803,402.59484 146.24953,403.26586 145.67013,403.94924 145.17973,404.64172 137.30313,401.47822 125.59669,407.59555 125.07009,416.72561 129.83109,411.52961 137.94848,410.68314 143.77348,413.87714 143.88408,413.93782 145.89388,417.34235 147.58198,418.86151 147.06918,419.67547 146.83058,420.62495 146.83788,421.64472 140.10228,423.66325 136.24999,430.97514 139.07009,438.32913 141.16449,432.15993 145.45874,429.47406 151.55854,429.77321 153.29464,431.30553 155.84949,432.9383 158.35729,433.64618 166.33029,435.89418 179.77379,431.41305 183.74979,427.31105 194.37779,416.34405 209.14209,426.86889 213.57009,422.08889 217.99809,417.30889 228.10577,415.29881 231.94277,422.61081 235.78077,429.92181 243.80536,424.78888 247.64336,428.72388 252.13894,433.33542 262.35107,429.37674 264.50496,425.31528 269.79216,424.34037 274.69549,425.54428 277.93149,430.63967"
<> "H 277.93339"
<> "C 278.97619,422.31093 272.37229,415.35833 264.74419,415.73351 262.88069,412.5789 258.5709,409.42438 252.9115,410.50167 248.4835,411.34467 244.46718,409.10917 237.97018,406.29621 244.86388,375.11343 282.37059,357.49887 286.35588,342.76949 283.66968,361.96183 299.58304,363.38335 297.27114,375.5052 306.26614,366.4322 310.23187,358.52208 309.68187,351.70608 316.20087,350.00859 320.81953,347.63101 324.53653,342.01295 337.94373,345.86083 353.22415,340.32106 361.48935,329.08514 368.06703,330.95117 370.48261,330.22026 376.34286,328.54582 374.03861,335.75674 374.77224,350.1865 395.44416,351.62737 397.36916,362.26437 411.21077,368.04826 423.03777,365.16326 425.76638,368.51098 427.74618,369.7579 431.60844,370.83344 425.58748,374.6009 425.63584,377.14204 424.66949,381.59665 419.35549,381.59665 414.48619,385.54989 413.45284,389.98832 408.28473,388.58232 400.09979,387.97871 393.66979,392.06271 384.51779,393.74871 375.61299,395.29625 368.86899,386.65725 361.24989,376.89713 350.35649,372.03489 345.13659,376.03616 337.53179,374.38589 328.28199,379.99827 327.79669,388.41311 331.86149,383.9795 336.75909,382.81097 341.73029,384.55374 341.84879,388.3823 343.99649,391.74438 348.49589,392.2803 362.29289,393.9233 366.57005,399.74405 369.75505,403.60405 355.80383,408.88619 339.53159,389.79591 330.12985,398.89367 321.76545,397.32524 314.02319,405.47252 315.42949,414.50491 318.35849,409.58039 321.72095,408.20479 326.70435,408.72152 327.53115,414.32138 334.91749,417.98879 339.56399,416.83294 338.93029,417.68403 339.17609,418.15485 338.94509,418.97366 333.56139,421.29914 329.78209,427.10376 331.20099,433.54788 333.67399,428.74676 337.02371,426.67584 341.66281,426.62437 345.74291,429.57808 352.89508,431.36265 356.68968,428.04916 370.86068,415.67516 379.79269,424.96944 383.63069,420.39944 385.99069,417.58944 390.42039,414.49514 395.14439,418.99514 399.86839,423.49614 403.41409,422.36744 406.07009,420.39944 408.72809,418.43144 414.462,414.21519 424.234,422.71519 432.32406,429.74858 443.96053,434.34802 449.12024,426.85669 454.80464,425.13474 460.32189,426.03659 464.02909,431.35452 464.70869,422.93407 457.31345,415.88531 449.65725,416.66484 447.80745,414.64226 444.9263,413.3869 441.4821,413.66007 437.9411,413.94207 429.98762,414.12905 424.96962,411.03605 458.92362,402.60005 480.17689,383.69006 496.11899,361.19306 498.84313,356.64281 514.85964,363.50171 522.69319,370.626 522.10219,339.693 491.22676,347.83406 475.28176,335.46106 459.33876,323.08706 473.03471,313.45851 484.84271,305.02251 488.81071,307.28209 492.08549,307.99947 496.63979,308.32979 499.59079,315.35979 514.77555,321.51789 522.57055,319.54789 526.70155,326.01489 541.82834,327.0672 550.68534,323.6922 557.18234,330.4422 572.88399,329.67214 578.49399,326.57914 583.00599,330.77835 587.77709,331.46661 593.04389,328.26469 593.04389,335.57469 599.36553,336.14249 603.20553,336.14249 598.48153,340.07949 600.82378,350.70299 605.25178,353.23299 603.18478,357.73199 602.25105,364.27251 605.20405,369.05351 599.59405,373.27051 596.24146,378.501 599.19146,385.251 590.04046,398.186 578.89207,412.58373 552.02607,382.77573 545.09397,375.08632 537.11554,376.90298 533.44104,380.0227 525.85884,378.44985 519.16949,384.26885 519.00369,392.76663 522.62949,388.50943 527.08329,387.0565 531.74399,388.14553 531.25326,395.70308 541.01635,394.9967 540.88848,398.71324 531.20348,397.97581 526.56808,399.67745 524.69448,402.81632 517.69928,403.52172 512.90609,409.80922 514.08969,417.52834 517.04769,412.58321 521.40549,410.48354 526.42369,411.04397 530.84319,418.61311 543.56667,410.49668 548.79927,415.74428 540.73467,417.09658 538.95595,420.39361 538.47945,423.68438 532.73085,425.79483 529.60179,431.60795 531.08189,438.32717 533.74249,433.16189 537.27898,431.70104 542.39448,432.02345 546.39245,435.247 555.3088,434.88532 561.07502,427.73993 567.86502,421.55193 583.11391,420.32023 587.54191,424.82023 591.97191,429.31823 602.00981,427.07023 608.50481,422.57023 615.85981,417.47423 629.32462,421.83042 633.75462,426.89142 637.26022,430.89902 646.23009,431.82011 649.46659,426.92678 655.27259,426.02999 660.13089,428.3333 663.01159,434.03225"
<> "L 663.01349,434.0342"
<> "C 664.91789,425.68028 658.98955,417.30308 651.17565,417.25208 647.82885,409.62545 633.17671,417.57088 630.52941,402.9366 627.77441,387.71658 655.57857,346.63965 634.31957,321.89165 644.07084,324.25368 654.49809,328.4224 663.82009,332.94436 650.04866,302.02487 609.64413,295.68222 591.36009,283.40606 628.56309,283.40606 685.07599,258.70353 685.07599,213.14553 685.45699,205.06691 684.04634,198.31762 681.13874,192.38772 683.73874,186.62572 688.43854,172.33915 692.26954,159.42115 698.76354,168.41915 708.69619,174.90189 718.73619,178.83889 709.28819,160.84089 705.74459,109.10006 710.46859,86.040059 697.47859,102.91306 657.91239,140.03425 639.01739,158.03225 649.05739,159.15625 666.25039,157.90775 674.51739,156.21975 671.65619,163.25541 668.73559,170.26673 665.75569,177.25295 654.51019,170.42561 640.25709,166.69196 628.38849,166.69196 611.26449,166.69197 588.86136,179.19417 588.86136,198.87817 588.86136,218.56217 607.82537,227.02249 626.72137,227.02249 636.10897,227.00328 644.19725,225.49496 652.45795,221.0353 649.57534,235.71506 614.68092,240.46715 593.84583,236.537 571.53375,229.84034 537.49344,224.4069 518.19929,227.68849 528.71729,211.62649 554.0245,203.45015 572.1445,209.56315 545.5725,184.25315 569.19347,142.54946 617.61447,127.92646 579.82147,114.99146 599.45535,84.12039 642.56235,56.56239 611.26615,69.49839 569.48731,85.097859 552.36231,91.285859 535.24031,97.470857 506.05714,101.04991 528.49614,46.494908 435.19804,98.238906 370.65561,132.31867 370.65561,161.56566 370.65561,190.81266 378.76329,209.59458 350.85729,212.39358 338.22889,213.61143 326.70925,215.87602 314.63455,219.76988 310.38164,209.55879 311.29712,205.1517 313.95402,204.0277 316.61102,202.9027 323.38134,202.37335 329.30449,203.02444 327.53349,194.02544 320.84907,188.03461 314.94207,186.34561 311.23024,184.97276 309.65486,183.62949 309.99548,178.35083 310.3331,174.11498 312.48966,172.84527 315.88456,173.40726 322.05556,174.42926 329.30599,174.90206 334.32599,179.1221 333.73599,163.65509 324.60044,157.97467 320.17044,157.41267 314.45461,156.87853 316.46894,148.75249 318.46076,141.94705 321.93836,140.87091 334.207,144.16179 339.08509,148.2523 338.78909,138.1273 331.77571,129.54642 325.46659,127.45911 322.33681,126.42365 320.38409,124.8454 320.2596,121.50556 320.41591,116.32132 327.08648,118.49561 334.9894,119.00223 328.7884,108.87723 319.89929,104.78141 315.47129,103.09341 312.48301,101.95544 307.21279,97.709021 307.21279,97.709021 307.21279,97.709021 313.16065,94.955689 314.17907,92.443125 308.86207,89.630125 307.82627,87.42822 309.67184,85.726977 313.87935,81.293737 322.88217,77.065159 332.25763,69.669701 328.77543,69.517211 327.06289,69.675139 323.69509,70.573269 326.94509,66.636269 329.30499,53.700919 327.82799,48.920919 325.36799,54.034919 318.24646,56.111488 309.71056,58.545488 312.66346,51.235488 314.45746,42.146694 311.50356,39.897694"
<> "Z"
welshFlagOuterHoles :: String
welshFlagOuterHoles =
"M 198.66812,133.85376"
<> "C 203.84002,134.13791 206.57209,134.12189 211.66379,134.12546 208.55079,135.00179 206.27026,135.42288 204.22825,135.44618 202.32787,135.46786 200.63407,135.17298 198.66812,133.85376"
<> "Z"
<> ""
<> "M 628.77318,194.66676"
<> "C 634.05018,194.66676 642.18669,194.06778 647.67469,201.72778 638.94669,209.29378 633.06777,207.75436 627.90497,207.60365 620.75343,207.39488 617.52123,205.68272 617.70926,201.79904 617.89182,198.02851 621.09618,194.66676 628.77318,194.66676"
<> "Z"
flagDims :: V3 Double
flagDims = V3 800 480 10
welshFlag :: Solid
welshFlag =
let red = Colour.rgb24 0xC8102E
green = Colour.rgb24 0x00B140
dragonInner = fold . parsePath $ welshFlagInner
dragonInnerHoles = fold . parsePath $ welshFlagInnerHoles
dragonOuter = fold . parsePath $ welshFlagOuter
dragonOuterHoles = fold . parsePath $ welshFlagOuterHoles
extrudePath = mconcat . fmap (Solids.prism (flagDims ^. _z) . Shape.makeShape)
inner = Solids.colourSolid red . (`Booleans.difference` extrudePath dragonInnerHoles) . extrudePath $ dragonInner
outline = Solids.colourSolid Colour.black . (`Booleans.difference` extrudePath dragonOuterHoles) . extrudePath $ dragonOuter
sky = Solids.unitCube
& Transforms.scale (flagDims & _y %~ (/2))
& (`Booleans.difference` outline)
& Solids.colourSolid Colour.white
field = Solids.unitCube
& Transforms.scale (flagDims & _y %~ (/2))
& Transforms.translate (flagDims ^* 0.5 & _xz .~ zero)
& (`Booleans.difference` outline)
& Solids.colourSolid green
in (sky <> field <> outline <> inner)
& Transforms.mirror (unit _y)
& Transforms.translate (flagDims & _xz .~ zero)
trinidadAndTobagoFlag :: Solid
trinidadAndTobagoFlag =
let red = Colour.rgb24 0xDA1A35
field = Solids.unitCube
& Transforms.scale flagDims
& Solids.colourSolid red
stripeAngle = negate $ atan ((15 + sqrt 33)/24)
stripe width = Solids.centeredCube
& Transforms.scale (V3 (flagDims ^. _y * 2) (width * 800/30) (flagDims ^. _z))
& Transforms.rotate (unit _z) stripeAngle
& Transforms.translate (flagDims ^* 0.5)
& Booleans.intersection field
in field
<> (Solids.colourSolid Colour.white (stripe 6))
<> (Solids.colourSolid Colour.black (stripe 4))
stripedFlag :: [Colour] -> Solid
stripedFlag colours =
let stripeHeight = (flagDims ^. _y / realToFrac (length colours))
oneStripe = Solids.unitCube
& Transforms.scale (flagDims & _y .~ stripeHeight)
f acc colour = Transforms.translate (unit _y ^* stripeHeight) acc
<> Solids.colourSolid colour oneStripe
in foldl' f mempty colours
prideFlag :: Solid
prideFlag = stripedFlag
$ Colour.rgb24 <$>
[ 0xE40303
, 0xFF8C00
, 0xFFED00
, 0x008026
, 0x004CFF
, 0x732982
]
transPrideFlag :: Solid
transPrideFlag =
let blue = Colour.rgb24 0x5BCEFA
pink = Colour.rgb24 0xF5A9B8
in stripedFlag [blue, pink, Colour.white, pink, blue]
flagsOnPole :: [Solid] -> Solid
flagsOnPole flags =
let poleR = (flagDims ^. _z) * 1.5
poleH = flagDims ^. _y * 2
metalicPaint = Paint.paintWithColour Colour.silver
<> Paint.paintWithMetallic 0.8
<> Paint.paintWithRoughness 0.05
pole = Solids.unitCylinder
& Transforms.scale (V3 poleR poleR poleH)
& (<> (Solids.unitSphere
& Transforms.uScale (poleR * 2)
& Transforms.translate (poleH *^ unit _z)
))
& Solids.paintSolid metalicPaint
flagOnPole flag = flag
& Transforms.translate ((flagDims ^. _z * negate 0.5) *^ unit _z)
& Transforms.rotate (unit _x) (pi/2)
& Transforms.translate ((flagDims ^. _y * 0.95) *^ unit _z)
& (<> pole)
& Transforms.rotate (unit _y) (0.2)
base = Solids.centeredCylinder
& Transforms.scale (V3 60 60 160)
& Solids.paintSolid metalicPaint
in base <> mconcat [
flagOnPole f
& Transforms.rotate (unit _z) (pi * 2 * realToFrac i / realToFrac (length flags))
| (i, f) <- zip [(0::Integer)..] flags
]
flagExample :: Solid
flagExample = flagsOnPole
[ welshFlag
, trinidadAndTobagoFlag
, prideFlag
, transPrideFlag
]