/*
 * Copyright 2012 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
#include "PathOpsExtendedTest.h"

#define TEST(name) { name, #name }

static void skpcheeseandburger_com225(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(555, 468);
    path.lineTo(555, 362);
    path.lineTo(872, 362);
    path.lineTo(872, 468);
    path.lineTo(555, 468);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(859.11792f, 397.320343f);
    pathB.cubicTo(855.523071f, 399.691284f, 853.721191f, 402.40863f, 853.721191f, 405.552216f);
    pathB.cubicTo(853.721191f, 407.911163f, 854.727478f, 410.115387f, 857.043518f, 412.252716f);
    pathB.cubicTo(859.920532f, 414.916138f, 862.704773f, 417.086426f, 864.679382f, 418.852386f);
    pathB.cubicTo(866.382446f, 420.371765f, 867.19104f, 422.108795f, 867.19104f, 423.506378f);
    pathB.cubicTo(867.19104f, 424.551605f, 866.741821f, 425.539886f, 865.935242f, 426.281616f);
    pathB.cubicTo(865.250366f, 426.910553f, 864.662415f, 427.339813f, 864.139282f, 427.4646f);
    pathB.cubicTo(863.536377f, 427.605347f, 862.259521f, 426.491272f, 860.366821f, 424.208191f);
    pathB.cubicTo(858.345276f, 421.770355f, 857.317017f, 419.733856f, 857.317017f, 417.98587f);
    pathB.cubicTo(857.317017f, 417.198212f, 857.942993f, 415.930389f, 857.942993f, 415.930389f);
    pathB.cubicTo(857.942993f, 415.930389f, 852.106018f, 421.296173f, 852.279663f, 422.549042f);
    pathB.cubicTo(852.462402f, 423.890747f, 853.669312f, 425.703613f, 855.876465f, 428.252258f);
    pathB.cubicTo(858.038818f, 430.754944f, 859.4953f, 431.840088f, 860.190125f, 431.594513f);
    pathB.cubicTo(862.571045f, 430.754944f, 865.48999f, 429.237549f, 868.44397f, 427.018372f);
    pathB.cubicTo(870.505371f, 425.470032f, 871.582581f, 423.534332f, 871.582581f, 421.001678f);
    pathB.cubicTo(871.582581f, 417.945923f, 870.056213f, 415.171692f, 867.015381f, 412.640045f);
    pathB.cubicTo(863.683105f, 409.872803f, 861.445923f, 408.027954f, 860.551514f, 407.140503f);
    pathB.cubicTo(858.660767f, 405.264709f, 857.765259f, 403.50174f, 857.765259f, 402.187988f);
    pathB.cubicTo(857.765259f, 401.141785f, 858.339355f, 400.394073f, 859.476318f, 399.925873f);
    pathB.cubicTo(860.004395f, 399.704254f, 861.270264f, 400.515869f, 863.156006f, 402.36969f);
    pathB.cubicTo(865.094727f, 404.28241f, 866.203796f, 405.565186f, 866.383484f, 406.130219f);
    pathB.cubicTo(868.250244f, 404.305359f, 869.179688f, 403.397919f, 871.046509f, 401.58902f);
    pathB.cubicTo(868.26825f, 399.296967f, 864.431824f, 394.705841f, 863.156006f, 394.600037f);
    pathB.cubicTo(863.145996f, 394.600037f, 863.136108f, 394.59903f, 863.126099f, 394.59903f);
    pathB.cubicTo(862.352417f, 394.598022f, 859.909607f, 396.79425f, 859.11792f, 397.320343f);
    pathB.moveTo(832.164246f, 394.307526f);
    pathB.cubicTo(832.451721f, 394.425323f, 832.598511f, 394.486206f, 832.886963f, 394.605011f);
    pathB.cubicTo(834.078979f, 395.474518f, 834.674927f, 395.90979f, 835.867859f, 396.781281f);
    pathB.cubicTo(836.502808f, 397.325348f, 836.863159f, 398.000183f, 836.863159f, 398.964539f);
    pathB.lineTo(836.863159f, 419.740845f);
    pathB.cubicTo(836.863159f, 420.876923f, 836.319092f, 422.17868f, 835.055298f, 423.617188f);
    pathB.cubicTo(836.39502f, 424.512665f, 837.063843f, 424.961884f, 838.39856f, 425.864349f);
    pathB.cubicTo(839.477661f, 426.578125f, 841.37439f, 427.27594f, 842.275879f, 427.443634f);
    pathB.cubicTo(842.999634f, 427.574402f, 843.82019f, 427.513519f, 844.354309f, 427.216034f);
    pathB.cubicTo(846.956787f, 425.765503f, 848.689819f, 423.588257f, 848.58606f, 423.483429f);
    pathB.cubicTo(848.58606f, 423.483429f, 846.877991f, 423.327698f, 845.971558f, 422.807587f);
    pathB.cubicTo(845.253784f, 422.284485f, 844.892395f, 422.022949f, 844.171631f, 421.502838f);
    pathB.cubicTo(843.361023f, 420.915833f, 842.907837f, 420.308899f, 842.907837f, 419.350525f);
    pathB.lineTo(842.907837f, 399.445709f);
    pathB.cubicTo(842.907837f, 398.053101f, 843.272217f, 397.417175f, 843.812256f, 397.518005f);
    pathB.cubicTo(844.170654f, 397.583893f, 844.711731f, 398.122986f, 845.432495f, 398.782837f);
    pathB.cubicTo(846.116333f, 399.402771f, 846.459717f, 399.709259f, 847.14856f, 400.3302f);
    pathB.cubicTo(844.986206f, 402.099152f, 843.988892f, 403.926025f, 843.988892f, 405.932556f);
    pathB.cubicTo(843.988892f, 410.209229f, 848.272583f, 410.951935f, 849.576355f, 408.394348f);
    pathB.cubicTo(849.871826f, 407.816345f, 850.421875f, 406.214081f, 850.387939f, 406.196106f);
    pathB.cubicTo(850.387939f, 406.196106f, 849.305786f, 406.771118f, 848.495239f, 406.615387f);
    pathB.cubicTo(846.96582f, 406.316895f, 846.153198f, 405.46637f, 846.153198f, 403.89505f);
    pathB.cubicTo(846.153198f, 401.796661f, 848.50116f, 399.09729f, 852.279663f, 396.270142f);
    pathB.cubicTo(851.014893f, 395.315796f, 847.723511f, 391.546265f, 846.875f, 391.546265f);
    pathB.cubicTo(846.330933f, 391.546265f, 843.988892f, 394.403351f, 843.273193f, 394.972382f);
    pathB.cubicTo(840.889282f, 392.886963f, 839.700317f, 391.850739f, 837.312378f, 389.786285f);
    pathB.cubicTo(835.257935f, 391.589203f, 834.225708f, 392.491638f, 832.164246f, 394.307526f);
    pathB.moveTo(818.860107f, 392.707275f);
    pathB.cubicTo(819.857361f, 393.382111f, 822.302124f, 395.764038f, 824.387573f, 397.051819f);
    pathB.cubicTo(822.57666f, 398.249756f, 820.582092f, 399.687286f, 818.860107f, 400.827332f);
    pathB.lineTo(818.860107f, 392.707275f);
    pathB.close();
    pathB.moveTo(810.69812f, 391.096039f);
    pathB.cubicTo(810.69812f, 391.096039f, 812.786499f, 394.093903f, 812.786499f, 394.965393f);
    pathB.lineTo(812.786499f, 415.743713f);
    pathB.cubicTo(812.786499f, 417.753265f, 811.881042f, 418.497986f, 810.974609f, 419.769806f);
    pathB.cubicTo(813.948486f, 421.160431f, 815.437988f, 421.864197f, 818.404846f, 423.283783f);
    pathB.cubicTo(819.948181f, 423.95462f, 822.417969f, 424.592529f, 823.937317f, 423.782928f);
    pathB.cubicTo(827.905518f, 421.663544f, 831.53125f, 417.600525f, 832.255005f, 415.191681f);
    pathB.cubicTo(833.882263f, 409.877808f, 823.095825f, 411.495026f, 823.119751f, 411.518982f);
    pathB.cubicTo(823.119751f, 411.518982f, 832.000488f, 411.874359f, 830.537964f, 416.29776f);
    pathB.cubicTo(829.888123f, 418.253418f, 827.278564f, 420.292908f, 825.385864f, 419.55719f);
    pathB.cubicTo(821.14209f, 417.915985f, 818.861023f, 417.414856f, 818.861023f, 414.970032f);
    pathB.lineTo(818.861023f, 403.096436f);
    pathB.cubicTo(822.126404f, 399.132233f, 831.289673f, 395.897797f, 831.356567f, 395.657227f);
    pathB.cubicTo(831.356567f, 395.657227f, 823.022888f, 387.594055f, 821.763062f, 387.476257f);
    pathB.cubicTo(821.755066f, 387.47525f, 821.746094f, 387.47525f, 821.737061f, 387.47525f);
    pathB.cubicTo(820.793701f, 387.47525f, 810.72406f, 390.967255f, 810.69812f, 391.096039f);
    pathB.moveTo(624.254211f, 390.498077f);
    pathB.cubicTo(625.252502f, 390.893402f, 627.708252f, 392.592468f, 629.796692f, 393.307251f);
    pathB.cubicTo(627.978821f, 395.006317f, 625.980225f, 397.000916f, 624.254211f, 398.618134f);
    pathB.lineTo(624.254211f, 390.498077f);
    pathB.close();
    pathB.moveTo(627.160217f, 384.460449f);
    pathB.cubicTo(626.286743f, 384.51535f, 616.076233f, 390.993225f, 616.086243f, 391.141968f);
    pathB.cubicTo(616.086243f, 391.141968f, 618.173645f, 393.561798f, 618.173645f, 394.437317f);
    pathB.lineTo(618.173645f, 415.216614f);
    pathB.cubicTo(618.173645f, 417.222168f, 617.265198f, 418.219482f, 616.355774f, 419.742859f);
    pathB.cubicTo(619.331665f, 420.307892f, 620.824097f, 420.599396f, 623.802979f, 421.198364f);
    pathB.cubicTo(625.346313f, 421.437958f, 627.818115f, 421.39801f, 629.342468f, 420.166138f);
    pathB.cubicTo(633.340576f, 416.939667f, 636.982361f, 411.871368f, 637.714111f, 409.263855f);
    pathB.cubicTo(639.348267f, 403.500732f, 628.508911f, 408.111816f, 628.52887f, 408.126801f);
    pathB.cubicTo(628.52887f, 408.126801f, 637.468506f, 405.998444f, 635.985046f, 410.844147f);
    pathB.cubicTo(635.332153f, 412.984467f, 632.705688f, 415.748718f, 630.801941f, 415.541077f);
    pathB.cubicTo(626.537292f, 415.072876f, 624.257202f, 415.202667f, 624.257202f, 412.755859f);
    pathB.cubicTo(624.257202f, 408.007019f, 624.255188f, 405.636078f, 624.255188f, 400.884247f);
    pathB.cubicTo(627.525574f, 396.016602f, 636.801636f, 390.283447f, 636.801636f, 389.97995f);
    pathB.cubicTo(636.801636f, 389.97995f, 628.360168f, 384.458435f, 627.18219f, 384.458435f);
    pathB.cubicTo(627.174194f, 384.460449f, 627.167236f, 384.460449f, 627.160217f, 384.460449f);
    pathB.moveTo(796.530396f, 416.438538f);
    pathB.cubicTo(795.892517f, 416.365662f, 794.527832f, 415.589996f, 792.348572f, 414.036652f);
    pathB.lineTo(792.348572f, 391.425476f);
    pathB.cubicTo(792.348572f, 390.465118f, 792.530273f, 390.047852f, 792.89563f, 390.088776f);
    pathB.cubicTo(793.075317f, 390.109741f, 793.3479f, 390.317383f, 793.804077f, 390.629852f);
    pathB.cubicTo(795.113831f, 391.585205f, 795.768738f, 392.059387f, 797.077515f, 393.018738f);
    pathB.cubicTo(797.983948f, 393.648651f, 798.348267f, 394.219666f, 798.348267f, 394.742767f);
    pathB.lineTo(798.348267f, 413.253998f);
    pathB.cubicTo(798.348267f, 415.391327f, 797.783264f, 416.451508f, 796.728088f, 416.451508f);
    pathB.cubicTo(796.664185f, 416.4505f, 796.598267f, 416.446533f, 796.530396f, 416.438538f);
    pathB.moveTo(795.165771f, 383.714722f);
    pathB.cubicTo(794.022705f, 383.851471f, 783.959961f, 388.652252f, 783.880127f, 388.873871f);
    pathB.cubicTo(783.880127f, 388.873871f, 785.054077f, 389.871155f, 785.522339f, 390.606873f);
    pathB.cubicTo(786.000488f, 391.361603f, 786.246094f, 391.9935f, 786.246094f, 392.427765f);
    pathB.lineTo(786.246094f, 411.987183f);
    pathB.cubicTo(786.246094f, 413.733185f, 784.160645f, 416.428558f, 784.246521f, 416.759979f);
    pathB.cubicTo(784.258484f, 416.79892f, 785.432495f, 417.14032f, 785.793823f, 417.350952f);
    pathB.cubicTo(786.739258f, 417.937958f, 787.213379f, 418.228455f, 788.161804f, 418.821442f);
    pathB.cubicTo(789.342773f, 419.554199f, 790.619568f, 419.956482f, 791.892395f, 420.098236f);
    pathB.cubicTo(794.533813f, 420.390747f, 796.717102f, 419.337555f, 798.349304f, 416.999573f);
    pathB.lineTo(798.349304f, 425.212463f);
    pathB.cubicTo(797.94696f, 425.47702f, 797.750305f, 425.609772f, 797.356018f, 425.874329f);
    pathB.cubicTo(795.259583f, 423.619202f, 792.806824f, 422.286499f, 789.985657f, 421.984009f);
    pathB.cubicTo(785.157959f, 421.463898f, 780.409119f, 428.344086f, 780.423096f, 428.346069f);
    pathB.cubicTo(780.423096f, 428.346069f, 783.340088f, 424.960907f, 785.889709f, 425.218445f);
    pathB.cubicTo(789.25592f, 425.565857f, 793.166199f, 430.745972f, 793.805115f, 430.790894f);
    pathB.cubicTo(793.940857f, 430.798889f, 795.918457f, 429.091797f, 798.454102f, 427.383728f);
    pathB.cubicTo(801.049683f, 425.635742f, 804.230225f, 423.886749f, 806.619141f, 423.980591f);
    pathB.cubicTo(805.621826f, 423.586243f, 805.048828f, 423.074127f, 804.804199f, 422.609924f);
    pathB.cubicTo(804.616577f, 422.25354f, 804.616577f, 421.539764f, 804.616577f, 420.31488f);
    pathB.cubicTo(804.623535f, 411.732605f, 804.623535f, 403.147339f, 804.623535f, 394.562073f);
    pathB.cubicTo(804.623535f, 392.464691f, 805.970215f, 391.000183f, 805.984192f, 390.896362f);
    pathB.cubicTo(805.984192f, 390.896362f, 796.785034f, 383.7117f, 795.219666f, 383.7117f);
    pathB.cubicTo(795.19873f, 383.712708f, 795.181763f, 383.712708f, 795.165771f, 383.714722f);
    pathB.moveTo(648.092285f, 387.883545f);
    pathB.cubicTo(649.095581f, 388.312805f, 651.55835f, 390.099762f, 653.655701f, 390.884399f);
    pathB.cubicTo(651.831848f, 392.522583f, 649.82428f, 394.447296f, 648.092285f, 396.003601f);
    pathB.lineTo(648.092285f, 387.883545f);
    pathB.close();
    pathB.moveTo(651.009277f, 381.943756f);
    pathB.cubicTo(650.147766f, 381.983704f, 639.893372f, 388.105164f, 639.899353f, 388.254913f);
    pathB.cubicTo(639.899353f, 388.254913f, 641.987793f, 390.744659f, 641.987793f, 391.617157f);
    pathB.lineTo(641.987793f, 412.399475f);
    pathB.cubicTo(641.987793f, 414.409027f, 641.082336f, 415.369354f, 640.169861f, 416.864807f);
    pathB.cubicTo(643.155762f, 417.53064f, 644.650208f, 417.87207f, 647.638062f, 418.573853f);
    pathB.cubicTo(649.188416f, 418.865356f, 651.666138f, 418.908295f, 653.19751f, 417.725311f);
    pathB.cubicTo(657.204651f, 414.633636f, 660.859375f, 409.690125f, 661.590088f, 407.106567f);
    pathB.cubicTo(663.231262f, 401.397339f, 652.356934f, 405.644073f, 652.375916f, 405.663025f);
    pathB.cubicTo(652.375916f, 405.663025f, 661.338562f, 403.835175f, 659.857056f, 408.632935f);
    pathB.cubicTo(659.199219f, 410.748291f, 656.568726f, 413.424713f, 654.656982f, 413.151184f);
    pathB.cubicTo(650.381348f, 412.536224f, 648.092285f, 412.591125f, 648.092285f, 410.146332f);
    pathB.lineTo(648.092285f, 398.270721f);
    pathB.cubicTo(651.374634f, 393.5159f, 660.66571f, 388.09021f, 660.674683f, 387.791718f);
    pathB.cubicTo(660.674683f, 387.791718f, 652.188232f, 381.941772f, 651.022278f, 381.942749f);
    pathB.cubicTo(651.01825f, 381.942749f, 651.013245f, 381.942749f, 651.009277f, 381.943756f);
    pathB.moveTo(761.636353f, 385.965851f);
    pathB.cubicTo(761.927856f, 386.056702f, 762.071594f, 386.098633f, 762.363098f, 386.189453f);
    pathB.cubicTo(763.570007f, 386.938171f, 764.175964f, 387.311554f, 765.376892f, 388.066254f);
    pathB.cubicTo(766.019775f, 388.546417f, 766.384155f, 389.184326f, 766.384155f, 390.147675f);
    pathB.lineTo(766.384155f, 410.924011f);
    pathB.cubicTo(766.384155f, 412.057037f, 765.836121f, 413.410736f, 764.559326f, 414.979034f);
    pathB.cubicTo(765.911987f, 415.738739f, 766.579834f, 416.12207f, 767.934509f, 416.887756f);
    pathB.cubicTo(769.029602f, 417.495728f, 770.944336f, 418.000854f, 771.85675f, 418.075714f);
    pathB.cubicTo(772.58551f, 418.134613f, 773.413086f, 417.987854f, 773.950195f, 417.638458f);
    pathB.cubicTo(776.583618f, 415.917419f, 778.332642f, 413.564453f, 778.237793f, 413.473633f);
    pathB.cubicTo(778.237793f, 413.473633f, 776.507812f, 413.497559f, 775.596313f, 413.066315f);
    pathB.cubicTo(774.866577f, 412.61908f, 774.497253f, 412.39447f, 773.771484f, 411.951233f);
    pathB.cubicTo(772.947876f, 411.444092f, 772.493652f, 410.877075f, 772.493652f, 409.919708f);
    pathB.lineTo(772.493652f, 390.013885f);
    pathB.cubicTo(772.493652f, 388.618286f, 772.860046f, 387.949432f, 773.407104f, 387.995361f);
    pathB.cubicTo(773.771484f, 388.026306f, 774.318542f, 388.509491f, 775.049316f, 389.09848f);
    pathB.cubicTo(775.742065f, 389.646515f, 776.088501f, 389.923065f, 776.77533f, 390.470123f);
    pathB.cubicTo(774.590088f, 392.45871f, 773.589783f, 394.385376f, 773.589783f, 396.395935f);
    pathB.cubicTo(773.589783f, 400.673584f, 777.907349f, 401.008026f, 779.237122f, 398.292694f);
    pathB.cubicTo(779.539551f, 397.684723f, 780.089661f, 396.027557f, 780.058716f, 396.01358f);
    pathB.cubicTo(780.058716f, 396.01358f, 778.970581f, 396.694427f, 778.149963f, 396.618561f);
    pathB.cubicTo(776.598633f, 396.4758f, 775.775024f, 395.709106f, 775.775024f, 394.13681f);
    pathB.cubicTo(775.775024f, 392.042419f, 778.149963f, 389.103455f, 781.973389f, 385.892975f);
    pathB.cubicTo(780.697571f, 385.06839f, 777.326416f, 381.676208f, 776.506775f, 381.719147f);
    pathB.cubicTo(775.908813f, 381.747101f, 773.588806f, 384.868744f, 772.860046f, 385.506622f);
    pathB.cubicTo(770.451172f, 383.664795f, 769.248291f, 382.749359f, 766.843384f, 380.929504f);
    pathB.cubicTo(764.758972f, 382.934052f, 763.716736f, 383.940338f, 761.636353f, 385.965851f);
    pathB.moveTo(672.996521f, 379.821411f);
    pathB.cubicTo(672.123047f, 379.891266f, 669.7052f, 382.898132f, 668.887573f, 383.64682f);
    pathB.cubicTo(665.239868f, 386.999084f, 663.41095f, 390.213562f, 663.41095f, 393.356171f);
    pathB.cubicTo(663.41095f, 395.715118f, 664.439209f, 397.642792f, 666.785156f, 399.150208f);
    pathB.cubicTo(669.702148f, 401.02002f, 672.547302f, 402.439575f, 674.545837f, 403.655487f);
    pathB.cubicTo(676.261902f, 404.697693f, 677.105469f, 406.231049f, 677.105469f, 407.625671f);
    pathB.cubicTo(677.105469f, 408.671875f, 676.651245f, 409.777954f, 675.825684f, 410.7453f);
    pathB.cubicTo(675.12384f, 411.569885f, 674.538879f, 412.145905f, 673.997803f, 412.417419f);
    pathB.cubicTo(673.38385f, 412.724915f, 672.080078f, 411.958221f, 670.166382f, 410.198242f);
    pathB.cubicTo(668.113892f, 408.319458f, 667.062683f, 406.55249f, 667.062683f, 404.808502f);
    pathB.cubicTo(667.062683f, 404.020844f, 667.701599f, 402.580322f, 667.701599f, 402.580322f);
    pathB.cubicTo(667.701599f, 402.580322f, 661.773804f, 409.542358f, 661.951477f, 410.7453f);
    pathB.cubicTo(662.13916f, 412.037079f, 663.368042f, 413.524536f, 665.60321f, 415.469208f);
    pathB.cubicTo(667.791443f, 417.368927f, 669.261963f, 418.074738f, 669.983704f, 417.630493f);
    pathB.cubicTo(672.412537f, 416.138062f, 675.369446f, 413.822021f, 678.385254f, 410.790222f);
    pathB.cubicTo(680.485657f, 408.677856f, 681.587769f, 406.446686f, 681.587769f, 403.917023f);
    pathB.cubicTo(681.587769f, 400.859283f, 680.007446f, 398.490356f, 676.923767f, 396.806244f);
    pathB.cubicTo(673.540588f, 394.957428f, 671.257507f, 393.71756f, 670.351074f, 393.075653f);
    pathB.cubicTo(668.434326f, 391.71698f, 667.518921f, 390.193604f, 667.518921f, 388.88385f);
    pathB.cubicTo(667.518921f, 387.837646f, 668.101929f, 386.934204f, 669.25592f, 386.156525f);
    pathB.cubicTo(669.796997f, 385.788147f, 671.085815f, 386.257355f, 672.997498f, 387.592072f);
    pathB.cubicTo(674.966125f, 388.968689f, 676.104187f, 389.951019f, 676.284851f, 390.465118f);
    pathB.cubicTo(678.186584f, 388.130127f, 679.136963f, 386.966125f, 681.035706f, 384.646118f);
    pathB.cubicTo(678.244507f, 383.133728f, 674.247375f, 379.819397f, 673.044434f, 379.819397f);
    pathB.cubicTo(673.027466f, 379.819397f, 673.011475f, 379.820404f, 672.996521f, 379.821411f);
    pathB.moveTo(732.95459f, 384.60318f);
    pathB.cubicTo(733.246094f, 384.680054f, 733.391846f, 384.720001f, 733.689331f, 384.794861f);
    pathB.cubicTo(735.072937f, 385.500641f, 735.769714f, 385.856049f, 737.162354f, 386.563812f);
    pathB.cubicTo(737.891113f, 386.938171f, 738.164612f, 387.642975f, 738.164612f, 388.6073f);
    pathB.lineTo(738.164612f, 408.510132f);
    pathB.cubicTo(738.164612f, 410.257141f, 737.709412f, 411.893341f, 736.064209f, 413.416718f);
    pathB.cubicTo(737.635498f, 414.235321f, 738.419189f, 414.651611f, 739.991455f, 415.475189f);
    pathB.cubicTo(740.997742f, 416.034241f, 742.186707f, 416.344696f, 743.098145f, 416.379639f);
    pathB.cubicTo(743.830872f, 416.410583f, 744.476807f, 416.175964f, 745.019836f, 415.851532f);
    pathB.cubicTo(746.476318f, 414.977051f, 748.58075f, 413.571442f, 749.225647f, 413.079285f);
    pathB.cubicTo(751.012573f, 414.253296f, 751.907043f, 414.845276f, 753.69696f, 416.028229f);
    pathB.cubicTo(754.703247f, 416.610229f, 755.706543f, 416.84082f, 756.528076f, 416.892761f);
    pathB.cubicTo(757.259827f, 416.93866f, 757.996582f, 416.807892f, 758.537659f, 416.494446f);
    pathB.cubicTo(760.814758f, 415.174713f, 762.185425f, 413.509552f, 762.552734f, 412.830719f);
    pathB.cubicTo(761.637329f, 412.681976f, 759.633789f, 411.58786f, 759.263428f, 411.387207f);
    pathB.cubicTo(758.607544f, 410.994873f, 758.279114f, 410.803223f, 757.621216f, 410.413879f);
    pathB.cubicTo(756.983276f, 410.020538f, 756.616943f, 409.301788f, 756.616943f, 408.343445f);
    pathB.lineTo(756.616943f, 388.351746f);
    pathB.cubicTo(756.616943f, 387.387421f, 757.164978f, 386.548859f, 758.627502f, 385.067383f);
    pathB.cubicTo(755.523804f, 383.05484f, 753.97052f, 382.057556f, 750.862854f, 380.078949f);
    pathB.cubicTo(749.001038f, 382.112457f, 748.069641f, 383.130707f, 746.207825f, 385.174194f);
    pathB.cubicTo(746.501343f, 385.292999f, 746.647095f, 385.353912f, 746.939575f, 385.472687f);
    pathB.cubicTo(747.996765f, 386.183472f, 748.525879f, 386.538879f, 749.587036f, 387.257629f);
    pathB.cubicTo(750.224915f, 387.724823f, 750.498474f, 388.351746f, 750.498474f, 389.223267f);
    pathB.lineTo(750.498474f, 407.822327f);
    pathB.cubicTo(750.498474f, 408.694824f, 750.339722f, 409.955658f, 749.951416f, 410.847137f);
    pathB.cubicTo(749.550049f, 411.761566f, 749.039978f, 411.585876f, 748.487915f, 411.560913f);
    pathB.cubicTo(747.393799f, 411.503998f, 746.385498f, 410.53067f, 745.473083f, 410.022552f);
    pathB.cubicTo(744.760254f, 409.627228f, 744.380981f, 409.013275f, 744.380981f, 407.965088f);
    pathB.lineTo(744.380981f, 386.840363f);
    pathB.cubicTo(744.380981f, 385.791138f, 744.833191f, 384.763916f, 745.657776f, 383.839508f);
    pathB.cubicTo(742.656921f, 382.101501f, 741.161499f, 381.234985f, 738.162659f, 379.525909f);
    pathB.cubicTo(736.083191f, 381.548431f, 735.039978f, 382.562683f, 732.95459f, 384.60318f);
    pathB.moveTo(692.546936f, 385.171204f);
    pathB.cubicTo(693.552246f, 385.667358f, 696.018005f, 387.607025f, 698.122375f, 388.521454f);
    pathB.cubicTo(696.293518f, 390.043854f, 694.281982f, 391.844757f, 692.546936f, 393.294281f);
    pathB.lineTo(692.546936f, 385.171204f);
    pathB.close();
    pathB.moveTo(695.4729f, 379.417084f);
    pathB.cubicTo(694.635376f, 379.426086f, 684.32605f, 384.880707f, 684.322083f, 385.025452f);
    pathB.cubicTo(684.322083f, 385.025452f, 686.422485f, 387.645966f, 686.422485f, 388.521454f);
    pathB.lineTo(686.422485f, 409.300781f);
    pathB.cubicTo(686.422485f, 411.312347f, 685.51001f, 412.21579f, 684.595581f, 413.65033f);
    pathB.cubicTo(687.592468f, 414.504852f, 689.089905f, 414.945099f, 692.088745f, 415.833557f);
    pathB.cubicTo(693.645081f, 416.221893f, 696.128784f, 416.420563f, 697.667114f, 415.334412f);
    pathB.cubicTo(701.67926f, 412.494293f, 705.344971f, 407.783386f, 706.077698f, 405.240753f);
    pathB.cubicTo(707.721924f, 399.638367f, 696.822632f, 403.198273f, 696.845581f, 403.216248f);
    pathB.cubicTo(696.845581f, 403.216248f, 705.825134f, 401.960388f, 704.337708f, 406.658325f);
    pathB.cubicTo(703.683838f, 408.733765f, 701.044373f, 411.241455f, 699.129639f, 410.847137f);
    pathB.cubicTo(694.843018f, 409.968628f, 692.545959f, 409.876801f, 692.545959f, 407.432983f);
    pathB.lineTo(692.545959f, 395.563354f);
    pathB.cubicTo(695.838318f, 391.012177f, 705.134338f, 386.160522f, 705.162292f, 385.873993f);
    pathB.cubicTo(705.162292f, 385.873993f, 696.635925f, 379.416107f, 695.473938f, 379.417084f);
    pathB.cubicTo(695.474915f, 379.417084f, 695.473938f, 379.417084f, 695.4729f, 379.417084f);
    pathB.moveTo(570.463562f, 420.81601f);
    pathB.lineTo(570.463562f, 402.922729f);
    pathB.cubicTo(571.039551f, 402.800934f, 571.327087f, 402.743042f, 571.901123f, 402.625244f);
    pathB.lineTo(571.901123f, 423.142029f);
    pathB.cubicTo(570.911804f, 422.823578f, 570.463562f, 422.123779f, 570.463562f, 420.81601f);
    pathB.moveTo(570.463562f, 384.062134f);
    pathB.cubicTo(571.039551f, 384.149963f, 571.327087f, 384.198883f, 571.901123f, 384.290741f);
    pathB.lineTo(571.901123f, 401.580048f);
    pathB.cubicTo(571.327087f, 401.695862f, 571.039551f, 401.756744f, 570.463562f, 401.874542f);
    pathB.lineTo(570.463562f, 384.062134f);
    pathB.close();
    pathB.moveTo(573.880676f, 376.556f);
    pathB.cubicTo(572.483093f, 376.996246f, 561.476013f, 385.624451f, 561.482971f, 385.70929f);
    pathB.cubicTo(561.482971f, 385.70929f, 563.637268f, 388.554413f, 563.637268f, 389.688446f);
    pathB.lineTo(563.637268f, 398.423462f);
    pathB.cubicTo(556.411682f, 399.838043f, 555.429382f, 404.307373f, 555.418396f, 405.679993f);
    pathB.lineTo(555.418396f, 405.724915f);
    pathB.cubicTo(555.42041f, 405.94455f, 555.448364f, 406.073334f, 555.477295f, 406.083313f);
    pathB.cubicTo(555.477295f, 406.083313f, 558.070862f, 404.250458f, 563.637268f, 403.222229f);
    pathB.lineTo(563.637268f, 404.797516f);
    pathB.cubicTo(556.993713f, 406.233063f, 555.191772f, 412.494293f, 555.569153f, 412.614105f);
    pathB.cubicTo(555.569153f, 412.614105f, 561.572815f, 410.21521f, 563.637268f, 409.598267f);
    pathB.lineTo(563.637268f, 424.00354f);
    pathB.cubicTo(563.637268f, 426.357483f, 563.36676f, 427.901855f, 562.291565f, 429.70874f);
    pathB.cubicTo(565.448181f, 430.067139f, 567.028442f, 430.256805f, 570.192017f, 430.653137f);
    pathB.cubicTo(571.99292f, 430.893707f, 574.782166f, 430.669098f, 576.403381f, 429.136719f);
    pathB.cubicTo(580.960571f, 424.828125f, 586.135681f, 419.346527f, 586.135681f, 416.115082f);
    pathB.lineTo(586.135681f, 406.511566f);
    pathB.cubicTo(586.135681f, 405.377533f, 586.047791f, 404.608856f, 586.678711f, 403.271149f);
    pathB.cubicTo(584.151062f, 404.98819f, 582.888245f, 405.851715f, 580.362549f, 407.587738f);
    pathB.cubicTo(579.281433f, 408.320465f, 579.192566f, 409.2948f, 579.192566f, 410.955933f);
    pathB.lineTo(579.192566f, 421.869202f);
    pathB.cubicTo(579.192566f, 423.180969f, 577.746033f, 423.273804f, 577.392639f, 423.266815f);
    pathB.cubicTo(575.636658f, 423.228882f, 574.153259f, 423.295776f, 573.071106f, 423.077148f);
    pathB.lineTo(573.071106f, 384.663086f);
    pathB.cubicTo(575.230408f, 385.379852f, 576.309509f, 385.742249f, 578.473816f, 386.473999f);
    pathB.cubicTo(579.373291f, 386.996094f, 579.553955f, 387.490234f, 579.553955f, 388.013336f);
    pathB.cubicTo(581.861023f, 384.848785f, 583.015991f, 383.267487f, 585.325073f, 380.114899f);
    pathB.cubicTo(581.680298f, 379.229431f, 575.865295f, 376.520081f, 574.157227f, 376.521057f);
    pathB.cubicTo(574.047424f, 376.522064f, 573.955566f, 376.533051f, 573.880676f, 376.556f);
    pathB.moveTo(593.447083f, 375.096527f);
    pathB.cubicTo(592.363953f, 375.804291f, 591.821899f, 376.772644f, 591.821899f, 377.908691f);
    pathB.lineTo(591.821899f, 419.46933f);
    pathB.cubicTo(591.821899f, 420.517517f, 591.187012f, 422.018951f, 589.921143f, 423.991577f);
    pathB.cubicTo(591.2948f, 424.412842f, 591.982605f, 424.622467f, 593.354248f, 425.050751f);
    pathB.cubicTo(594.53125f, 425.462036f, 595.525513f, 425.555878f, 596.427979f, 425.404144f);
    pathB.cubicTo(597.150757f, 425.279358f, 597.785645f, 424.914978f, 598.326721f, 424.475739f);
    pathB.cubicTo(600.935242f, 422.385315f, 602.846985f, 419.809753f, 602.759094f, 419.749847f);
    pathB.cubicTo(602.759094f, 419.749847f, 601.582153f, 419.935516f, 600.59082f, 419.831696f);
    pathB.cubicTo(600.0448f, 419.74585f, 599.774231f, 419.700928f, 599.233154f, 419.615082f);
    pathB.cubicTo(598.416565f, 419.484314f, 597.965332f, 418.860382f, 597.965332f, 417.988861f);
    pathB.lineTo(597.965332f, 396.857147f);
    pathB.cubicTo(597.965332f, 395.376678f, 598.326721f, 394.617004f, 598.867798f, 394.528137f);
    pathB.cubicTo(599.232178f, 394.466248f, 599.773254f, 394.731812f, 600.59082f, 395.124115f);
    pathB.cubicTo(601.601074f, 395.589325f, 602.111206f, 395.819946f, 603.123474f, 396.288116f);
    pathB.cubicTo(603.93811f, 396.686432f, 603.93512f, 397.38324f, 603.93512f, 398.169891f);
    pathB.cubicTo(603.93512f, 405.971497f, 603.93512f, 413.768127f, 603.93811f, 421.569702f);
    pathB.cubicTo(603.93811f, 425.325256f, 601.109924f, 430.634155f, 601.133911f, 430.656128f);
    pathB.cubicTo(601.133911f, 430.656128f, 605.184937f, 427.222015f, 607.017822f, 424.414825f);
    pathB.cubicTo(609.118164f, 421.201355f, 610.280212f, 417.987854f, 610.280212f, 415.109802f);
    pathB.lineTo(610.280212f, 394.593048f);
    pathB.cubicTo(610.280212f, 393.890228f, 610.823242f, 393.112579f, 611.728699f, 392.020447f);
    pathB.cubicTo(608.827698f, 390.960266f, 604.000977f, 387.703857f, 602.759094f, 387.967407f);
    pathB.cubicTo(602.120239f, 388.104187f, 599.957947f, 391.29071f, 597.965332f, 393.27829f);
    pathB.lineTo(597.965332f, 374.422668f);
    pathB.cubicTo(597.965332f, 373.461334f, 598.326721f, 372.440063f, 598.867798f, 371.567566f);
    pathB.cubicTo(596.701538f, 372.96817f, 595.616394f, 373.677948f, 593.447083f, 375.096527f);
    pathB.moveTo(718.054138f, 409.318756f);
    pathB.cubicTo(717.461182f, 408.789673f, 716.867188f, 408.178711f, 716.867188f, 407.218353f);
    pathB.lineTo(716.867188f, 387.053986f);
    pathB.cubicTo(716.867188f, 385.305969f, 717.323425f, 385.566528f, 718.328674f, 386.013763f);
    pathB.cubicTo(719.645386f, 386.859314f, 720.307251f, 387.284576f, 721.622009f, 388.135132f);
    pathB.cubicTo(722.266907f, 388.4935f, 722.903809f, 388.934753f, 722.903809f, 389.721405f);
    pathB.lineTo(722.903809f, 407.794373f);
    pathB.cubicTo(722.903809f, 408.66687f, 722.746094f, 410.490753f, 722.259888f, 410.758301f);
    pathB.cubicTo(722.125122f, 410.83017f, 721.950439f, 410.862122f, 721.746826f, 410.862122f);
    pathB.cubicTo(720.655701f, 410.864105f, 718.747925f, 409.936707f, 718.054138f, 409.318756f);
    pathB.moveTo(711.928711f, 364.782227f);
    pathB.cubicTo(711.195923f, 365.134613f, 710.648865f, 365.834412f, 710.648865f, 366.794769f);
    pathB.lineTo(710.648865f, 407.392059f);
    pathB.cubicTo(710.648865f, 409.397614f, 708.519531f, 411.37323f, 708.547485f, 411.684692f);
    pathB.cubicTo(708.550476f, 411.745605f, 711.838867f, 413.067322f, 713.849365f, 414.368073f);
    pathB.cubicTo(717.766663f, 416.906738f, 720.162537f, 415.845551f, 722.354797f, 414.073608f);
    pathB.cubicTo(724.059875f, 412.69397f, 726.55957f, 410.981903f, 730.675537f, 410.124359f);
    pathB.cubicTo(729.75708f, 409.143066f, 729.213013f, 407.993042f, 729.213013f, 406.683289f);
    pathB.cubicTo(729.213013f, 399.630402f, 729.209045f, 396.103455f, 729.209045f, 389.047546f);
    pathB.cubicTo(729.209045f, 387.648956f, 730.577698f, 385.292023f, 730.583679f, 385.149261f);
    pathB.cubicTo(730.583679f, 385.149261f, 720.888306f, 378.762207f, 719.609497f, 378.947906f);
    pathB.cubicTo(719.275085f, 378.996826f, 717.872498f, 381.118164f, 716.868225f, 381.896851f);
    pathB.lineTo(716.868225f, 365.046783f);
    pathB.cubicTo(716.868225f, 363.740021f, 716.960083f, 363.043213f, 717.597961f, 362);
    pathB.cubicTo(715.331848f, 363.104095f, 714.19873f, 363.657166f, 711.928711f, 364.782227f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpeverytechpro_blogspot_com100(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1074.29285f, 627.292786f);
    path.quadTo(1074.58582f, 627, 1075, 627);
    path.lineTo(1117, 627);
    path.quadTo(1124.04163f, 627, 1129.02246f, 631.9776f);
    path.quadTo(1134, 636.958374f, 1134, 644);
    path.lineTo(1134, 645);
    path.quadTo(1134, 652.041626f, 1129.02246f, 657.0224f);
    path.quadTo(1124.04163f, 662, 1117, 662);
    path.lineTo(1075, 662);
    path.quadTo(1074.58582f, 662, 1074.29285f, 661.707214f);
    path.quadTo(1074, 661.414185f, 1074, 661);
    path.lineTo(1074, 628);
    path.quadTo(1074, 627.585815f, 1074.29285f, 627.292786f);
    path.close();
    path.moveTo(1076, 629);
    path.lineTo(1117, 629);
    path.cubicTo(1125.2843f, 629, 1132, 635.715698f, 1132, 644);
    path.lineTo(1132, 645);
    path.cubicTo(1132, 653.284302f, 1125.2843f, 660, 1117, 660);
    path.lineTo(1076, 660);
    path.lineTo(1076, 629);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1074, 627);
    pathB.lineTo(1075, 628);
    pathB.lineTo(1116.5f, 644.5f);
    pathB.lineTo(1134, 627);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpflite_com41(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(301.464081f, 424);
    path.lineTo(296, 433.46405f);
    path.lineTo(296, 433.810822f);
    path.lineTo(303.25589f, 438);
    path.lineTo(304.729736f, 438);
    path.lineTo(311, 427.139557f);
    path.lineTo(311, 426.305237f);
    path.lineTo(307.007202f, 424);
    path.lineTo(301.464081f, 424);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(302.849854f, 421.599762f);
    pathB.lineTo(311.510101f, 426.599762f);
    pathB.lineTo(304.510101f, 438.724121f);
    pathB.lineTo(295.849854f, 433.724121f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpilkoora_com37(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(818, 157);
    path.cubicTo(818, 148.715729f, 824.715698f, 142, 833, 142);
    path.lineTo(909, 142);
    path.lineTo(909, 143);
    path.lineTo(833, 143);
    path.cubicTo(825.268005f, 143, 819, 149.268005f, 819, 157);
    path.lineTo(819, 926);
    path.lineTo(818, 926);
    path.lineTo(818, 157);
    path.close();
    path.moveTo(1184, 926);
    path.lineTo(1185, 926);
    path.lineTo(1185, 157);
    path.cubicTo(1185, 148.715729f, 1178.2843f, 142, 1170, 142);
    path.lineTo(1093, 142);
    path.lineTo(1093, 143);
    path.lineTo(1170, 143);
    path.cubicTo(1177.73193f, 143, 1184, 149.268005f, 1184, 157);
    path.lineTo(1184, 926);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1185, 142);
    pathB.lineTo(1001.5f, 325.5f);
    pathB.lineTo(1001.5f, 782.5f);
    pathB.lineTo(1185, 966);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpmm4everfriends_com43(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(540.74231f, 215.922546f);
    path.cubicTo(540.893127f, 215.391159f, 541.443909f, 215.090134f, 541.972473f, 215.250168f);
    path.lineTo(581.213318f, 227.131104f);
    path.cubicTo(581.741882f, 227.291153f, 582.048157f, 227.851654f, 581.897339f, 228.383041f);
    path.lineTo(576.708923f, 246.663925f);
    path.cubicTo(576.558167f, 247.195297f, 576.007324f, 247.496338f, 575.47876f, 247.336288f);
    path.lineTo(536.237915f, 235.455353f);
    path.cubicTo(535.709351f, 235.295319f, 535.403137f, 234.734802f, 535.553894f, 234.20343f);
    path.lineTo(540.74231f, 215.922546f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(541.015381f, 214.960388f);
    pathB.lineTo(582.17041f, 227.420883f);
    pathB.lineTo(576.435852f, 247.626068f);
    pathB.lineTo(535.280823f, 235.165573f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpmtrk_uz27(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(33, 787);
    path.lineTo(33, 412);
    path.lineTo(1233, 412);
    path.lineTo(1233, 787);
    path.quadTo(1233, 793.213196f, 1228.60803f, 797.607971f);
    path.quadTo(1224.21326f, 802, 1218, 802);
    path.lineTo(48, 802);
    path.quadTo(41.7867966f, 802, 37.3919983f, 797.607971f);
    path.quadTo(33, 793.213196f, 33, 787);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(33, 412);
    pathB.lineTo(1233, 412);
    pathB.lineTo(1233, 787);
    pathB.quadTo(1233, 793.213196f, 1228.60791f, 797.608032f);
    pathB.quadTo(1224.21313f, 802, 1218, 802);
    pathB.lineTo(48, 802);
    pathB.quadTo(41.7867432f, 802, 37.3919678f, 797.608032f);
    pathB.quadTo(33, 793.213196f, 33, 787);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpfrauen_magazin_com83(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(808, 886);
    path.cubicTo(805.581055f, 886, 803.563293f, 887.717773f, 803.100037f, 890);
    path.lineTo(1122.90002f, 890);
    path.cubicTo(1122.43677f, 887.717773f, 1120.41895f, 886, 1118, 886);
    path.lineTo(808, 886);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(808, 886);
    pathB.lineTo(1118, 886);
    pathB.cubicTo(1120.76147f, 886, 1123, 888.238586f, 1123, 891);
    pathB.lineTo(1123, 1521);
    pathB.cubicTo(1123, 1523.20911f, 1120.76147f, 1525, 1118, 1525);
    pathB.lineTo(808, 1525);
    pathB.cubicTo(805.238586f, 1525, 803, 1523.20911f, 803, 1521);
    pathB.lineTo(803, 891);
    pathB.cubicTo(803, 888.238586f, 805.238586f, 886, 808, 886);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpi_gino_com16(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(184, 734);
    path.quadTo(133.051727f, 734, 97.0258636f, 770.025879f);
    path.quadTo(61, 806.051758f, 61, 857);
    path.quadTo(61, 895.835083f, 81.9317017f, 926);
    path.lineTo(286.068298f, 926);
    path.quadTo(307, 895.835083f, 307, 857);
    path.quadTo(307, 806.051758f, 270.974121f, 770.025879f);
    path.quadTo(234.948273f, 734, 184, 734);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(185, 734);
    pathB.cubicTo(252.93103f, 734, 308, 789.06897f, 308, 857);
    pathB.cubicTo(308, 924.93103f, 252.93103f, 980, 185, 980);
    pathB.lineTo(184, 980);
    pathB.cubicTo(116.068977f, 980, 61, 924.93103f, 61, 857);
    pathB.cubicTo(61, 789.06897f, 116.068977f, 734, 184, 734);
    pathB.lineTo(185, 734);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skppchappy_com_au102(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(363, 493);
    path.cubicTo(360.790863f, 493, 359, 494.790863f, 359, 497);
    path.lineTo(359, 656);
    path.cubicTo(359, 658.209106f, 360.790863f, 660, 363, 660);
    path.lineTo(623.001709f, 660);
    path.cubicTo(624.657776f, 659.999023f, 626, 658.65625f, 626, 657);
    path.lineTo(626, 496);
    path.cubicTo(626, 494.343872f, 624.657959f, 493.00116f, 623.002075f, 493);
    path.lineTo(363, 493);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(362, 494);
    pathB.lineTo(623, 494);
    pathB.cubicTo(624.65686f, 494, 626, 494.895416f, 626, 496);
    pathB.lineTo(626, 657);
    pathB.cubicTo(626, 658.65686f, 624.65686f, 660, 623, 660);
    pathB.lineTo(362, 660);
    pathB.cubicTo(360.34314f, 660, 359, 658.65686f, 359, 657);
    pathB.lineTo(359, 496);
    pathB.cubicTo(359, 494.895416f, 360.34314f, 494, 362, 494);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpsciality_com161(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(656, 728);
    path.cubicTo(653.790833f, 728, 652, 729.790833f, 652, 732);
    path.lineTo(652, 789);
    path.cubicTo(652, 791.209106f, 653.790833f, 793, 656, 793);
    path.lineTo(769.001282f, 793);
    path.cubicTo(770.657532f, 792.999268f, 772, 791.656433f, 772, 790);
    path.lineTo(772, 731);
    path.cubicTo(772, 729.34314f, 770.65686f, 728, 769, 728);
    path.lineTo(656, 728);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(655, 729);
    pathB.lineTo(769, 729);
    pathB.cubicTo(770.65686f, 729, 772, 729.895447f, 772, 731);
    pathB.lineTo(772, 790);
    pathB.cubicTo(772, 791.65686f, 770.65686f, 793, 769, 793);
    pathB.lineTo(655, 793);
    pathB.cubicTo(653.34314f, 793, 652, 791.65686f, 652, 790);
    pathB.lineTo(652, 731);
    pathB.cubicTo(652, 729.895447f, 653.34314f, 729, 655, 729);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpsudoestenegocios_com186(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 495);
    path.lineTo(1.23685242e-14f, 293);
    path.lineTo(44, 293);
    path.quadTo(45.6568527f, 293, 46.8288002f, 294.171204f);
    path.quadTo(48, 295.34314f, 48, 297);
    path.lineTo(48, 491);
    path.quadTo(48, 492.65686f, 46.8288002f, 493.828796f);
    path.quadTo(45.6568527f, 495, 44, 495);
    path.lineTo(0, 495);
    path.close();
    path.moveTo(1, 294);
    path.lineTo(44, 294);
    path.cubicTo(45.6568565f, 294, 47, 295.34314f, 47, 297);
    path.lineTo(47, 491);
    path.cubicTo(47, 492.65686f, 45.6568565f, 494, 44, 494);
    path.lineTo(1, 494);
    path.lineTo(1, 294);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(48, 495);
    pathB.lineTo(24, 471);
    pathB.lineTo(24, 317);
    pathB.lineTo(48, 293);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpthesuburbanite_com213(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(863.439026f, 692);
    path.lineTo(863.283264f, 692);
    path.lineTo(802, 708.420837f);
    path.lineTo(802, 718.773621f);
    path.lineTo(866, 701.624817f);
    path.lineTo(866, 701.557922f);
    path.lineTo(863.439026f, 692);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(783.256775f, 713.443054f);
    pathB.lineTo(863.428589f, 691.96106f);
    pathB.lineTo(866.016724f, 701.620361f);
    pathB.lineTo(785.84491f, 723.102356f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skphostloco_com11(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(6.66133815e-16f, 648);
    path.lineTo(25.8522835f, 648);
    path.quadTo(27.5087376f, 647.999634f, 28.6807098f, 646.82843f);
    path.quadTo(29.8518829f, 645.656433f, 29.8522835f, 644);
    path.lineTo(29.8522835f, 467);
    path.quadTo(29.8518829f, 465.343536f, 28.6807098f, 464.17157f);
    path.quadTo(27.5087376f, 463.000397f, 25.8522835f, 463);
    path.lineTo(2.22044605e-16f, 463);
    path.lineTo(6.66133815e-16f, 648);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(0, 463);
    pathB.lineTo(30, 463);
    pathB.lineTo(30, 648);
    pathB.lineTo(0, 648);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpsergeychunkevich_com8(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 926);
    path.lineTo(0, 0);
    path.lineTo(1265, 0);
    path.lineTo(1265, 926);
    path.lineTo(0, 926);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(37, 374);
    pathB.lineTo(37, 535);
    pathB.cubicTo(37, 536.65686f, 35.6568565f, 538, 34, 538);
    pathB.lineTo(1.02866934e-14f, 538);
    pathB.lineTo(6.12303177e-17f, 371);
    pathB.lineTo(34, 371);
    pathB.cubicTo(35.6568565f, 371, 37, 372.34314f, 37, 374);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skptracksflow_com9(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(16, 56);
    path.lineTo(32, 56);
    path.lineTo(32, 72);
    path.lineTo(16, 72);
    path.lineTo(16, 56);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kEvenOdd_FillType);
    pathB.moveTo(31.65625f, 70.0555649f);
    pathB.lineTo(31.65625f, 70.0554962f);
    pathB.lineTo(26.9727192f, 65.3615341f);
    pathB.cubicTo(27.6210003f, 64.4029694f, 28.0048752f, 63.2470932f, 28.0048752f, 62.0027809f);
    pathB.cubicTo(28.0048752f, 58.6875305f, 25.3199062f, 56, 22.0046558f, 56);
    pathB.cubicTo(18.6894073f, 56, 16.0031872f, 58.6875305f, 16.0031872f, 62.0027809f);
    pathB.cubicTo(16.0031872f, 65.3180008f, 18.6913433f, 68.0055618f, 22.0066261f, 68.0055618f);
    pathB.cubicTo(23.2509995f, 68.0055618f, 24.4072189f, 67.6187515f, 25.3657818f, 66.9704056f);
    pathB.lineTo(30.0599365f, 71.65625f);
    pathB.lineTo(30.0600014f, 71.65625f);
    pathB.cubicTo(30.2668133f, 71.875f, 30.5524693f, 71.9992828f, 30.868f, 71.9992828f);
    pathB.cubicTo(31.4994049f, 71.9992828f, 32.0014687f, 71.4909363f, 32.0014687f, 70.8595276f);
    pathB.cubicTo(32.0015335f, 70.5439072f, 31.875f, 70.2623444f, 31.65625f, 70.0555649f);
    pathB.close();
    pathB.moveTo(18.0054054f, 62.0027809f);
    pathB.cubicTo(18.0054054f, 59.7925949f, 19.7970943f, 58.0009079f, 22.0072823f, 58.0009079f);
    pathB.cubicTo(24.2174377f, 58.0009079f, 26.0091248f, 59.7925949f, 26.0091248f, 62.0027809f);
    pathB.cubicTo(26.0091248f, 64.2129364f, 24.2174377f, 66.0046234f, 22.0072803f, 66.0046234f);
    pathB.cubicTo(19.7970943f, 66.0045929f, 18.0054054f, 64.2129059f, 18.0054054f, 62.0027809f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpautobutler_dk29(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 926);
    path.lineTo(0, 0);
    path.lineTo(1265, 0);
    path.lineTo(1265, 926);
    path.lineTo(0, 926);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(21, 162);
    pathB.lineTo(21, 301);
    pathB.lineTo(8.57224448e-15f, 301);
    pathB.lineTo(6.12303177e-17f, 162);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skponlinecollege_org144(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(179, 407);
    path.cubicTo(177.34314f, 407, 176, 408.34314f, 176, 410);
    path.lineTo(176, 436);
    path.cubicTo(176, 437.65686f, 177.34314f, 439, 179, 439);
    path.lineTo(337.002289f, 439);
    path.cubicTo(338.105835f, 438.998779f, 339, 438.103821f, 339, 437);
    path.lineTo(339, 409);
    path.cubicTo(339, 407.896362f, 338.10611f, 407.001526f, 337.002838f, 407);
    path.lineTo(179, 407);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(179, 408);
    pathB.lineTo(337, 408);
    pathB.cubicTo(338.65686f, 408, 340, 408.895416f, 340, 410);
    pathB.lineTo(340, 436);
    pathB.cubicTo(340, 437.65686f, 338.65686f, 439, 337, 439);
    pathB.lineTo(179, 439);
    pathB.cubicTo(177.895432f, 439, 177, 437.65686f, 177, 436);
    pathB.lineTo(177, 410);
    pathB.cubicTo(177, 408.895416f, 177.895432f, 408, 179, 408);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpnational_com_au81(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(807, 817);
    path.quadTo(806.585876f, 817.000122f, 806.292908f, 817.292908f);
    path.quadTo(806.000122f, 817.585876f, 806, 818);
    path.lineTo(806, 881);
    path.lineTo(1111, 881);
    path.lineTo(1111, 818);
    path.quadTo(1110.99988f, 817.585876f, 1110.70715f, 817.292908f);
    path.quadTo(1110.41406f, 817.000122f, 1110, 817);
    path.lineTo(807, 817);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(807, 817);
    pathB.lineTo(1110, 817);
    pathB.cubicTo(1110.55225f, 817, 1111, 817.447693f, 1111, 818);
    pathB.lineTo(1111, 880);
    pathB.lineTo(806, 880);
    pathB.lineTo(806, 818);
    pathB.cubicTo(806, 817.447693f, 806.447693f, 817, 807, 817);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skprentacheat_com30(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(967, 263);
    path.quadTo(966.585876f, 263.000092f, 966.292908f, 263.292908f);
    path.quadTo(966.000122f, 263.585876f, 966, 264);
    path.lineTo(966, 301);
    path.lineTo(1214, 301);
    path.lineTo(1214, 264);
    path.quadTo(1213.99988f, 263.585876f, 1213.70715f, 263.292908f);
    path.quadTo(1213.41406f, 263.000092f, 1213, 263);
    path.lineTo(967, 263);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(967, 263);
    pathB.lineTo(1213, 263);
    pathB.cubicTo(1213.55225f, 263, 1214, 263.447723f, 1214, 264);
    pathB.lineTo(1214, 300);
    pathB.lineTo(966, 300);
    pathB.lineTo(966, 264);
    pathB.cubicTo(966, 263.447723f, 966.447693f, 263, 967, 263);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpbreakmystyle_com10(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(271.032867f, -5.32907052e-15f);
    path.lineTo(56.9671326f, -5.16253706e-15f);
    path.quadTo(52.7835083f, 3.69968891f, 48.7416f, 7.74160004f);
    path.quadTo(1, 55.4831848f, 1, 123);
    path.quadTo(1, 190.516815f, 48.7416f, 238.258392f);
    path.quadTo(96.4831848f, 286, 164, 286);
    path.quadTo(231.516815f, 286, 279.258392f, 238.258392f);
    path.quadTo(327, 190.516815f, 327, 123);
    path.quadTo(327, 55.4831848f, 279.258392f, 7.74160004f);
    path.quadTo(275.216431f, 3.69964004f, 271.032867f, -5.32907052e-15f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(327, 123);
    pathB.quadTo(327, 190.516815f, 279.258392f, 238.258392f);
    pathB.quadTo(231.516815f, 286, 164, 286);
    pathB.quadTo(96.4831848f, 286, 48.7416f, 238.258392f);
    pathB.quadTo(1, 190.516815f, 1, 123);
    pathB.quadTo(1, 55.4831848f, 48.7416f, 7.74160004f);
    pathB.quadTo(96.4831848f, -40, 164, -40);
    pathB.quadTo(231.516815f, -40, 279.258392f, 7.74160004f);
    pathB.quadTo(327, 55.4831848f, 327, 123);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpsd_graphic_net104(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(475.421448f, 836.985962f);
    path.lineTo(461.280975f, 841.990662f);
    path.cubicTo(466.80899f, 857.609802f, 458.62854f, 874.752991f, 443.009399f, 880.281006f);
    path.cubicTo(435.199829f, 883.044983f, 427.009247f, 882.381897f, 420.080048f, 879.075378f);
    path.lineTo(413.620056f, 892.613037f);
    path.quadTo(430.419983f, 900.629761f, 447.96701f, 894.43811f);
    path.quadTo(448.00708f, 894.42395f, 448.014038f, 894.421509f);
    path.quadTo(448.043976f, 894.410889f, 448.061066f, 894.404846f);
    path.quadTo(465.596313f, 888.179932f, 473.613037f, 871.379944f);
    path.quadTo(477.351227f, 863.546143f, 478, 855.549866f);
    path.lineTo(478, 848.804321f);
    path.quadTo(477.528076f, 842.93811f, 475.421448f, 836.985962f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(405.592621f, 909.435547f);
    pathB.lineTo(390.578583f, 867.014099f);
    pathB.lineTo(433, 852.000061f);
    pathB.lineTo(490.435486f, 879.40741f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* this cubic/quad pair
 c = 430,280 430,278.895416 473.876068,278 528,278
 q = 430,280 430.009796,277.101196 458.703552,275.050262
 only intersect at the shared point (430,280)
 they sort backwards because the tangent from pt[0] to control pt[1]
 c' = (0.00000000000000000, -1.1045837402343750)
 q' = (0.0097961425781250000, -2.8988037109375000)
 suggests that the quad is counterclockwise of the cubic, when the reverse is true
 the angle code is fooled because the control pt[1] of both the quad and cubic
 is far away from cubic cntl [2] and quad pt [2].
 Maybe in angle setup, this instability can be detected to suppress sorting on the initial tangent
 Or the error term can be passed to NearRay that is magnified by the distance from the next ctrl?
 */
static void skpnaoxrane_ru23(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(458.703552f, 275.050262f);
    path.quadTo(487.41687f, 273.000702f, 528, 273);
    path.lineTo(529, 273);
    path.quadTo(530.242371f, 273.000305f, 531.121338f, 273.878693f);
    path.quadTo(531.999695f, 274.75766f, 532, 276);
    path.lineTo(532, 378);
    path.quadTo(531.990173f, 380.898804f, 503.296448f, 382.949738f);
    path.quadTo(474.58313f, 384.999298f, 434, 385);
    path.lineTo(433, 385);
    path.quadTo(431.75766f, 384.999695f, 430.878693f, 384.121307f);
    path.quadTo(430.000305f, 383.24234f, 430, 382);
    path.lineTo(430, 280);
    path.quadTo(430.009796f, 277.101196f, 458.703552f, 275.050262f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(528, 278);
    pathB.lineTo(529, 278);
    pathB.cubicTo(530.65686f, 278, 532, 278, 532, 278);
    pathB.lineTo(532, 378);
    pathB.cubicTo(532, 379.104584f, 488.123932f, 380, 434, 380);
    pathB.lineTo(433, 380);
    pathB.cubicTo(431.34314f, 380, 430, 380, 430, 380);
    pathB.lineTo(430, 280);
    pathB.cubicTo(430, 278.895416f, 473.876068f, 278, 528, 278);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* didn't investigate thoroughly, but looks to be missorting quad and cubic
    {{468.507751,560.724426}, {467.275146,552.856262}, {465.84668,547.288391}}
    {{463.779907,542.671143}, {464.829529,542.672974}, {466.946289,550.755676}, {468.507751,560.724426}}
    decision maker is case 14 leftLessThanRight
 */
static void skptcmevents_org23(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(465.503998f, 546);
    path.lineTo(347, 546);
    path.lineTo(347, 632);
    path.lineTo(469.104248f, 632);
    path.quadTo(470.79007f, 627.638672f, 471.833496f, 621.036255f);
    path.quadTo(474.902588f, 601.562866f, 470.591064f, 574.024353f);
    path.lineTo(468.507751f, 560.724426f);
    path.quadTo(467.275146f, 552.856262f, 465.84668f, 547.288391f);
    path.quadTo(465.670349f, 546.601501f, 465.503998f, 546);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(363.052246f, 542.495361f);
    pathB.lineTo(463.779907f, 542.671143f);
    pathB.cubicTo(464.829529f, 542.672974f, 466.946289f, 550.755676f, 468.507751f, 560.724426f);
    pathB.lineTo(470.591064f, 574.024353f);
    pathB.cubicTo(476.26178f, 610.226624f, 471.498932f, 639.557922f, 459.953003f, 639.537781f);
    pathB.lineTo(368.727936f, 639.378601f);
    pathB.cubicTo(351.933868f, 639.349304f, 337.053741f, 631.244324f, 335.492249f, 621.275574f);
    pathB.lineTo(325.968597f, 560.475708f);
    pathB.cubicTo(324.407104f, 550.506958f, 341.01001f, 542.456909f, 363.052246f, 542.495361f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpredbullskatearcade_es16(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(936.765625f, 458.965302f);
    path.cubicTo(937.028442f, 453.863251f, 933.145813f, 449.864502f, 928.093445f, 450.033905f);
    path.lineTo(661.882263f, 458.958862f);
    path.lineTo(661.875366f, 458.959106f);
    path.cubicTo(656.828369f, 459.13205f, 652.525085f, 463.399719f, 652.258545f, 468.496124f);
    path.lineTo(652.258179f, 468.503662f);
    path.lineTo(649.021729f, 531.322754f);
    path.cubicTo(648.75885f, 536.424805f, 652.641479f, 540.423523f, 657.693848f, 540.25415f);
    path.lineTo(923.905029f, 531.329163f);
    path.cubicTo(928.955017f, 531.159851f, 933.262268f, 526.890442f, 933.528809f, 521.791565f);
    path.lineTo(933.529175f, 521.784363f);
    path.lineTo(936.765625f, 458.965302f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(661.882263f, 458.958862f);
    pathB.lineTo(928.093445f, 450.033905f);
    pathB.cubicTo(929.103882f, 450, 929.709961f, 454.108612f, 929.447144f, 459.210663f);
    pathB.lineTo(926.210693f, 522.029724f);
    pathB.cubicTo(926.079224f, 524.58075f, 925.153442f, 526.676208f, 924.143066f, 526.710083f);
    pathB.lineTo(657.931885f, 535.635071f);
    pathB.cubicTo(652.879456f, 535.804443f, 648.890259f, 533.873779f, 649.021729f, 531.322754f);
    pathB.lineTo(652.258179f, 468.503662f);
    pathB.cubicTo(652.520996f, 463.401611f, 656.829834f, 459.128235f, 661.882263f, 458.958862f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpfinanzasdigital_com9(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(156, 126);
    path.quadTo(154.343552f, 126.000397f, 153.17157f, 127.17157f);
    path.quadTo(152.000397f, 128.343552f, 152, 130);
    path.lineTo(152, 174);
    path.lineTo(1114, 174);
    path.lineTo(1114, 130);
    path.quadTo(1113.99963f, 128.343552f, 1112.82837f, 127.17157f);
    path.quadTo(1111.65649f, 126.000397f, 1110, 126);
    path.lineTo(156, 126);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(156, 126);
    pathB.lineTo(1110, 126);
    pathB.cubicTo(1111.65686f, 126, 1113, 127.790863f, 1113, 130);
    pathB.lineTo(1113, 174);
    pathB.lineTo(153, 174);
    pathB.lineTo(153, 130);
    pathB.cubicTo(153, 127.790863f, 154.34314f, 126, 156, 126);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skppartainasdemo250_org56(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(182.000015f, 645);
    path.lineTo(182, 640);
    path.cubicTo(174.322327f, 640, 166.644669f, 637.071045f, 160.786804f, 631.213196f);
    path.cubicTo(149.071075f, 619.497437f, 149.071075f, 600.502563f, 160.786804f, 588.786804f);
    path.lineTo(157.251266f, 585.251221f);
    path.quadTo(147, 595.502502f, 147.000015f, 610);
    path.quadTo(147, 624.482605f, 157.230255f, 634.727722f);
    path.quadTo(157.251251f, 634.748779f, 157.251282f, 634.748779f);
    path.quadTo(157.282852f, 634.780334f, 157.272263f, 634.769775f);
    path.quadTo(167.517334f, 645, 182.000015f, 645);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(182, 659.497498f);
    pathB.lineTo(206.748749f, 634.748718f);
    pathB.lineTo(182.000015f, 610);
    pathB.lineTo(132.502533f, 610);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpmlk_com326(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(154, 670);
    path.cubicTo(151.238571f, 670, 149, 672.238586f, 149, 675);
    path.lineTo(149, 710.001465f);
    path.cubicTo(149.000809f, 712.209961f, 150.791367f, 714, 153, 714);
    path.lineTo(189, 714);
    path.cubicTo(191.209137f, 714, 193, 712.209167f, 193, 710);
    path.lineTo(193, 675);
    path.cubicTo(193, 672.238586f, 190.761429f, 670, 188, 670);
    path.lineTo(154, 670);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(154, 671);
    pathB.lineTo(188, 671);
    pathB.cubicTo(190.761429f, 671, 193, 672.790833f, 193, 675);
    pathB.lineTo(193, 710);
    pathB.cubicTo(193, 712.761414f, 190.761429f, 715, 188, 715);
    pathB.lineTo(154, 715);
    pathB.cubicTo(151.238571f, 715, 149, 712.761414f, 149, 710);
    pathB.lineTo(149, 675);
    pathB.cubicTo(149, 672.790833f, 151.238571f, 671, 154, 671);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpcyclist_friends_gr52(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(50, 182);
    path.lineTo(1215, 182);
    path.lineTo(1215, 202);
    path.quadTo(1214.99951f, 204.070572f, 1213.53552f, 205.535538f);
    path.quadTo(1212.07056f, 206.999496f, 1210, 207);
    path.lineTo(55, 207);
    path.quadTo(52.9294319f, 206.999496f, 51.4644661f, 205.535538f);
    path.quadTo(50.0004997f, 204.070572f, 50, 202);
    path.lineTo(50, 182);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(50, 183);
    pathB.lineTo(1215, 183);
    pathB.lineTo(1215, 202);
    pathB.cubicTo(1215, 204.761429f, 1212.76147f, 207, 1210, 207);
    pathB.lineTo(55, 207);
    pathB.cubicTo(52.238575f, 207, 50, 204.761429f, 50, 202);
    pathB.lineTo(50, 183);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* cubic ends just above opp line */
static void skpwww_fj_p_com_22(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(172, 201);
    path.lineTo(172, 202);
    path.lineTo(220, 202);
    path.cubicTo(221.65686f, 202, 223, 200.65686f, 223, 199);
    path.cubicTo(223, 200.104568f, 221.65686f, 201, 220, 201);
    path.lineTo(172, 201);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(161, 202);
    pathB.lineTo(161, 199);
    pathB.lineTo(223, 199.000015f);
    pathB.lineTo(223, 202);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// pair of lines are not quite coincident, so sorting line/cubic fails (i think)
static void skpwww_lavoixdunord_fr_11(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(806, 57);
    path.cubicTo(806, 55.3431473f, 807.34314f, 54, 809, 54);
    path.lineTo(930, 54);
    path.cubicTo(931.65686f, 54, 933, 55.3431473f, 933, 57);
    path.lineTo(933, 91);
    path.cubicTo(933, 92.6568527f, 931.65686f, 94, 930, 94);
    path.lineTo(809, 94);
    path.cubicTo(807.34314f, 94, 806, 92.6568527f, 806, 91);
    path.lineTo(806, 57);
    path.close();
    path.moveTo(808, 58);
    path.cubicTo(808, 56.8954315f, 808.895447f, 56, 810, 56);
    path.lineTo(929, 56);
    path.cubicTo(930.104553f, 56, 931, 56.8954315f, 931, 58);
    path.lineTo(931, 90);
    path.cubicTo(931, 91.1045685f, 930.104553f, 92, 929, 92);
    path.lineTo(810, 92);
    path.cubicTo(808.895447f, 92, 808, 91.1045685f, 808, 90);
    path.lineTo(808, 58);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(806, 54);
    pathB.lineTo(808, 56);
    pathB.lineTo(935.02002f, 56.0200005f);
    pathB.lineTo(933, 54);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// pair of curves have nearly the same initial tangent but are sorting by
// that alone sorts them incorrectly. Need to detect that tangents are nearly
// identical and not reliable by themselves
static void skppptv_com_62(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(173, 5342);
    path.quadTo(171.343536f, 5342.00049f, 170.17157f, 5343.17139f);
    path.quadTo(169.000397f, 5344.34375f, 169, 5346);
    path.lineTo(169, 5372);
    path.lineTo(234, 5372);
    path.lineTo(234, 5346);
    path.quadTo(233.999603f, 5344.34375f, 232.82843f, 5343.17139f);
    path.quadTo(231.656464f, 5342.00049f, 230, 5342);
    path.lineTo(173, 5342);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(173, 5342);
    pathB.lineTo(230, 5342);
    pathB.cubicTo(231.65686f, 5342, 233, 5343.79102f, 233, 5346);
    pathB.lineTo(233, 5372);
    pathB.lineTo(169, 5372);
    pathB.lineTo(169, 5346);
    pathB.cubicTo(169, 5343.79102f, 170.790863f, 5342, 173, 5342);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// nearly identical to lavoixdunord -- to not-quite-coincident lines
static void skpwww_booking_com_68(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(90, 187);
    path.cubicTo(90, 185.34314f, 91.3431473f, 184, 93, 184);
    path.lineTo(588, 184);
    path.cubicTo(589.65686f, 184, 591, 185.34314f, 591, 187);
    path.lineTo(591, 218);
    path.cubicTo(591, 219.65686f, 589.65686f, 221, 588, 221);
    path.lineTo(93, 221);
    path.cubicTo(91.3431473f, 221, 90, 219.65686f, 90, 218);
    path.lineTo(90, 187);
    path.close();
    path.moveTo(92, 188);
    path.cubicTo(92, 186.895432f, 92.8954315f, 186, 94, 186);
    path.lineTo(587, 186);
    path.cubicTo(588.104553f, 186, 589, 186.895432f, 589, 188);
    path.lineTo(589, 217);
    path.cubicTo(589, 218.104568f, 588.104553f, 219, 587, 219);
    path.lineTo(94, 219);
    path.cubicTo(92.8954315f, 219, 92, 218.104568f, 92, 217);
    path.lineTo(92, 188);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(90, 184);
    pathB.lineTo(92, 186);
    pathB.lineTo(593.02002f, 186.020004f);
    pathB.lineTo(591, 184);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// visually looks like lavoixdunord and www_booking_com
static void skpwww_despegar_com_mx_272(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(635, 1788);
    path.cubicTo(635, 1786.34314f, 636.34314f, 1785, 638, 1785);
    path.lineTo(832, 1785);
    path.cubicTo(833.65686f, 1785, 835, 1786.34314f, 835, 1788);
    path.lineTo(835, 1812);
    path.cubicTo(835, 1813.65686f, 833.65686f, 1815, 832, 1815);
    path.lineTo(638, 1815);
    path.cubicTo(636.34314f, 1815, 635, 1813.65686f, 635, 1812);
    path.lineTo(635, 1788);
    path.close();
    path.moveTo(637, 1789);
    path.cubicTo(637, 1787.89539f, 637.895447f, 1787, 639, 1787);
    path.lineTo(831, 1787);
    path.cubicTo(832.104553f, 1787, 833, 1787.89539f, 833, 1789);
    path.lineTo(833, 1811);
    path.cubicTo(833, 1812.10461f, 832.104553f, 1813, 831, 1813);
    path.lineTo(639, 1813);
    path.cubicTo(637.895447f, 1813, 637, 1812.10461f, 637, 1811);
    path.lineTo(637, 1789);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(835, 1785);
    pathB.lineTo(833, 1787);
    pathB.lineTo(832.97998f, 1817.02002f);
    pathB.lineTo(835, 1815);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_joomla_org_23(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(320, 347);
    path.cubicTo(320, 344.238586f, 322.238586f, 342, 325, 342);
    path.lineTo(416, 342);
    path.cubicTo(418.761414f, 342, 421, 344.238586f, 421, 347);
    path.cubicTo(421, 344.790863f, 418.761414f, 343, 416, 343);
    path.lineTo(325, 343);
    path.cubicTo(322.238586f, 343, 320, 344.790863f, 320, 347);
    path.close();
    path.moveTo(320, 378);
    path.cubicTo(320, 380.761414f, 322.238586f, 383, 325, 383);
    path.lineTo(416, 383);
    path.cubicTo(418.761414f, 383, 421, 380.761414f, 421, 378);
    path.cubicTo(421, 380.209137f, 418.761414f, 382, 416, 382);
    path.lineTo(325, 382);
    path.cubicTo(322.238586f, 382, 320, 380.209137f, 320, 378);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(320, 383);
    pathB.lineTo(320, 378);
    pathB.lineTo(421, 378.000031f);
    pathB.lineTo(421, 383);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_macrumors_com_131(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(136, 14089);
    path.lineTo(136, 14056);
    path.lineTo(778, 14056);
    path.lineTo(778, 14089);
    path.quadTo(777.999573f, 14090.6562f, 776.82843f, 14091.8281f);
    path.quadTo(775.656433f, 14093, 774, 14093);
    path.lineTo(140, 14093);
    path.quadTo(138.343552f, 14093, 137.17157f, 14091.8281f);
    path.quadTo(136.000397f, 14090.6562f, 136, 14089);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(136, 14057);
    pathB.lineTo(778, 14057);
    pathB.lineTo(778, 14089);
    pathB.cubicTo(778, 14091.209f, 776.209167f, 14093, 774, 14093);
    pathB.lineTo(140, 14093);
    pathB.cubicTo(137.790863f, 14093, 136, 14091.209f, 136, 14089);
    pathB.lineTo(136, 14057);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_leadpages_net_84(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(377.1716f, 5910.17139f);
    path.cubicTo(376.447723f, 5910.89551f, 376, 5911.89551f, 376, 5913);
    path.lineTo(376, 5972);
    path.cubicTo(376, 5974.20898f, 377.790863f, 5976, 380, 5976);
    path.cubicTo(378.34314f, 5976, 377, 5974.20898f, 377, 5972);
    path.lineTo(377, 5913);
    path.cubicTo(377, 5912.17139f, 377.335785f, 5911.42188f, 377.878693f, 5910.87891f);
    path.lineTo(377.1716f, 5910.17139f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(376, 5909);
    pathB.lineTo(378.481873f, 5909);
    pathB.lineTo(379.999878f, 5976);
    pathB.lineTo(376, 5976);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_briian_com_34(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(843, 216);
    path.cubicTo(843, 213.238571f, 845.238586f, 211, 848, 211);
    path.lineTo(1191, 211);
    path.cubicTo(1193.76147f, 211, 1196, 213.238571f, 1196, 216);
    path.lineTo(1196, 779);
    path.cubicTo(1196, 781.761414f, 1193.76147f, 784, 1191, 784);
    path.lineTo(848, 784);
    path.cubicTo(845.238586f, 784, 843, 781.761414f, 843, 779);
    path.lineTo(843, 216);
    path.close();
    path.moveTo(844, 217);
    path.cubicTo(844, 214.238571f, 846.238586f, 212, 849, 212);
    path.lineTo(1190, 212);
    path.cubicTo(1192.76147f, 212, 1195, 214.238571f, 1195, 217);
    path.lineTo(1195, 778);
    path.cubicTo(1195, 779.65686f, 1192.76147f, 781, 1190, 781);
    path.lineTo(849, 781);
    path.cubicTo(846.238586f, 781, 844, 779.65686f, 844, 778);
    path.lineTo(844, 217);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(843, 784);
    pathB.lineTo(843, 779);
    pathB.lineTo(1196, 779.000061f);
    pathB.lineTo(1196, 784);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_sciality_com_100(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(162, 468);
    path.cubicTo(159.790863f, 468, 158, 469.790863f, 158, 472);
    path.lineTo(158, 528);
    path.cubicTo(158, 530.209106f, 159.790863f, 532, 162, 532);
    path.lineTo(275, 532);
    path.cubicTo(277.209137f, 532, 279, 530.209106f, 279, 528);
    path.lineTo(279, 472);
    path.cubicTo(279, 469.790863f, 277.209137f, 468, 275, 468);
    path.lineTo(162, 468);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(275, 468);
    pathB.cubicTo(276.65686f, 468, 278, 469.34314f, 278, 471);
    pathB.lineTo(278, 529);
    pathB.cubicTo(278, 530.65686f, 276.65686f, 532, 275, 532);
    pathB.lineTo(161, 532);
    pathB.cubicTo(159.34314f, 532, 158, 530.65686f, 158, 529);
    pathB.lineTo(158, 471);
    pathB.cubicTo(158, 469.34314f, 159.34314f, 468, 161, 468);
    pathB.lineTo(275, 468);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_sciality_com_101(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(162, 468);
    path.cubicTo(159.790863f, 468, 158, 469.790863f, 158, 472);
    path.lineTo(158, 528);
    path.cubicTo(158, 530.209106f, 159.790863f, 532, 162, 532);
    path.lineTo(275.009186f, 532);
    path.cubicTo(276.661774f, 531.994995f, 278, 530.653748f, 278, 529);
    path.lineTo(278, 471);
    path.cubicTo(278, 469.346375f, 276.662079f, 468.005249f, 275.009705f, 468);
    path.lineTo(162, 468);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(161, 469);
    pathB.lineTo(275, 469);
    pathB.cubicTo(276.65686f, 469, 278, 469.895416f, 278, 471);
    pathB.lineTo(278, 529);
    pathB.cubicTo(278, 530.65686f, 276.65686f, 532, 275, 532);
    pathB.lineTo(161, 532);
    pathB.cubicTo(159.34314f, 532, 158, 530.65686f, 158, 529);
    pathB.lineTo(158, 471);
    pathB.cubicTo(158, 469.895416f, 159.34314f, 469, 161, 469);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_meb_gov_tr_5(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(137.34314f, 145.34314f);
    path.quadTo(139.687088f, 143.000793f, 143, 143);
    path.lineTo(242, 143);
    path.quadTo(245.312912f, 143.000793f, 247.65686f, 145.34314f);
    path.quadTo(249.999207f, 147.687088f, 250, 151);
    path.lineTo(250, 177);
    path.lineTo(135, 177);
    path.lineTo(135, 151);
    path.quadTo(135.000793f, 147.687088f, 137.34314f, 145.34314f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(135, 143);
    pathB.lineTo(250, 143);
    pathB.lineTo(250, 177);
    pathB.lineTo(135, 177);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_meb_gov_tr_6(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(143, 143);
    path.quadTo(139.687088f, 143.000793f, 137.34314f, 145.34314f);
    path.quadTo(135.000793f, 147.687088f, 135, 151);
    path.lineTo(135, 177);
    path.lineTo(250, 177);
    path.lineTo(250, 151);
    path.quadTo(249.999207f, 147.687088f, 247.65686f, 145.34314f);
    path.quadTo(245.312912f, 143.000793f, 242, 143);
    path.lineTo(143, 143);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(143, 143);
    pathB.lineTo(242, 143);
    pathB.cubicTo(245.865997f, 143, 249, 146.581726f, 249, 151);
    pathB.lineTo(249, 177);
    pathB.lineTo(135, 177);
    pathB.lineTo(135, 151);
    pathB.cubicTo(135, 146.581726f, 138.581726f, 143, 143, 143);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpgithub_io_25(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1001.87866f, 14.8786793f);
    path.quadTo(1002.75745f, 14.0001001f, 1004, 14);
    path.lineTo(1105, 14);
    path.quadTo(1106.24255f, 14.0001001f, 1107.12134f, 14.8786793f);
    path.quadTo(1107.99988f, 15.7574596f, 1108, 17);
    path.lineTo(1108, 41);
    path.quadTo(1107.99988f, 42.2425423f, 1107.12134f, 43.1213188f);
    path.quadTo(1106.24255f, 43.9999008f, 1105, 44);
    path.lineTo(1004, 44);
    path.quadTo(1002.75745f, 43.9999008f, 1001.87866f, 43.1213188f);
    path.quadTo(1001.00012f, 42.2425423f, 1001, 41);
    path.lineTo(1001, 17);
    path.quadTo(1001.00012f, 15.7574596f, 1001.87866f, 14.8786793f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(1005, 16);
    pathB.lineTo(1104, 16);
    pathB.cubicTo(1105.10461f, 16, 1106, 16.8954296f, 1106, 18);
    pathB.lineTo(1106, 40);
    pathB.cubicTo(1106, 41.1045685f, 1105.10461f, 42, 1104, 42);
    pathB.lineTo(1005, 42);
    pathB.cubicTo(1003.89545f, 42, 1003, 41.1045685f, 1003, 40);
    pathB.lineTo(1003, 18);
    pathB.cubicTo(1003, 16.8954296f, 1003.89545f, 16, 1005, 16);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpgithub_io_26(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1001.87866f, 14.8786793f);
    path.quadTo(1002.75745f, 14.0001001f, 1004, 14);
    path.lineTo(1105, 14);
    path.quadTo(1106.24255f, 14.0001001f, 1107.12134f, 14.8786793f);
    path.quadTo(1107.99988f, 15.7574596f, 1108, 17);
    path.lineTo(1108, 41);
    path.quadTo(1107.99988f, 42.2425423f, 1107.12134f, 43.1213188f);
    path.quadTo(1106.24255f, 43.9999008f, 1105, 44);
    path.lineTo(1004, 44);
    path.quadTo(1002.75745f, 43.9999008f, 1001.87866f, 43.1213188f);
    path.quadTo(1001.00012f, 42.2425423f, 1001, 41);
    path.lineTo(1001, 17);
    path.quadTo(1001.00012f, 15.7574596f, 1001.87866f, 14.8786793f);
    path.close();
    path.moveTo(1003, 18);
    path.cubicTo(1003, 16.8954296f, 1003.89545f, 16, 1005, 16);
    path.lineTo(1104, 16);
    path.cubicTo(1105.10461f, 16, 1106, 16.8954296f, 1106, 18);
    path.lineTo(1106, 40);
    path.cubicTo(1106, 41.1045685f, 1105.10461f, 42, 1104, 42);
    path.lineTo(1005, 42);
    path.cubicTo(1003.89545f, 42, 1003, 41.1045685f, 1003, 40);
    path.lineTo(1003, 18);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1108, 14);
    pathB.lineTo(1106, 16);
    pathB.lineTo(1105.97998f, 46.0200005f);
    pathB.lineTo(1108, 44);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpskpicture14(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 994);
    path.lineTo(0, 0);
    path.lineTo(512, 0);
    path.lineTo(512, 994);
    path.lineTo(0, 994);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(-317, 168);
    pathB.quadTo(-317, 166.757385f, -316.121338f, 165.878662f);
    pathB.quadTo(-315.242645f, 165, -314, 165);
    pathB.lineTo(320, 165);
    pathB.quadTo(321.242615f, 165, 322.121338f, 165.878662f);
    pathB.quadTo(323, 166.757385f, 323, 168);
    pathB.lineTo(323, 193);
    pathB.lineTo(-317, 193);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpskpicture15(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 193);
    path.lineTo(323, 193);
    path.lineTo(323, 168);
    path.quadTo(323, 166.757385f, 322.121338f, 165.878662f);
    path.quadTo(321.242615f, 165, 320, 165);
    path.lineTo(0, 165);
    path.lineTo(0, 193);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(-314, 165);
    pathB.lineTo(320, 165);
    pathB.cubicTo(321.65686f, 165, 323, 166.34314f, 323, 168);
    pathB.lineTo(323, 192);
    pathB.lineTo(-317, 192);
    pathB.lineTo(-317, 168);
    pathB.cubicTo(-317, 166.34314f, -315.65686f, 165, -314, 165);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* Three edges are partially coincident. Only one of the three knows about the other two.
   Subsequently, when the angle loop is created, it misses one of the edges.
   After coincident edges are processed, probably need a check-and-correct that makes sure the
   coincidences are all self-consistent.
 */
static void skpelpais_com_18(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(183, 8507);
    path.lineTo(552, 8506.99023f);
    path.lineTo(552, 8508);
    path.lineTo(183, 8508);
    path.lineTo(183, 8507);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(183, 8508);
    pathB.lineTo(183, 8506.99023f);
    pathB.lineTo(552, 8507);
    pathB.lineTo(552, 8508);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* this generates a pair of lines that are essentially coincident; but the next line at a right
   angle is not treated as if it intersects at the same point.
   There are several of options:
     move the intersection of the right angle line to the coincident point (should 'near' do this?
     construct another coincident pair from the right angle line to the coincident point
     treat the intersection as simple and not coincident
 */
static void skpnamecheap_com_405(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(140, 1000);
    path.lineTo(140, 842);
    path.lineTo(141, 842);
    path.lineTo(141.14502f, 1000);
    path.lineTo(140, 1000);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(140, 842);
    pathB.lineTo(141.008835f, 837.9646f);
    pathB.lineTo(141.235291f, 1109.05884f);
    pathB.lineTo(140, 1114);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// fails on angle insert -- haven't investigated yet
static void skpwww_alrakoba_net_62(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(134.34314f, 9802.34277f);
    path.quadTo(132, 9804.68652f, 132, 9808);
    path.lineTo(132, 9822);
    path.quadTo(132, 9825.31348f, 134.34314f, 9827.65723f);
    path.quadTo(136.686295f, 9830, 140, 9830);
    path.lineTo(140.028473f, 9830);
    path.lineTo(139.877213f, 9828.90723f);
    path.quadTo(137.692032f, 9828.5332f, 136.050247f, 9826.65723f);
    path.quadTo(134, 9824.31348f, 134, 9821);
    path.lineTo(134, 9809);
    path.quadTo(134, 9806.10059f, 136.050247f, 9804.0498f);
    path.lineTo(134.34314f, 9802.34277f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(132, 9800);
    pathB.lineTo(135.962357f, 9800);
    pathB.lineTo(140, 9830);
    pathB.lineTo(132, 9830);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* asserts in alignSpanState looks like a coincident related bug */
static void skpwww_cityads_ru_249(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(817.464478f, 11.4644661f);
    path.quadTo(818.928955f, 10, 821, 10);
    path.lineTo(998, 10);
    path.quadTo(999.082947f, 10, 1000, 10.4003992f);
    path.lineTo(1000, 13.3527431f);
    path.quadTo(999.917603f, 13.2607508f, 999.82843f, 13.1715727f);
    path.quadTo(998.65686f, 12, 997, 12);
    path.lineTo(822, 12);
    path.quadTo(820.34314f, 12, 819.17157f, 13.1715727f);
    path.quadTo(818, 14.3431454f, 818, 16);
    path.lineTo(818, 28);
    path.quadTo(818, 29.6568546f, 819.17157f, 30.8284264f);
    path.quadTo(820.34314f, 32, 822, 32);
    path.lineTo(997, 32);
    path.quadTo(998.65686f, 32, 999.82843f, 30.8284264f);
    path.quadTo(999.917603f, 30.7392426f, 1000, 30.6472569f);
    path.lineTo(1000, 33.5996017f);
    path.quadTo(999.082947f, 34, 998, 34);
    path.lineTo(821, 34);
    path.quadTo(818.928955f, 34, 817.464478f, 32.5355339f);
    path.quadTo(816, 31.0710678f, 816, 29);
    path.lineTo(816, 15);
    path.quadTo(816, 12.9289322f, 817.464478f, 11.4644661f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1003, 10);
    pathB.lineTo(1000, 13);
    pathB.lineTo(999.969971f, 37.0299988f);
    pathB.lineTo(1003, 34);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// fails on angle insert
static void skpwww_dealnews_com_315(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(966.464478f, 4261.46436f);
    path.quadTo(965, 4262.92871f, 965, 4265);
    path.lineTo(965, 4276);
    path.quadTo(965, 4278.07129f, 966.464478f, 4279.53564f);
    path.quadTo(967.928955f, 4281, 970, 4281);
    path.lineTo(970.020325f, 4281);
    path.lineTo(969.887512f, 4279.81641f);
    path.quadTo(968.928284f, 4279.48145f, 968.17157f, 4278.53564f);
    path.quadTo(967, 4277.07129f, 967, 4275);
    path.lineTo(967, 4266);
    path.quadTo(967, 4264.44287f, 968.035217f, 4263.31396f);
    path.lineTo(968, 4263);
    path.lineTo(966.464478f, 4261.46436f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(965, 4260);
    pathB.lineTo(967.716675f, 4260);
    pathB.lineTo(970, 4281);
    pathB.lineTo(965, 4281);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// fails in intersections insert
static void skpwww_inmotionhosting_com_9(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(991.633911f, 1839);
    path.lineTo(964.265015f, 1839);
    path.lineTo(963.734985f, 1893.73242f);
    path.lineTo(991.3703f, 1894);
    path.lineTo(1018.23492f, 1894);
    path.lineTo(1018.76501f, 1839.2627f);
    path.lineTo(991.638184f, 1839);
    path.lineTo(991.633911f, 1839);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(964.267578f, 1838.73499f);
    pathB.lineTo(1019.26501f, 1839.26758f);
    pathB.lineTo(1018.73242f, 1894.26501f);
    pathB.lineTo(963.734985f, 1893.73242f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_alucinados_net_101(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1129.53552f, 1164.46448f);
    path.lineTo(1128, 1166);
    path.lineTo(1128.12231f, 1166.49548f);
    path.quadTo(1129, 1167.56592f, 1129, 1169);
    path.lineTo(1129, 1170.05054f);
    path.lineTo(1130.34509f, 1175.49878f);
    path.quadTo(1131, 1174.38513f, 1131, 1173);
    path.lineTo(1131, 1168);
    path.quadTo(1131, 1165.92896f, 1129.53552f, 1164.46448f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1131, 1163);
    pathB.lineTo(-43515.8555f, -177415.594f);
    pathB.lineTo(1129.76465f, 1173.05884f);
    pathB.lineTo(1131, 1178);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// /SkOpContour.cpp:278: failed assertion "!approximately_negative(oEndT - oStartT)
static void skpwww_hairjobsearch_com_31(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(143.292892f, 0.707106769f);
    path.quadTo(143, 0.414213538f, 143, 0);
    path.lineTo(1123, 0);
    path.quadTo(1123, 0.414213538f, 1122.70715f, 0.707106769f);
    path.quadTo(1122.41418f, 1, 1122, 1);
    path.lineTo(144, 1);
    path.quadTo(143.585785f, 1, 143.292892f, 0.707106769f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(143, 1);
    pathB.lineTo(144, 0);
    pathB.lineTo(1122, 0);
    pathB.lineTo(1123, 1);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpSegment::checkSmallCoincidence; line 1958 SkASSERT(span.fWindValue);
static void skpwww_heartiste_wordpress_com_86(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(741, 9432);
    path.lineTo(761, 9431.99023f);
    path.lineTo(761, 9433);
    path.lineTo(741, 9433);
    path.lineTo(741, 9432);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(741, 9433);
    pathB.lineTo(741, 9431.99023f);
    pathB.lineTo(761, 9432);
    pathB.lineTo(761, 9433);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_argus_presse_fr_41(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 343);
    path.lineTo(165, 343);
    path.lineTo(165, 364.869873f);
    path.lineTo(1000, 364.869873f);
    path.lineTo(1000, 343);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(165, 343.000031f);
    pathB.lineTo(1000, 343.000031f);
    pathB.lineTo(1000, 364.869904f);
    pathB.lineTo(165, 364.869904f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpSegment::checkSmallCoincidence; line 1958 SkASSERT(span.fWindValue);
static void skpwww_320kbps_net_2231(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(838, 9125);
    path.lineTo(862, 9124.99023f);
    path.lineTo(862, 9126);
    path.lineTo(838, 9126);
    path.lineTo(838, 9125);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(838, 9126);
    pathB.lineTo(838, 9124.99023f);
    pathB.lineTo(862, 9125);
    pathB.lineTo(862, 9126);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// debugValidateLoop loop sum fails
static void skpwww_exystence_net_61(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(143, 9075);
    path.lineTo(316, 9075);
    path.lineTo(316, 9073.99023f);
    path.lineTo(143, 9074);
    path.lineTo(143, 9075);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(143, 9075);
    pathB.lineTo(143, 9073.99023f);
    pathB.lineTo(316, 9074);
    pathB.lineTo(316, 9075);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// debugValidateLoop loop sum fails
static void skpwww_trashness_com_36(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(541.5f, 4835.99512f);
    path.lineTo(91.5f, 4836);
    path.lineTo(91.5f, 4836.5f);
    path.lineTo(541.5f, 4836.5f);
    path.lineTo(541.5f, 4835.99512f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(91.5f, 4836.5f);
    pathB.lineTo(91.5f, 4835.99512f);
    pathB.lineTo(541.5f, 4836);
    pathB.lineTo(541.5f, 4836.5f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkIntersections::lineVertical fUsed >= fMax
static void skpwww_getgold_jp_731(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(284.878693f, 10134.8789f);
    path.quadTo(284, 10135.7578f, 284, 10137);
    path.lineTo(284, 10216);
    path.quadTo(284, 10217.2422f, 284.878693f, 10218.1211f);
    path.quadTo(285.125122f, 10218.3672f, 285.40213f, 10218.5459f);
    path.lineTo(286, 10138);
    path.lineTo(286, 10136);
    path.lineTo(284.878693f, 10134.8789f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(284, 10134);
    pathB.lineTo(286.05957f, 10129.8809f);
    pathB.lineTo(285.399994f, 10216.2002f);
    pathB.lineTo(284, 10219);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpContour::calcPartialCoincidentWinding SkASSERT(!approximately_negative(endT - startT));
static void skpwww_maturesupertube_com_21(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(3.17157292f, 11831.1719f);
    path.quadTo(4.34314585f, 11830, 6, 11830);
    path.lineTo(1259, 11830);
    path.quadTo(1260.65686f, 11830, 1261.82837f, 11831.1719f);
    path.quadTo(1263, 11832.3428f, 1263, 11834);
    path.lineTo(1263, 11848);
    path.quadTo(1263, 11849.6572f, 1261.82837f, 11850.8281f);
    path.quadTo(1260.65686f, 11852, 1259, 11852);
    path.lineTo(6, 11852);
    path.quadTo(4.34314585f, 11852, 3.17157292f, 11850.8281f);
    path.quadTo(2, 11849.6572f, 2, 11848);
    path.lineTo(2, 11834);
    path.quadTo(2, 11832.3428f, 3.17157292f, 11831.1719f);
    path.close();
    path.moveTo(3.87867975f, 11831.8789f);
    path.quadTo(4.7573595f, 11831, 6, 11831);
    path.lineTo(1259, 11831);
    path.quadTo(1260.24268f, 11831, 1261.12134f, 11831.8789f);
    path.quadTo(1262, 11832.7578f, 1262, 11834);
    path.lineTo(1262, 11848);
    path.quadTo(1262, 11849.2422f, 1261.12134f, 11850.1211f);
    path.quadTo(1260.24268f, 11851, 1259, 11851);
    path.lineTo(6, 11851);
    path.quadTo(4.7573595f, 11851, 3.87867975f, 11850.1211f);
    path.quadTo(3, 11849.2422f, 3, 11848);
    path.lineTo(3, 11834);
    path.quadTo(3, 11832.7578f, 3.87867975f, 11831.8789f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(2, 11830);
    pathB.lineTo(4.5f, 11832.5f);
    pathB.lineTo(1260.5f, 11832.5f);
    pathB.lineTo(1263, 11830);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// can't find winding of remaining vertical edges
static void skpwww_hubbyscook_com_22(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 902.329346f);
    path.quadTo(998, 905.250427f, 998, 909);
    path.lineTo(998, 910);
    path.quadTo(998, 913.749573f, 1000, 916.670654f);
    path.lineTo(1000, 902.329346f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(998, 910);
    pathB.lineTo(998, 909);
    pathB.quadTo(998, 904.029419f, 1001.51471f, 900.514709f);
    pathB.quadTo(1005.02942f, 897, 1010, 897);
    pathB.lineTo(1011, 897);
    pathB.quadTo(1015.14215f, 897, 1018.07104f, 900.514709f);
    pathB.quadTo(1021, 904.029419f, 1021, 909);
    pathB.lineTo(1021, 910);
    pathB.quadTo(1021, 914.142151f, 1018.07104f, 917.071045f);
    pathB.quadTo(1015.14215f, 920, 1011, 920);
    pathB.lineTo(1010, 920);
    pathB.quadTo(1005.02942f, 920, 1001.51471f, 917.071045f);
    pathB.quadTo(998, 914.142151f, 998, 910);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

static void skpwww_gruposejaumdivulgador_com_br_4(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(610.5f, 5.78626502e-14f);
    path.lineTo(1083.5f, -6.12303177e-17f);
    path.lineTo(1083.5f, 469);
    path.lineTo(610.5f, 469);
    path.lineTo(610.5f, 5.78626502e-14f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(611, 0);
    pathB.lineTo(1084, 0);
    pathB.lineTo(1084, 469);
    pathB.lineTo(611, 469);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// asserts in bridgeOp simple->isClosed()
static void skpwww_phototransferapp_com_24(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(85.6091843f, 5.92893219f);
    path.quadTo(89.6041641f, 3, 93.7462997f, 3);
    path.lineTo(1212.74634f, 3);
    path.quadTo(1216.88843f, 3, 1218.75134f, 5.92893219f);
    path.quadTo(1220.61414f, 8.85775471f, 1219.10669f, 12.9996767f);
    path.quadTo(1220.46338f, 9.27196693f, 1218.4939f, 6.63603878f);
    path.quadTo(1216.52441f, 4, 1212.38232f, 4);
    path.lineTo(93.3823318f, 4);
    path.quadTo(89.2401962f, 4, 85.3518219f, 6.63603878f);
    path.quadTo(81.4634476f, 9.27207756f, 80.1065979f, 13);
    path.quadTo(81.614212f, 8.85786438f, 85.6091843f, 5.92893219f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(83.7462997f, 3);
    pathB.lineTo(1222.74634f, 3);
    pathB.lineTo(1219.10657f, 13);
    pathB.lineTo(80.1065979f, 13);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_phototransferapp_com_24x(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(85.6091843f, 5.92893219f);
    path.quadTo(89.6041641f, 3, 93.7462997f, 3);
    path.lineTo(112.74634f, 3);
    path.quadTo(116.88843f, 3, 118.75134f, 5.92893219f);
    path.quadTo(120.61414f, 8.85775471f, 119.10669f, 12.9996767f);
    path.quadTo(120.46338f, 9.27196693f, 118.4939f, 6.63603878f);
    path.quadTo(116.52441f, 4, 112.38232f, 4);
    path.lineTo(93.3823318f, 4);
    path.quadTo(89.2401962f, 4, 85.3518219f, 6.63603878f);
    path.quadTo(81.4634476f, 9.27207756f, 80.1065979f, 13);
    path.quadTo(81.614212f, 8.85786438f, 85.6091843f, 5.92893219f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(83.7462997f, 3);
    pathB.lineTo(122.74634f, 3);
    pathB.lineTo(119.10657f, 13);
    pathB.lineTo(80.1065979f, 13);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_helha_be_109(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(117.686981f, 3339.08423f);
    path.lineTo(109.533035f, 3350.72925f);
    path.quadTo(107.120552f, 3354.17456f, 103.879379f, 3354.41821f);
    path.quadTo(100.638504f, 3354.66187f, 98.4674301f, 3351.56177f);
    path.quadTo(100.87973f, 3355.00635f, 104.291222f, 3355.00635f);
    path.quadTo(107.70298f, 3355.00635f, 110.115463f, 3351.56104f);
    path.lineTo(118, 3340.30078f);
    path.lineTo(118, 3339.53125f);
    path.lineTo(117.686981f, 3339.08423f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(118.269409f, 3339.91602f);
    pathB.lineTo(117.686981f, 3339.08423f);
    pathB.lineTo(98.4669647f, 3351.56104f);
    pathB.lineTo(104.291214f, 3359.87891f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_cooksnaps_com_32(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(509.34021f, 176);
    path.lineTo(505, 176);
    path.quadTo(500.964233f, 176, 497.299988f, 176.896912f);
    path.quadTo(493.678162f, 177.952286f, 490.183014f, 179.9702f);
    path.lineTo(489.316986f, 180.4702f);
    path.quadTo(485.175385f, 182.861359f, 482.115265f, 186.082397f);
    path.quadTo(479.69455f, 188.700821f, 477.995941f, 191.618286f);
    path.quadTo(476.316772f, 194.550476f, 475.258759f, 197.959335f);
    path.quadTo(474, 202.218979f, 474, 207);
    path.lineTo(474, 208);
    path.quadTo(474, 212.03569f, 474.896851f, 215.699799f);
    path.quadTo(475.950256f, 219.315002f, 477.962708f, 222.803986f);
    path.lineTo(477.970215f, 222.816986f);
    path.lineTo(478.470215f, 223.683014f);
    path.quadTo(478.474915f, 223.691162f, 478.479645f, 223.69931f);
    path.quadTo(480.867981f, 227.831055f, 484.082947f, 230.885254f);
    path.quadTo(486.701447f, 233.305939f, 489.61908f, 235.004517f);
    path.quadTo(492.550232f, 236.682983f, 495.957611f, 237.740738f);
    path.quadTo(500.217987f, 239, 505, 239);
    path.lineTo(509.482178f, 239);
    path.quadTo(515.299133f, 238.212051f, 520.801941f, 235.038513f);
    path.quadTo(520.809509f, 235.034164f, 520.817017f, 235.0298f);
    path.lineTo(521.683044f, 234.5298f);
    path.quadTo(521.692078f, 234.524582f, 521.701111f, 234.519348f);
    path.quadTo(532.80603f, 228.09938f, 536.126709f, 215.70639f);
    path.quadTo(539.450134f, 203.303314f, 533.029785f, 192.183014f);
    path.lineTo(532.529785f, 191.316986f);
    path.quadTo(526.109497f, 180.196686f, 513.706421f, 176.873276f);
    path.quadTo(511.503082f, 176.282898f, 509.34021f, 176);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(478.470215f, 223.683014f);
    pathB.lineTo(477.970215f, 222.816986f);
    pathB.quadTo(471.549896f, 211.696686f, 474.873322f, 199.293594f);
    pathB.quadTo(478.196686f, 186.890503f, 489.316986f, 180.4702f);
    pathB.lineTo(490.183014f, 179.9702f);
    pathB.quadTo(501.303345f, 173.549896f, 513.706421f, 176.873276f);
    pathB.quadTo(526.109497f, 180.196686f, 532.529785f, 191.316986f);
    pathB.lineTo(533.029785f, 192.183014f);
    pathB.quadTo(539.450134f, 203.303314f, 536.126709f, 215.70639f);
    pathB.quadTo(532.803345f, 228.109497f, 521.683044f, 234.5298f);
    pathB.lineTo(520.817017f, 235.0298f);
    pathB.quadTo(509.696686f, 241.450104f, 497.29361f, 238.126709f);
    pathB.quadTo(484.890533f, 234.803314f, 478.470215f, 223.683014f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_cooksnaps_com_32a(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(497.299988f, 176.896912f);
    path.quadTo(493.678162f, 177.952286f, 490.183014f, 179.9702f);
    path.lineTo(489.316986f, 180.4702f);
    path.quadTo(485.175385f, 182.861359f, 482.115265f, 186.082397f);
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(474.873322f, 199.293594f);
    pathB.quadTo(478.196686f, 186.890503f, 489.316986f, 180.4702f);
    pathB.lineTo(490.183014f, 179.9702f);
    pathB.quadTo(501.303345f, 173.549896f, 513.706421f, 176.873276f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// !simple->isClosed()
static void skpwww_contextualnewsfeeds_com_346(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(460.257355f, 1202.27808f);
    path.lineTo(460.257355f, 1204.27808f);
    path.quadTo(461.081207f, 1204.27808f, 461.665161f, 1203.69873f);
    path.lineTo(461.67157f, 1203.69238f);
    path.lineTo(466.621307f, 1198.74268f);
    path.quadTo(466.623993f, 1198.73999f, 466.626648f, 1198.7373f);
    path.quadTo(466.914185f, 1198.44604f, 466.914185f, 1198.03552f);
    path.quadTo(466.914215f, 1197.62122f, 466.621307f, 1197.32837f);
    path.lineTo(465.914215f, 1196.62122f);
    path.lineTo(460.257355f, 1202.27808f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(460.257355f, 1205.10657f);
    pathB.lineTo(458.828979f, 1203.67822f);
    pathB.lineTo(465.914215f, 1196.62122f);
    pathB.lineTo(467.32843f, 1198.03552f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// line quad intersection SkIntersections::assert
static void skpwww_pindosiya_com_99(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(899.17157f, 548.17157f);
    path.quadTo(898, 549.34314f, 898, 551);
    path.lineTo(898, 556);
    path.lineTo(899.027283f, 556);
    path.lineTo(900.02356f, 551.602844f);
    path.quadTo(900.06073f, 551.297058f, 900.156555f, 551.015747f);
    path.lineTo(900.5f, 549.5f);
    path.lineTo(899.17157f, 548.17157f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(898, 547);
    pathB.lineTo(901.086914f, 547);
    pathB.lineTo(899, 556);
    pathB.lineTo(898, 556);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpAngle::setSector SkASSERT(fSectorStart >= 0);
static void skpwww_karnivool_com_au_11(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 1431);
    path.lineTo(0, 775);
    path.lineTo(1265, 775);
    path.lineTo(1265, 1431);
    path.lineTo(0, 1431);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(32.3243904f, 851);
    pathB.lineTo(459.324402f, 851);
    pathB.lineTo(427, 1081);
    pathB.lineTo(-3.81469727e-06f, 1081);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_tunero_de_24(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1020.79303f, 2252);
    path.quadTo(1018.72198f, 2252, 1016.86798f, 2253.46436f);
    path.quadTo(1015.02032f, 2254.92383f, 1014.4668f, 2256.98584f);
    path.lineTo(1014.46301f, 2257);
    path.lineTo(1011.53705f, 2268);
    path.quadTo(1010.98615f, 2270.07104f, 1012.06104f, 2271.53564f);
    path.quadTo(1013.13599f, 2273, 1015.20703f, 2273);
    path.lineTo(1083.20703f, 2273);
    path.quadTo(1085.27808f, 2273, 1087.13208f, 2271.53564f);
    path.quadTo(1088.97144f, 2270.08252f, 1089.52832f, 2268.03271f);
    path.lineTo(1089.53711f, 2268);
    path.lineTo(1092.46301f, 2257);
    path.lineTo(1092.4679f, 2256.98145f);
    path.quadTo(1093.00916f, 2254.92236f, 1091.93909f, 2253.46436f);
    path.quadTo(1090.86414f, 2252, 1088.79297f, 2252);
    path.lineTo(1020.79303f, 2252);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1011.53705f, 2268);
    pathB.lineTo(1014.46301f, 2257);
    pathB.quadTo(1015.01392f, 2254.92896f, 1016.86798f, 2253.46436f);
    pathB.quadTo(1018.72198f, 2252, 1020.79303f, 2252);
    pathB.lineTo(1088.79297f, 2252);
    pathB.quadTo(1090.86414f, 2252, 1091.93909f, 2253.46436f);
    pathB.quadTo(1093.01392f, 2254.92896f, 1092.46301f, 2257);
    pathB.lineTo(1089.53711f, 2268);
    pathB.quadTo(1088.98608f, 2270.07104f, 1087.13208f, 2271.53564f);
    pathB.quadTo(1085.27808f, 2273, 1083.20703f, 2273);
    pathB.lineTo(1015.20703f, 2273);
    pathB.quadTo(1013.13599f, 2273, 1012.06104f, 2271.53564f);
    pathB.quadTo(1010.98615f, 2270.07104f, 1011.53705f, 2268);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_docgelo_com_66(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(22.5f, 24174.5f);
    path.lineTo(185.5f, 24174.498f);
    path.lineTo(185.5f, 24174.75f);
    path.lineTo(22.5f, 24174.75f);
    path.lineTo(22.5f, 24174.5f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(22.5f, 24174.75f);
    pathB.lineTo(22.5f, 24174.498f);
    pathB.lineTo(185.5f, 24174.5f);
    pathB.lineTo(185.5f, 24174.75f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_kpopexplorer_net_22(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 866.329346f);
    path.quadTo(998, 869.250427f, 998, 873);
    path.lineTo(998, 874);
    path.quadTo(998, 877.749573f, 1000, 880.670654f);
    path.lineTo(1000, 866.329346f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(998, 874);
    pathB.lineTo(998, 873);
    pathB.quadTo(998, 868.029419f, 1001.51471f, 864.514709f);
    pathB.quadTo(1005.02942f, 861, 1010, 861);
    pathB.lineTo(1011, 861);
    pathB.quadTo(1015.14215f, 861, 1018.07104f, 864.514709f);
    pathB.quadTo(1021, 868.029419f, 1021, 873);
    pathB.lineTo(1021, 874);
    pathB.quadTo(1021, 878.142151f, 1018.07104f, 881.071045f);
    pathB.quadTo(1015.14215f, 884, 1011, 884);
    pathB.lineTo(1010, 884);
    pathB.quadTo(1005.02942f, 884, 1001.51471f, 881.071045f);
    pathB.quadTo(998, 878.142151f, 998, 874);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

static void skpwww_artblart_com_8(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(22.5f, 24527.25f);
    path.lineTo(45, 24527.248f);
    path.lineTo(45, 24527.5f);
    path.lineTo(22.5f, 24527.5f);
    path.lineTo(22.5f, 24527.25f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(22.5f, 24527.5f);
    pathB.lineTo(22.5f, 24527.248f);
    pathB.lineTo(45, 24527.25f);
    pathB.lineTo(45, 24527.5f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// joinCoincidence / findT / assert
static void skpwww_jessicaslens_wordpress_com_222(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 844.329346f);
    path.quadTo(998, 847.250427f, 998, 851);
    path.lineTo(998, 852);
    path.quadTo(998, 855.749573f, 1000, 858.670654f);
    path.lineTo(1000, 844.329346f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(998, 852);
    pathB.lineTo(998, 851);
    pathB.quadTo(998, 846.029419f, 1001.51471f, 842.514709f);
    pathB.quadTo(1005.02942f, 839, 1010, 839);
    pathB.lineTo(1011, 839);
    pathB.quadTo(1015.14215f, 839, 1018.07104f, 842.514709f);
    pathB.quadTo(1021, 846.029419f, 1021, 851);
    pathB.lineTo(1021, 852);
    pathB.quadTo(1021, 856.142151f, 1018.07104f, 859.071045f);
    pathB.quadTo(1015.14215f, 862, 1011, 862);
    pathB.lineTo(1010, 862);
    pathB.quadTo(1005.02942f, 862, 1001.51471f, 859.071045f);
    pathB.quadTo(998, 856.142151f, 998, 852);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// joinCoincidence / findT / assert
static void skpwww_simplysaru_com_40(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 866.329346f);
    path.quadTo(998, 869.250427f, 998, 873);
    path.lineTo(998, 874);
    path.quadTo(998, 877.749573f, 1000, 880.670654f);
    path.lineTo(1000, 866.329346f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(998, 874);
    pathB.lineTo(998, 873);
    pathB.quadTo(998, 868.029419f, 1001.51471f, 864.514709f);
    pathB.quadTo(1005.02942f, 861, 1010, 861);
    pathB.lineTo(1011, 861);
    pathB.quadTo(1015.14215f, 861, 1018.07104f, 864.514709f);
    pathB.quadTo(1021, 868.029419f, 1021, 873);
    pathB.lineTo(1021, 874);
    pathB.quadTo(1021, 878.142151f, 1018.07104f, 881.071045f);
    pathB.quadTo(1015.14215f, 884, 1011, 884);
    pathB.lineTo(1010, 884);
    pathB.quadTo(1005.02942f, 884, 1001.51471f, 881.071045f);
    pathB.quadTo(998, 878.142151f, 998, 874);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// cubic-cubic intersection reduce checkLinear assert
static void skpwww_partsdata_de_53(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(407, 119);
    path.lineTo(407, 28);
    path.lineTo(647, 28);
    path.lineTo(647, 119);
    path.lineTo(407, 119);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(471.228394f, 64.443222f);
    pathB.cubicTo(471.193878f, 60.953373f, 470.234985f, 52.4797592f, 462.201569f, 46.6231461f);
    pathB.cubicTo(454.168152f, 40.7665405f, 446.592804f, 41.993145f, 443.033936f, 42.8568878f);
    pathB.cubicTo(439.475098f, 43.7206268f, 436.978638f, 45.4052658f, 436.304871f, 45.7851906f);
    pathB.cubicTo(435.631104f, 46.1651154f, 435.156006f, 45.8026352f, 434.957306f, 45.6384506f);
    pathB.cubicTo(434.758636f, 45.4742737f, 431.460999f, 42.0105858f, 430.916901f, 41.4664841f);
    pathB.cubicTo(430.372803f, 40.9223785f, 429.731628f, 41.3303604f, 429.375214f, 41.6996689f);
    pathB.cubicTo(429.375214f, 41.6996689f, 420.610016f, 50.5190887f, 419.918793f, 51.1754227f);
    pathB.cubicTo(419.22757f, 51.8321419f, 419.331482f, 52.2465706f, 419.884308f, 52.8339005f);
    pathB.cubicTo(420.437134f, 53.4212303f, 425.170624f, 58.0167313f, 425.619568f, 58.4660416f);
    pathB.cubicTo(426.068512f, 58.9153557f, 426.137878f, 59.2952805f, 426.137878f, 59.8136024f);
    pathB.cubicTo(426.137878f, 60.3319244f, 426.103394f, 103.141357f, 426.103394f, 103.970215f);
    pathB.cubicTo(426.103394f, 104.799835f, 426.310791f, 105.525177f, 427.17453f, 105.525177f);
    pathB.cubicTo(428.038269f, 105.525177f, 440.131409f, 105.491432f, 440.85675f, 105.491432f);
    pathB.cubicTo(441.582489f, 105.491432f, 441.996918f, 104.903343f, 441.996918f, 104.17762f);
    pathB.cubicTo(441.996918f, 103.452271f, 441.996918f, 89.5622559f, 441.996918f, 87.8002701f);
    pathB.cubicTo(441.996918f, 86.0382843f, 442.342712f, 86.2453079f, 442.826141f, 86.3491974f);
    pathB.cubicTo(443.309601f, 86.4530945f, 445.832184f, 87.040802f, 448.700195f, 87.040802f);
    pathB.cubicTo(466.87442f, 86.6949997f, 471.815338f, 69.4876556f, 471.228394f, 64.443222f);
    pathB.close();
    pathB.moveTo(448.873108f, 72.4595642f);
    pathB.cubicTo(444.636658f, 72.4595642f, 441.202545f, 69.0254517f, 441.202545f, 64.7890244f);
    pathB.cubicTo(441.202545f, 60.5525932f, 444.636658f, 57.1184845f, 448.873108f, 57.1184845f);
    pathB.cubicTo(453.109528f, 57.1184845f, 456.54364f, 60.552597f, 456.54364f, 64.7890244f);
    pathB.cubicTo(456.54364f, 69.0254517f, 453.109528f, 72.4595642f, 448.873108f, 72.4595642f);
    pathB.close();
    pathB.moveTo(520.242859f, 82.5275803f);
    pathB.cubicTo(519.733276f, 81.6547394f, 494.845154f, 41.3379478f, 494.263123f, 40.3923073f);
    pathB.cubicTo(493.681122f, 39.4462852f, 493.244324f, 39.5918846f, 492.807495f, 40.3195038f);
    pathB.cubicTo(492.515167f, 40.8071136f, 467.238037f, 81.6790085f, 466.528625f, 82.8373566f);
    pathB.cubicTo(465.819183f, 83.9945831f, 466.497528f, 84.2975311f, 466.904358f, 84.5792542f);
    pathB.cubicTo(466.904358f, 84.5792542f, 477.399689f, 91.2036743f, 478.235748f, 91.6981049f);
    pathB.cubicTo(479.071838f, 92.1929092f, 479.396393f, 91.9028473f, 479.669403f, 91.5104141f);
    pathB.cubicTo(479.942383f, 91.1175995f, 484.106384f, 84.1549606f, 484.481781f, 83.5570221f);
    pathB.cubicTo(484.857147f, 82.9602051f, 485.198792f, 82.8741379f, 485.966583f, 82.8741379f);
    pathB.cubicTo(486.734406f, 82.8741379f, 499.635925f, 82.8062668f, 500.830322f, 82.8062668f);
    pathB.cubicTo(502.024658f, 82.8062668f, 502.229797f, 83.4038391f, 502.400452f, 83.6427078f);
    pathB.cubicTo(502.571045f, 83.8815842f, 506.615631f, 90.7414703f, 506.990997f, 91.2870865f);
    pathB.cubicTo(507.651123f, 92.2475128f, 508.017395f, 92.1333847f, 508.672241f, 91.6962051f);
    pathB.cubicTo(509.327423f, 91.2597809f, 519.442444f, 85.0744324f, 520.243286f, 84.4920349f);
    pathB.cubicTo(521.042908f, 83.9100189f, 520.751709f, 83.4004211f, 520.242859f, 82.5275803f);
    pathB.close();
    pathB.moveTo(493.720551f, 72.4811783f);
    pathB.cubicTo(491.265442f, 72.4811783f, 489.275574f, 70.4905548f, 489.275574f, 68.0362091f);
    pathB.cubicTo(489.275574f, 65.5811005f, 491.265808f, 63.5912399f, 493.720551f, 63.5912399f);
    pathB.cubicTo(496.175262f, 63.5912399f, 498.165527f, 65.5814819f, 498.165527f, 68.0362091f);
    pathB.cubicTo(498.165894f, 70.4905548f, 496.175659f, 72.4811783f, 493.720551f, 72.4811783f);
    pathB.close();
    pathB.moveTo(526.561707f, 42.132679f);
    pathB.cubicTo(526.876404f, 41.786499f, 527.537292f, 41.1881752f, 528.512878f, 42.1956215f);
    pathB.cubicTo(529.488892f, 43.2030678f, 531.691833f, 45.2486725f, 531.881042f, 45.4693451f);
    pathB.cubicTo(532.07019f, 45.6896439f, 532.762939f, 46.2875862f, 533.517883f, 45.7525826f);
    pathB.cubicTo(534.272827f, 45.2172012f, 539.497681f, 41.9753265f, 545.384277f, 42.132679f);
    pathB.cubicTo(546.203247f, 42.2270889f, 546.580566f, 42.5421791f, 546.612f, 43.8324814f);
    pathB.cubicTo(546.643494f, 45.1227837f, 546.674561f, 55.1957283f, 546.612f, 56.2657356f);
    pathB.cubicTo(546.549072f, 57.3361206f, 546.549072f, 57.7452469f, 544.975525f, 57.8396568f);
    pathB.cubicTo(543.401978f, 57.9340706f, 538.742798f, 59.5709305f, 538.774658f, 64.6070251f);
    pathB.cubicTo(538.806458f, 69.6431122f, 538.806091f, 86.2631226f, 538.806091f, 86.9554901f);
    pathB.cubicTo(538.806091f, 87.6478424f, 538.585815f, 88.4349976f, 537.484314f, 88.4349976f);
    pathB.cubicTo(536.382446f, 88.4349976f, 524.79895f, 88.4031372f, 524.04364f, 88.4031372f);
    pathB.cubicTo(523.287964f, 88.4031372f, 522.910706f, 88.3402023f, 522.910706f, 86.8606949f);
    pathB.cubicTo(522.910706f, 85.3823242f, 522.910706f, 60.6094704f, 522.910706f, 60.0740852f);
    pathB.cubicTo(522.910706f, 59.5387039f, 522.81665f, 58.9092865f, 522.470093f, 58.6260452f);
    pathB.cubicTo(522.123901f, 58.3428116f, 517.465088f, 53.621048f, 517.181885f, 53.3378105f);
    pathB.cubicTo(516.898621f, 53.0545731f, 516.300659f, 52.330368f, 517.213318f, 51.5121231f);
    pathB.cubicTo(518.125977f, 50.6942635f, 526.561707f, 42.132679f, 526.561707f, 42.132679f);
    pathB.close();
    pathB.moveTo(550.169006f, 43.7373123f);
    pathB.cubicTo(550.169006f, 42.6358337f, 550.767334f, 42.2263336f, 551.49115f, 42.2263336f);
    pathB.cubicTo(552.214966f, 42.2263336f, 552.781433f, 42.2263336f, 552.938843f, 42.2263336f);
    pathB.cubicTo(553.096191f, 42.2263336f, 553.725586f, 41.8801537f, 553.662598f, 41.124855f);
    pathB.cubicTo(553.600098f, 40.369175f, 553.662598f, 31.4614124f, 553.662598f, 30.8005257f);
    pathB.cubicTo(553.662598f, 30.1396389f, 553.75708f, 29.1951332f, 555.110657f, 29.1951332f);
    pathB.cubicTo(556.463928f, 29.1951332f, 566.536865f, 29.1951332f, 567.859009f, 29.1951332f);
    pathB.cubicTo(569.180786f, 29.1951332f, 569.463623f, 30.1711082f, 569.463623f, 30.7690544f);
    pathB.cubicTo(569.463623f, 31.3670006f, 569.463623f, 40.2122002f, 569.463623f, 41.0619125f);
    pathB.cubicTo(569.463623f, 41.9116249f, 569.746887f, 42.3207474f, 570.659912f, 42.3207474f);
    pathB.cubicTo(571.572571f, 42.3207474f, 575.507568f, 42.2263336f, 576.199951f, 42.2263336f);
    pathB.cubicTo(576.892273f, 42.2263336f, 577.742004f, 42.5725098f, 577.742004f, 43.8631973f);
    pathB.cubicTo(577.742004f, 45.1538811f, 577.742004f, 55.8877106f, 577.742004f, 56.5800705f);
    pathB.cubicTo(577.742004f, 57.2724266f, 577.616455f, 58.0595779f, 576.45166f, 58.0595779f);
    pathB.cubicTo(575.286865f, 58.0595779f, 570.943115f, 58.0595779f, 570.471069f, 58.0595779f);
    pathB.cubicTo(569.999023f, 58.0595779f, 569.479919f, 57.8389015f, 569.479919f, 59.0510979f);
    pathB.cubicTo(569.479919f, 60.2629128f, 569.479919f, 66.2124176f, 569.479919f, 67.1880188f);
    pathB.cubicTo(569.479919f, 68.1636047f, 570.628418f, 73.6406708f, 575.917053f, 73.6406708f);
    pathB.cubicTo(577.018921f, 73.6406708f, 577.742737f, 73.9242859f, 577.742737f, 75.4348907f);
    pathB.cubicTo(577.742737f, 76.945488f, 577.742737f, 87.0813751f, 577.742737f, 87.8366699f);
    pathB.cubicTo(577.742737f, 88.5915909f, 577.648315f, 89.4416809f, 576.295044f, 89.4416809f);
    pathB.cubicTo(574.028809f, 89.6312714f, 553.978088f, 88.0254974f, 553.631897f, 65.928421f);
    pathB.cubicTo(553.631897f, 65.928421f, 553.631897f, 59.6964378f, 553.631897f, 58.972229f);
    pathB.cubicTo(553.631897f, 58.2484055f, 553.034363f, 58.0436554f, 552.703735f, 58.0436554f);
    pathB.cubicTo(552.372681f, 58.0436554f, 551.522949f, 58.0436554f, 551.208252f, 58.0436554f);
    pathB.cubicTo(550.893921f, 58.0436554f, 550.170105f, 58.0906677f, 550.170105f, 56.6115417f);
    pathB.cubicTo(550.170105f, 55.1324081f, 550.169006f, 43.7373123f, 550.169006f, 43.7373123f);
    pathB.close();
    pathB.moveTo(611.203857f, 39.5509338f);
    pathB.cubicTo(612.084961f, 39.5509338f, 612.620422f, 40.0544662f, 612.620422f, 40.8097687f);
    pathB.cubicTo(612.620422f, 41.5650673f, 612.620422f, 53.1486092f, 612.620422f, 53.6839905f);
    pathB.cubicTo(612.620422f, 54.2193718f, 612.651489f, 55.2264404f, 611.612976f, 55.2264404f);
    pathB.cubicTo(610.574463f, 55.2264404f, 604.404663f, 55.9817429f, 604.404663f, 61.899395f);
    pathB.cubicTo(604.404663f, 65.4878235f, 604.373169f, 66.6211548f, 604.373169f, 67.5338135f);
    pathB.cubicTo(604.373169f, 68.0684357f, 604.414124f, 74.3353043f, 599.934631f, 80.4702148f);
    pathB.cubicTo(596.765564f, 84.8109131f, 590.664368f, 89.3942871f, 582.150208f, 89.630127f);
    pathB.cubicTo(580.028015f, 89.630127f, 580.230469f, 88.5286484f, 580.230469f, 88.1820908f);
    pathB.cubicTo(580.230469f, 87.5845184f, 580.198975f, 75.8436279f, 580.198975f, 75.2142105f);
    pathB.cubicTo(580.198975f, 74.5844116f, 580.608154f, 73.8605804f, 581.58374f, 73.8605804f);
    pathB.cubicTo(583.40979f, 73.8605804f, 588.603271f, 72.7905731f, 588.603271f, 66.9043884f);
    pathB.cubicTo(588.603271f, 61.3958588f, 588.603271f, 61.8679237f, 588.603271f, 61.0496788f);
    pathB.cubicTo(588.603271f, 60.2314377f, 588.666565f, 54.3137856f, 593.230591f, 48.3961296f);
    pathB.cubicTo(597.794617f, 42.4784775f, 604.814087f, 39.5509338f, 611.203857f, 39.5509338f);
    pathB.close();
    pathB.moveTo(635.22937f, 81.9311447f);
    pathB.cubicTo(635.057617f, 81.6475296f, 634.869141f, 81.3851471f, 634.664429f, 81.1439972f);
    pathB.lineTo(635.039001f, 81.0385895f);
    pathB.cubicTo(635.447754f, 80.9233246f, 635.729858f, 80.5509796f, 635.729858f, 80.1263123f);
    pathB.lineTo(635.729858f, 78.6149597f);
    pathB.cubicTo(635.729858f, 78.3309631f, 635.602417f, 78.0617523f, 635.382935f, 77.8816452f);
    pathB.cubicTo(635.162598f, 77.7015381f, 634.873291f, 77.6295013f, 634.595764f, 77.6852341f);
    pathB.cubicTo(633.906799f, 77.8232498f, 633.194397f, 77.9017334f, 632.478149f, 77.9191818f);
    pathB.cubicTo(631.714844f, 77.9373779f, 630.851501f, 77.9464874f, 629.911133f, 77.9464874f);
    pathB.lineTo(615.131226f, 77.9464874f);
    pathB.cubicTo(614.607605f, 77.9464874f, 614.18335f, 78.3707733f, 614.18335f, 78.8944016f);
    pathB.lineTo(614.18335f, 81.1337585f);
    pathB.cubicTo(614.18335f, 81.6573868f, 614.607605f, 82.0816803f, 615.131226f, 82.0816803f);
    pathB.lineTo(619.693787f, 82.0816803f);
    pathB.cubicTo(619.680908f, 82.1423492f, 619.669128f, 82.2026367f, 619.657776f, 82.2629166f);
    pathB.cubicTo(619.571289f, 82.728157f, 619.529602f, 83.3200302f, 619.529602f, 84.0730591f);
    pathB.cubicTo(619.529602f, 86.3196259f, 620.260254f, 88.1236954f, 621.701477f, 89.4348602f);
    pathB.cubicTo(623.116516f, 90.7225037f, 625.163269f, 91.3754272f, 627.784058f, 91.3754272f);
    pathB.cubicTo(630.525024f, 91.3754272f, 632.517944f, 90.8669662f, 633.876099f, 89.8208466f);
    pathB.cubicTo(635.291565f, 88.7314987f, 636.009705f, 87.0798492f, 636.009705f, 84.9129181f);
    pathB.cubicTo(636.010071f, 83.7905807f, 635.747314f, 82.7873077f, 635.22937f, 81.9311447f);
    pathB.close();
    pathB.moveTo(631.880554f, 85.7326736f);
    pathB.cubicTo(631.690552f, 86.0545807f, 631.436157f, 86.307869f, 631.102844f, 86.5076904f);
    pathB.cubicTo(630.736206f, 86.7279816f, 630.277039f, 86.8906479f, 629.737854f, 86.9903717f);
    pathB.cubicTo(629.146362f, 87.1003265f, 628.488892f, 87.1564484f, 627.783997f, 87.1564484f);
    pathB.cubicTo(626.159668f, 87.1564484f, 624.996399f, 86.8656235f, 624.327881f, 86.293457f);
    pathB.cubicTo(623.693604f, 85.7489777f, 623.385315f, 84.995575f, 623.385315f, 83.9896393f);
    pathB.cubicTo(623.385315f, 83.3655396f, 623.431519f, 82.8718567f, 623.522583f, 82.5215149f);
    pathB.cubicTo(623.563477f, 82.3645325f, 623.616943f, 82.2189331f, 623.684448f, 82.0824356f);
    pathB.lineTo(630.008179f, 82.0824356f);
    pathB.cubicTo(630.758911f, 82.247757f, 631.311401f, 82.5256805f, 631.650757f, 82.9101562f);
    pathB.cubicTo(631.990112f, 83.2942505f, 632.154663f, 83.8303986f, 632.154663f, 84.549675f);
    pathB.cubicTo(632.154663f, 85.02742f, 632.062927f, 85.4251709f, 631.880554f, 85.7326736f);
    pathB.close();
    pathB.moveTo(635.667664f, 69.5979919f);
    pathB.cubicTo(635.518311f, 69.0645142f, 635.325684f, 68.5818329f, 635.093994f, 68.1620941f);
    pathB.cubicTo(634.940796f, 67.8856812f, 634.770569f, 67.6316376f, 634.586304f, 67.4026184f);
    pathB.lineTo(635.054565f, 67.2619476f);
    pathB.cubicTo(635.455322f, 67.1417542f, 635.729858f, 66.7724457f, 635.729858f, 66.3538437f);
    pathB.lineTo(635.729858f, 64.7021942f);
    pathB.cubicTo(635.729858f, 64.4045486f, 635.590332f, 64.1243439f, 635.3526f, 63.9449997f);
    pathB.cubicTo(635.115234f, 63.7660294f, 634.807373f, 63.7087784f, 634.521057f, 63.7906761f);
    pathB.cubicTo(634.059998f, 63.9226265f, 633.544678f, 64.0155258f, 632.988831f, 64.0659485f);
    pathB.cubicTo(631.578735f, 64.1941071f, 629.921387f, 64.1565704f, 628.141968f, 64.0632935f);
    pathB.cubicTo(627.067383f, 64.0068054f, 625.948853f, 63.9779854f, 624.81665f, 63.9779854f);
    pathB.cubicTo(624.253601f, 63.9779854f, 623.681396f, 64.0359955f, 623.116089f, 64.1512604f);
    pathB.cubicTo(622.479126f, 64.2809448f, 621.888367f, 64.5437012f, 621.35907f, 64.9315872f);
    pathB.cubicTo(620.807007f, 65.3365402f, 620.360352f, 65.9159088f, 620.031189f, 66.6548996f);
    pathB.cubicTo(619.712708f, 67.3722839f, 619.557983f, 68.2625656f, 619.557983f, 69.3769379f);
    pathB.cubicTo(619.557983f, 70.4655304f, 619.669128f, 71.5268097f, 619.887878f, 72.5323639f);
    pathB.cubicTo(620.11499f, 73.573555f, 620.473694f, 74.5040283f, 620.954468f, 75.2983856f);
    pathB.cubicTo(621.196411f, 75.6976471f, 621.693481f, 75.861824f, 622.124939f, 75.6847534f);
    pathB.lineTo(623.832336f, 74.9851913f);
    pathB.cubicTo(624.086365f, 74.8809204f, 624.282776f, 74.6716156f, 624.370728f, 74.4111328f);
    pathB.cubicTo(624.45874f, 74.15065f, 624.429138f, 73.8651276f, 624.290405f, 73.6281509f);
    pathB.cubicTo(624.166382f, 73.416954f, 624.051147f, 73.1644287f, 623.947205f, 72.875885f);
    pathB.cubicTo(623.836853f, 72.5702744f, 623.741333f, 72.2407837f, 623.663574f, 71.8968811f);
    pathB.cubicTo(623.584717f, 71.549942f, 623.522217f, 71.2018585f, 623.477417f, 70.8621292f);
    pathB.cubicTo(623.434937f, 70.5409775f, 623.41333f, 70.2391663f, 623.41333f, 69.9646454f);
    pathB.cubicTo(623.41333f, 68.8229752f, 623.672729f, 68.4748993f, 623.75116f, 68.3960266f);
    pathB.cubicTo(623.853577f, 68.2940369f, 624.20166f, 68.0574341f, 625.236755f, 68.0574341f);
    pathB.cubicTo(625.39679f, 68.0574341f, 625.566284f, 68.0616074f, 625.744446f, 68.0695648f);
    pathB.lineTo(625.744446f, 68.7331085f);
    pathB.cubicTo(625.744446f, 69.8065338f, 625.819153f, 70.8048782f, 625.967041f, 71.70047f);
    pathB.cubicTo(626.12323f, 72.6483841f, 626.392456f, 73.4825516f, 626.767456f, 74.1794586f);
    pathB.cubicTo(627.173523f, 74.9328613f, 627.730957f, 75.5292969f, 628.424438f, 75.9528198f);
    pathB.cubicTo(629.123596f, 76.3790054f, 629.981628f, 76.5951309f, 630.975464f, 76.5951309f);
    pathB.cubicTo(631.722046f, 76.5951309f, 632.406799f, 76.4597626f, 633.009644f, 76.1924591f);
    pathB.cubicTo(633.611816f, 75.9262848f, 634.136536f, 75.5543213f, 634.567688f, 75.0875626f);
    pathB.cubicTo(634.998779f, 74.6223297f, 635.333191f, 74.0672302f, 635.561096f, 73.4370575f);
    pathB.cubicTo(635.78479f, 72.8212891f, 635.898193f, 72.1520538f, 635.898193f, 71.4479446f);
    pathB.cubicTo(635.898193f, 70.7688599f, 635.820496f, 70.1462708f, 635.667664f, 69.5979919f);
    pathB.close();
    pathB.moveTo(631.656494f, 71.9905396f);
    pathB.cubicTo(631.416077f, 72.2574692f, 631.13739f, 72.3765259f, 630.751404f, 72.3765259f);
    pathB.cubicTo(630.390015f, 72.3765259f, 630.239502f, 72.2536774f, 630.190247f, 72.2127228f);
    pathB.cubicTo(630.002197f, 72.0587845f, 629.853149f, 71.8483429f, 629.735596f, 71.5704193f);
    pathB.cubicTo(629.594177f, 71.2348557f, 629.494507f, 70.8310394f, 629.439453f, 70.3714905f);
    pathB.cubicTo(629.379211f, 69.8607559f, 629.348511f, 69.3284073f, 629.348511f, 68.7892303f);
    pathB.cubicTo(629.348511f, 68.5765228f, 629.351929f, 68.3603973f, 629.357971f, 68.1416168f);
    pathB.lineTo(630.581177f, 68.1416168f);
    pathB.cubicTo(630.702515f, 68.2026672f, 630.831787f, 68.2841797f, 630.967163f, 68.3857956f);
    pathB.cubicTo(631.149902f, 68.523056f, 631.322815f, 68.703537f, 631.480225f, 68.922699f);
    pathB.cubicTo(631.639038f, 69.1437531f, 631.77478f, 69.4186478f, 631.884399f, 69.7390442f);
    pathB.cubicTo(631.989807f, 70.0488281f, 632.04364f, 70.4169922f, 632.04364f, 70.8329391f);
    pathB.cubicTo(632.042847f, 71.3228302f, 631.916565f, 71.7012329f, 631.656494f, 71.9905396f);
    pathB.close();
    pathB.moveTo(622.689575f, 63.4953079f);
    pathB.lineTo(620.72998f, 63.4953079f);
    pathB.cubicTo(620.206421f, 63.4953079f, 619.782104f, 63.0710182f, 619.782104f, 62.54739f);
    pathB.lineTo(619.782104f, 61.3116837f);
    pathB.lineTo(617.958679f, 61.3116837f);
    pathB.cubicTo(617.536255f, 61.3116837f, 617.164307f, 61.0318604f, 617.047913f, 60.6257744f);
    pathB.lineTo(616.404114f, 58.3864136f);
    pathB.cubicTo(616.321411f, 58.1001472f, 616.378662f, 57.7922592f, 616.557678f, 57.5541458f);
    pathB.cubicTo(616.737061f, 57.3164062f, 617.017212f, 57.1764946f, 617.31488f, 57.1764946f);
    pathB.lineTo(619.782104f, 57.1764946f);
    pathB.lineTo(619.782104f, 54.3171997f);
    pathB.cubicTo(619.782104f, 53.7935715f, 620.206421f, 53.3692818f, 620.730042f, 53.3692818f);
    pathB.lineTo(622.689575f, 53.3692818f);
    pathB.cubicTo(623.213196f, 53.3692818f, 623.637512f, 53.7935715f, 623.637512f, 54.3171997f);
    pathB.lineTo(623.637512f, 57.1764946f);
    pathB.lineTo(630.443176f, 57.1764946f);
    pathB.cubicTo(631.548828f, 57.1764946f, 631.921936f, 57.0028381f, 632.009888f, 56.9493713f);
    pathB.cubicTo(632.057617f, 56.9205589f, 632.154724f, 56.8621674f, 632.154724f, 56.5288773f);
    pathB.cubicTo(632.154724f, 56.139473f, 632.116821f, 55.8179398f, 632.04248f, 55.5737572f);
    pathB.cubicTo(631.949219f, 55.268528f, 631.822205f, 54.9193192f, 631.665588f, 54.5363579f);
    pathB.cubicTo(631.563599f, 54.288002f, 631.572327f, 54.0085602f, 631.688354f, 53.7670288f);
    pathB.cubicTo(631.804749f, 53.5251198f, 632.017456f, 53.3438797f, 632.274536f, 53.2680435f);
    pathB.lineTo(633.9823f, 52.7641296f);
    pathB.cubicTo(634.430115f, 52.6325607f, 634.90332f, 52.8437576f, 635.105042f, 53.2623596f);
    pathB.cubicTo(635.375f, 53.8235245f, 635.59491f, 54.4404297f, 635.758301f, 55.0956268f);
    pathB.cubicTo(635.925537f, 55.7656174f, 636.010498f, 56.4928589f, 636.010498f, 57.2565002f);
    pathB.cubicTo(636.010498f, 58.7109833f, 635.553589f, 59.7790947f, 634.653076f, 60.4316406f);
    pathB.cubicTo(633.835938f, 61.0235176f, 632.596069f, 61.311306f, 630.863647f, 61.311306f);
    pathB.lineTo(623.637878f, 61.311306f);
    pathB.lineTo(623.637878f, 62.5470123f);
    pathB.cubicTo(623.637451f, 63.071022f, 623.213196f, 63.4953079f, 622.689575f, 63.4953079f);
    pathB.close();
    pathB.moveTo(635.667664f, 46.2246475f);
    pathB.cubicTo(635.518311f, 45.6911545f, 635.325684f, 45.2084808f, 635.093994f, 44.7887421f);
    pathB.cubicTo(634.940796f, 44.5123291f, 634.770569f, 44.2582855f, 634.586304f, 44.029274f);
    pathB.lineTo(635.054565f, 43.8886032f);
    pathB.cubicTo(635.455322f, 43.7684059f, 635.729858f, 43.3990974f, 635.729858f, 42.9804955f);
    pathB.lineTo(635.729858f, 41.328846f);
    pathB.cubicTo(635.729858f, 41.0312004f, 635.590332f, 40.7509995f, 635.3526f, 40.5716515f);
    pathB.cubicTo(635.115234f, 40.3926849f, 634.807373f, 40.3354301f, 634.521057f, 40.4173279f);
    pathB.cubicTo(634.059998f, 40.5492783f, 633.544678f, 40.6421738f, 632.988831f, 40.6926041f);
    pathB.cubicTo(631.578735f, 40.8207626f, 629.921387f, 40.7836075f, 628.141968f, 40.689949f);
    pathB.cubicTo(627.067383f, 40.6334534f, 625.948853f, 40.6046371f, 624.81665f, 40.6046371f);
    pathB.cubicTo(624.253601f, 40.6046371f, 623.681396f, 40.6626511f, 623.116089f, 40.777916f);
    pathB.cubicTo(622.479126f, 40.9075928f, 621.888367f, 41.1703568f, 621.35907f, 41.5582428f);
    pathB.cubicTo(620.807007f, 41.963192f, 620.360352f, 42.5425606f, 620.031189f, 43.2815552f);
    pathB.cubicTo(619.712708f, 43.9989395f, 619.557983f, 44.8892212f, 619.557983f, 46.0035934f);
    pathB.cubicTo(619.557983f, 47.0921783f, 619.669128f, 48.1534653f, 619.887878f, 49.1590195f);
    pathB.cubicTo(620.11499f, 50.2002106f, 620.473694f, 51.1306839f, 620.954468f, 51.9250374f);
    pathB.cubicTo(621.196411f, 52.3243027f, 621.693481f, 52.4880981f, 622.124939f, 52.311409f);
    pathB.lineTo(623.832336f, 51.6118431f);
    pathB.cubicTo(624.086365f, 51.5075722f, 624.282776f, 51.2982712f, 624.370728f, 51.0377846f);
    pathB.cubicTo(624.45874f, 50.777298f, 624.429138f, 50.4917831f, 624.290405f, 50.2548065f);
    pathB.cubicTo(624.166382f, 50.0436096f, 624.051147f, 49.7910843f, 623.947205f, 49.5025406f);
    pathB.cubicTo(623.836853f, 49.1969299f, 623.741333f, 48.8674355f, 623.663574f, 48.5235291f);
    pathB.cubicTo(623.584717f, 48.1765938f, 623.522217f, 47.8285179f, 623.477417f, 47.4887848f);
    pathB.cubicTo(623.434937f, 47.1676331f, 623.41333f, 46.8658142f, 623.41333f, 46.5912971f);
    pathB.cubicTo(623.41333f, 45.4496269f, 623.672729f, 45.1015511f, 623.75116f, 45.0226822f);
    pathB.cubicTo(623.853577f, 44.9206886f, 624.20166f, 44.6840897f, 625.236755f, 44.6840897f);
    pathB.cubicTo(625.39679f, 44.6840897f, 625.566284f, 44.6882591f, 625.744446f, 44.6962204f);
    pathB.lineTo(625.744446f, 45.3597641f);
    pathB.cubicTo(625.744446f, 46.4331856f, 625.819153f, 47.43153f, 625.967041f, 48.3271217f);
    pathB.cubicTo(626.12323f, 49.2750397f, 626.392456f, 50.1092072f, 626.767456f, 50.8061142f);
    pathB.cubicTo(627.173523f, 51.5595169f, 627.730957f, 52.1559486f, 628.424438f, 52.5794754f);
    pathB.cubicTo(629.123596f, 53.005661f, 629.981628f, 53.2217865f, 630.975464f, 53.2217865f);
    pathB.cubicTo(631.722046f, 53.2217865f, 632.406799f, 53.086422f, 633.009644f, 52.8191147f);
    pathB.cubicTo(633.611816f, 52.5529366f, 634.136536f, 52.1809769f, 634.567688f, 51.7142181f);
    pathB.cubicTo(634.998779f, 51.2489815f, 635.333191f, 50.693882f, 635.561096f, 50.0637054f);
    pathB.cubicTo(635.78479f, 49.4479408f, 635.898193f, 48.7787094f, 635.898193f, 48.0746002f);
    pathB.cubicTo(635.898193f, 47.3958893f, 635.820496f, 46.7733002f, 635.667664f, 46.2246475f);
    pathB.close();
    pathB.moveTo(631.656494f, 48.6171875f);
    pathB.cubicTo(631.416077f, 48.8841209f, 631.13739f, 49.0031815f, 630.751404f, 49.0031815f);
    pathB.cubicTo(630.390015f, 49.0031815f, 630.239502f, 48.8803291f, 630.190247f, 48.8393784f);
    pathB.cubicTo(630.002197f, 48.6854401f, 629.853149f, 48.4749985f, 629.735596f, 48.1970711f);
    pathB.cubicTo(629.594177f, 47.8615112f, 629.494507f, 47.457695f, 629.439453f, 46.9981461f);
    pathB.cubicTo(629.379211f, 46.4874115f, 629.348511f, 45.9550591f, 629.348511f, 45.4158859f);
    pathB.cubicTo(629.348511f, 45.2031708f, 629.351929f, 44.9870453f, 629.357971f, 44.7682648f);
    pathB.lineTo(630.581177f, 44.7682648f);
    pathB.cubicTo(630.702515f, 44.8293152f, 630.831787f, 44.9108353f, 630.967163f, 45.0124512f);
    pathB.cubicTo(631.149902f, 45.1497116f, 631.322815f, 45.3301926f, 631.480225f, 45.5493507f);
    pathB.cubicTo(631.639038f, 45.7704048f, 631.77478f, 46.0453033f, 631.884399f, 46.3656998f);
    pathB.cubicTo(631.989807f, 46.6754761f, 632.04364f, 47.0436478f, 632.04364f, 47.4595947f);
    pathB.cubicTo(632.042847f, 47.949852f, 631.916565f, 48.3282623f, 631.656494f, 48.6171875f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpAngle::setSector SkASSERT(fSectorStart >= 0);
static void skpwww_seopack_blogspot_com_2153(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(999.892212f, 246);
    path.lineTo(927.340759f, 245.505722f);
    path.quadTo(928.068054f, 246, 929, 246);
    path.lineTo(999.892212f, 246);
    path.close();
    path.moveTo(927.340759f, 245.505722f);
    path.lineTo(926.5f, 245.5f);
    path.lineTo(925.17157f, 246.82843f);
    path.quadTo(926.34314f, 248, 928, 248);
    path.lineTo(1000, 248);
    path.lineTo(1000, 246);
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(924, 248);
    pathB.lineTo(924, 245.472672f);
    pathB.lineTo(1143, 247);
    pathB.lineTo(1143, 248);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// joinCoincidence / findT / assert
static void skpwww_lokado_de_173(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 896.991394f);
    path.quadTo(999.789917f, 896.718872f, 999.535522f, 896.464478f);
    path.quadTo(998.071045f, 895, 996, 895);
    path.lineTo(956, 895);
    path.quadTo(951.857849f, 895, 948.928955f, 897.928955f);
    path.quadTo(946, 900.857849f, 946, 905);
    path.lineTo(946, 906);
    path.quadTo(946, 910.142151f, 948.928955f, 913.071045f);
    path.quadTo(951.857849f, 916, 956, 916);
    path.lineTo(996, 916);
    path.quadTo(998.071045f, 916, 999.535522f, 914.535522f);
    path.quadTo(999.789917f, 914.281128f, 1000, 914.008606f);
    path.lineTo(1000, 896.991394f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(946, 906);
    pathB.lineTo(946, 905);
    pathB.quadTo(946, 901.272095f, 948.928955f, 898.636047f);
    pathB.quadTo(951.857849f, 896, 956, 896);
    pathB.lineTo(996, 896);
    pathB.quadTo(998.071045f, 896, 999.535522f, 897.17157f);
    pathB.quadTo(1001, 898.34314f, 1001, 900);
    pathB.lineTo(1001, 911);
    pathB.quadTo(1001, 913.071045f, 999.535522f, 914.535522f);
    pathB.quadTo(998.071045f, 916, 996, 916);
    pathB.lineTo(956, 916);
    pathB.quadTo(951.857849f, 916, 948.928955f, 913.071045f);
    pathB.quadTo(946, 910.142151f, 946, 906);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// !simple->isClosed()
static void skpwww_wartepop_blogspot_com_br_6(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(90.9763107f, 153.309662f);
    path.quadTo(91.9526215f, 152.333344f, 93.3333359f, 152.333344f);
    path.lineTo(124.666664f, 152.333344f);
    path.quadTo(126.047379f, 152.333344f, 127.023689f, 153.309662f);
    path.quadTo(128, 154.285965f, 128, 155.666672f);
    path.lineTo(128, 163.666672f);
    path.lineTo(90, 163.666672f);
    path.lineTo(90, 155.666672f);
    path.quadTo(90, 154.285965f, 90.9763107f, 153.309662f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(90, 163.666672f);
    pathB.lineTo(90, 155.666672f);
    pathB.quadTo(90, 154.285965f, 90.9763107f, 153.309662f);
    pathB.quadTo(91.9526215f, 152.333344f, 93.3333359f, 152.333344f);
    pathB.lineTo(124.666672f, 152.333344f);
    pathB.quadTo(125.909309f, 152.333344f, 126.787994f, 153.309662f);
    pathB.quadTo(127.666672f, 154.285965f, 127.666672f, 155.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

static void skpwww_wartepop_blogspot_com_br_6a(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(90.9763107f, 153.309662f);
    path.quadTo(91.9526215f, 152.333344f, 93.3333359f, 152.333344f);
    path.lineTo(124.666672f, 152.333344f);
    path.quadTo(126.047379f, 152.333344f, 127.023689f, 153.309662f);
    path.quadTo(128, 154.285965f, 128, 155.666672f);
    path.lineTo(128, 163.666672f);
    path.lineTo(90, 163.666672f);
    path.lineTo(90, 155.666672f);
    path.quadTo(90, 154.285965f, 90.9763107f, 153.309662f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(90, 163.666672f);
    pathB.lineTo(90, 155.666672f);
    pathB.quadTo(90, 154.285965f, 90.9763107f, 153.309662f);
    pathB.quadTo(91.9526215f, 152.333344f, 93.3333359f, 152.333344f);
    pathB.lineTo(124.666672f, 152.333344f);
    pathB.quadTo(125.909309f, 152.333344f, 126.787994f, 153.309662f);
    pathB.quadTo(127.666672f, 154.285965f, 127.666672f, 155.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// !simple->isClosed()
static void skpwww_odia_com_br_26(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(360.740479f, 741.040771f);
    path.quadTo(360.378967f, 741, 360, 741);
    path.quadTo(359.159821f, 741, 358.403076f, 741.200745f);
    path.quadTo(357.649658f, 741.415833f, 356.92746f, 741.846436f);
    path.quadTo(356.600769f, 742.041199f, 356.310211f, 742.262268f);
    path.quadTo(356.025513f, 742.489197f, 355.757355f, 742.757385f);
    path.quadTo(355.16394f, 743.350769f, 354.770874f, 744.027283f);
    path.quadTo(354.389618f, 744.71283f, 354.183258f, 745.528564f);
    path.quadTo(354.090027f, 745.897095f, 354.040833f, 746.259277f);
    path.quadTo(354, 746.621216f, 354, 747);
    path.quadTo(354, 747.839844f, 354.200653f, 748.596497f);
    path.quadTo(354.415771f, 749.35022f, 354.846466f, 750.072632f);
    path.quadTo(355.040741f, 750.398438f, 355.261444f, 750.688721f);
    path.quadTo(355.488861f, 750.974121f, 355.757355f, 751.242615f);
    path.quadTo(356.352142f, 751.837402f, 357.030304f, 752.230896f);
    path.quadTo(357.714539f, 752.610901f, 358.528564f, 752.816833f);
    path.quadTo(358.895294f, 752.909607f, 359.25528f, 752.95874f);
    path.quadTo(359.618896f, 753, 360, 753);
    path.quadTo(360.842285f, 753, 361.600952f, 752.798157f);
    path.quadTo(362.352386f, 752.583008f, 363.072601f, 752.153625f);
    path.quadTo(363.397339f, 751.960022f, 363.686829f, 751.740051f);
    path.quadTo(363.973297f, 751.511963f, 364.242645f, 751.242615f);
    path.quadTo(364.837799f, 750.647461f, 365.231354f, 749.968933f);
    path.quadTo(365.610992f, 749.285034f, 365.816803f, 748.471497f);
    path.quadTo(365.909668f, 748.104431f, 365.958832f, 747.743713f);
    path.quadTo(366, 747.380371f, 366, 747);
    path.quadTo(366, 746.158997f, 365.798767f, 745.401367f);
    path.quadTo(365.583618f, 744.648682f, 365.153595f, 743.927429f);
    path.quadTo(364.959442f, 743.601807f, 364.738678f, 743.311462f);
    path.quadTo(364.511108f, 743.025818f, 364.242645f, 742.757385f);
    path.quadTo(363.649017f, 742.163757f, 362.972168f, 741.770569f);
    path.quadTo(362.286835f, 741.389526f, 361.471497f, 741.183289f);
    path.quadTo(361.102509f, 741.089966f, 360.740479f, 741.040771f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(355.654724f, 739.711792f);
    pathB.lineTo(367.288269f, 742.654724f);
    pathB.lineTo(364.345337f, 754.288269f);
    pathB.lineTo(352.711792f, 751.345337f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_evolvehq_com_210(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(172, 972);
    path.quadTo(170.757355f, 972, 169.878677f, 972.878662f);
    path.quadTo(169, 973.757385f, 169, 975);
    path.lineTo(169, 1171);
    path.quadTo(169, 1172.24268f, 169.878677f, 1173.12134f);
    path.quadTo(170.757355f, 1174, 172, 1174);
    path.lineTo(308, 1174);
    path.quadTo(309.242645f, 1174, 310.121307f, 1173.12134f);
    path.quadTo(310.337311f, 1172.9054f, 310.5f, 1172.66772f);
    path.lineTo(310.5f, 973.332336f);
    path.quadTo(310.337219f, 973.094604f, 310.121307f, 972.878662f);
    path.quadTo(309.242645f, 972, 308, 972);
    path.lineTo(172, 972);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(170, 1171);
    pathB.lineTo(170, 975);
    pathB.quadTo(170, 974.17157f, 170.585785f, 973.585815f);
    pathB.quadTo(171.17157f, 973, 172, 973);
    pathB.lineTo(308, 973);
    pathB.quadTo(309.242645f, 973, 310.121307f, 973.585815f);
    pathB.quadTo(311, 974.17157f, 311, 975);
    pathB.lineTo(311, 1171);
    pathB.quadTo(311, 1172.24268f, 310.121307f, 1173.12134f);
    pathB.quadTo(309.242645f, 1174, 308, 1174);
    pathB.lineTo(172, 1174);
    pathB.quadTo(171.17157f, 1174, 170.585785f, 1173.12134f);
    pathB.quadTo(170, 1172.24268f, 170, 1171);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// hangs
static void skpwww_catingueiraonline_com_352(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(443, 8292);
    path.lineTo(443, 8140);
    path.lineTo(444, 8140);
    path.lineTo(444.01001f, 8292);
    path.lineTo(443, 8292);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(443, 8140);
    pathB.lineTo(444.01001f, 8140);
    pathB.lineTo(444, 8292);
    pathB.lineTo(443, 8292);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// hangs
static void skpwww_galaxystwo_com_4(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(10105, 2510);
    path.lineTo(10123, 2509.98999f);
    path.lineTo(10123, 2511);
    path.lineTo(10105, 2511);
    path.lineTo(10105, 2510);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(10105, 2511);
    pathB.lineTo(10105, 2509.98999f);
    pathB.lineTo(10123, 2510);
    pathB.lineTo(10123, 2511);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_thaienews_blogspot_com_36(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(429.994995f, 6268);
    path.lineTo(430, 2187);
    path.lineTo(430.5f, 2187);
    path.lineTo(430.5f, 6268);
    path.lineTo(429.994995f, 6268);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(430.5f, 2187);
    pathB.lineTo(429.994995f, 2187);
    pathB.lineTo(430, 6268);
    pathB.lineTo(430.5f, 6268);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_fashionscandal_com_94(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(25.9107456f, 272.577423f);
    path.quadTo(26.1548233f, 272.333344f, 26.5000019f, 272.333344f);
    path.lineTo(131.166672f, 272.333344f);
    path.quadTo(131.511841f, 272.333344f, 131.75592f, 272.577423f);
    path.quadTo(132, 272.821503f, 132, 273.166687f);
    path.lineTo(132, 417.166656f);
    path.quadTo(132, 417.511841f, 131.75592f, 417.75592f);
    path.quadTo(131.511841f, 418, 131.166672f, 418);
    path.lineTo(26.5000019f, 418);
    path.quadTo(26.1548233f, 418, 25.9107456f, 417.75592f);
    path.quadTo(25.6666679f, 417.511841f, 25.6666679f, 417.166656f);
    path.lineTo(25.6666679f, 273.166687f);
    path.quadTo(25.6666679f, 272.821503f, 25.9107456f, 272.577423f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(25.833334f, 417.166656f);
    pathB.lineTo(25.833334f, 273.166656f);
    pathB.quadTo(25.833334f, 272.890533f, 26.0285969f, 272.695251f);
    pathB.quadTo(26.2238579f, 272.5f, 26.5f, 272.5f);
    pathB.lineTo(131.166672f, 272.5f);
    pathB.quadTo(131.442825f, 272.5f, 131.638077f, 272.695251f);
    pathB.quadTo(131.833344f, 272.890533f, 131.833344f, 273.166656f);
    pathB.lineTo(131.833344f, 417.166656f);
    pathB.quadTo(131.833344f, 417.511841f, 131.638077f, 417.75592f);
    pathB.quadTo(131.442825f, 418, 131.166672f, 418);
    pathB.lineTo(26.5f, 418);
    pathB.quadTo(26.2238579f, 418, 26.0285969f, 417.75592f);
    pathB.quadTo(25.833334f, 417.511841f, 25.833334f, 417.166656f);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

static void skpwww_kenlevine_blogspot_com_28(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(276, 9506);
    path.lineTo(276, 7531);
    path.lineTo(277, 7531);
    path.lineTo(277.01001f, 9506);
    path.lineTo(276, 9506);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(276, 7531);
    pathB.lineTo(277.01001f, 7531);
    pathB.lineTo(277, 9506);
    pathB.lineTo(276, 9506);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_defense_studies_blogspot_com_64(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(276, 9600);
    path.lineTo(276, 7703);
    path.lineTo(277, 7703);
    path.lineTo(277.01001f, 9600);
    path.lineTo(276, 9600);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(276, 7703);
    pathB.lineTo(277.01001f, 7703);
    pathB.lineTo(277, 9600);
    pathB.lineTo(276, 9600);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_uniquefx_net_442(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(960, 306);
    path.lineTo(960, 305);
    path.lineTo(1000, 305);
    path.lineTo(1000, 306.708527f);
    path.lineTo(960, 306);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(960, 305);
    pathB.lineTo(958.997253f, 306.002747f);
    pathB.lineTo(1017, 307);
    pathB.lineTo(1019, 305);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_kitcheninspirations_wordpress_com_32(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(47.1666679f, 19651.334f);
    path.lineTo(65.8333359f, 19651.332f);
    path.lineTo(65.8333359f, 19651.5f);
    path.lineTo(47.1666679f, 19651.5f);
    path.lineTo(47.1666679f, 19651.334f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(47.1666679f, 19651.5f);
    pathB.lineTo(47.1666679f, 19651.332f);
    pathB.lineTo(65.8333359f, 19651.334f);
    pathB.lineTo(65.8333359f, 19651.5f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_educationalcraft_com_4(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(941, 1494);
    path.lineTo(941, 1464);
    path.lineTo(985, 1464);
    path.lineTo(985, 1494);
    path.lineTo(941, 1494);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(979.211975f, 1480.45496f);
    pathB.cubicTo(979.211975f, 1480.45496f, 976.348999f, 1479.68506f, 977.495972f, 1475.59497f);
    pathB.cubicTo(977.497009f, 1475.59497f, 981.072021f, 1477.88501f, 979.211975f, 1480.45496f);
    pathB.close();
    pathB.moveTo(977.854004f, 1484.453f);
    pathB.cubicTo(977.854004f, 1484.453f, 975.265991f, 1483.26099f, 976.713989f, 1479.35205f);
    pathB.cubicTo(976.713989f, 1479.35303f, 979.84198f, 1482.23499f, 977.854004f, 1484.453f);
    pathB.close();
    pathB.moveTo(980.226013f, 1476.229f);
    pathB.cubicTo(980.226013f, 1476.229f, 977.078003f, 1476.349f, 977.234985f, 1471.97095f);
    pathB.cubicTo(977.234985f, 1471.97095f, 980.666992f, 1473.12903f, 980.226013f, 1476.229f);
    pathB.close();
    pathB.moveTo(984.546021f, 1478.31494f);
    pathB.cubicTo(984.546021f, 1478.31494f, 983.187988f, 1481.93396f, 980.026001f, 1481.276f);
    pathB.cubicTo(980.026978f, 1481.276f, 979.554993f, 1478.38904f, 984.546021f, 1478.31494f);
    pathB.close();
    pathB.moveTo(978.989014f, 1484.198f);
    pathB.cubicTo(978.989014f, 1484.198f, 979.094971f, 1481.33496f, 983.786011f, 1481.823f);
    pathB.cubicTo(983.786011f, 1481.823f, 982.070007f, 1485.49805f, 978.989014f, 1484.198f);
    pathB.close();
    pathB.moveTo(976.393005f, 1486.86804f);
    pathB.cubicTo(976.393005f, 1486.86804f, 976.719971f, 1484.06494f, 981.679016f, 1485.37f);
    pathB.cubicTo(981.679016f, 1485.37f, 979.169983f, 1488.40796f, 976.393005f, 1486.86804f);
    pathB.close();
    pathB.moveTo(969.156982f, 1490.40002f);
    pathB.cubicTo(969.156982f, 1490.40002f, 971.478027f, 1488.23596f, 974.869995f, 1491.21399f);
    pathB.cubicTo(974.869995f, 1491.21497f, 970.828003f, 1493.026f, 969.156982f, 1490.40002f);
    pathB.close();
    pathB.moveTo(972.825012f, 1483.93701f);
    pathB.cubicTo(972.825012f, 1483.93701f, 973.971985f, 1487.98401f, 971.161987f, 1488.94604f);
    pathB.cubicTo(971.161987f, 1488.94495f, 969.278015f, 1486.37097f, 972.825012f, 1483.93701f);
    pathB.close();
    pathB.moveTo(965.60199f, 1489.98499f);
    pathB.cubicTo(965.60199f, 1489.98499f, 964.879028f, 1487.19202f, 969.864014f, 1486.75f);
    pathB.cubicTo(969.864014f, 1486.75f, 968.749023f, 1490.672f, 965.60199f, 1489.98499f);
    pathB.close();
    pathB.moveTo(970.666992f, 1492.81604f);
    pathB.cubicTo(970.666992f, 1492.81604f, 967.327026f, 1494.49695f, 964.999023f, 1491.56299f);
    pathB.cubicTo(964.999023f, 1491.56299f, 967.304016f, 1489.43896f, 970.666992f, 1492.81604f);
    pathB.close();
    pathB.moveTo(968.343994f, 1481.53796f);
    pathB.cubicTo(971.573975f, 1479.94995f, 971.687988f, 1476.78601f, 971.687988f, 1476.78601f);
    pathB.lineTo(971.393982f, 1466.83398f);
    pathB.lineTo(954.960999f, 1466.83398f);
    pathB.lineTo(954.666016f, 1476.78601f);
    pathB.cubicTo(954.666016f, 1476.78601f, 954.780029f, 1479.94995f, 958.008972f, 1481.53796f);
    pathB.cubicTo(960.781006f, 1482.90295f, 962.166992f, 1484.77698f, 962.166992f, 1484.77698f);
    pathB.cubicTo(962.166992f, 1484.77698f, 962.747986f, 1485.70105f, 963.177979f, 1485.70105f);
    pathB.cubicTo(963.606995f, 1485.70105f, 964.185974f, 1484.77698f, 964.185974f, 1484.77698f);
    pathB.cubicTo(964.185974f, 1484.77698f, 965.573975f, 1482.90295f, 968.343994f, 1481.53796f);
    pathB.close();
    pathB.moveTo(963.215027f, 1486.67004f);
    pathB.cubicTo(962.744995f, 1486.67004f, 962.106995f, 1485.65405f, 962.106995f, 1485.65405f);
    pathB.cubicTo(962.106995f, 1485.65405f, 960.585022f, 1483.59595f, 957.539001f, 1482.09705f);
    pathB.cubicTo(953.991028f, 1480.35205f, 953.867004f, 1476.87598f, 953.867004f, 1476.87598f);
    pathB.lineTo(954.190002f, 1465.94397f);
    pathB.lineTo(972.23999f, 1465.94397f);
    pathB.lineTo(972.565002f, 1476.87695f);
    pathB.cubicTo(972.565002f, 1476.87695f, 972.440979f, 1480.35303f, 968.891968f, 1482.09802f);
    pathB.cubicTo(965.846008f, 1483.59705f, 964.325012f, 1485.65503f, 964.325012f, 1485.65503f);
    pathB.cubicTo(964.325012f, 1485.65503f, 963.687012f, 1486.67004f, 963.215027f, 1486.67004f);
    pathB.close();
    pathB.moveTo(960.68103f, 1489.98499f);
    pathB.cubicTo(957.533997f, 1490.672f, 956.417969f, 1486.75f, 956.417969f, 1486.75f);
    pathB.cubicTo(961.403015f, 1487.19202f, 960.68103f, 1489.98499f, 960.68103f, 1489.98499f);
    pathB.close();
    pathB.moveTo(963.143005f, 1489.59802f);
    pathB.cubicTo(963.763f, 1489.59802f, 964.265015f, 1490.09998f, 964.265015f, 1490.72095f);
    pathB.cubicTo(964.265015f, 1491.34204f, 963.763f, 1491.84399f, 963.143005f, 1491.84399f);
    pathB.cubicTo(962.521973f, 1491.84399f, 962.02002f, 1491.34204f, 962.02002f, 1490.72095f);
    pathB.cubicTo(962.02002f, 1490.09998f, 962.521973f, 1489.59802f, 963.143005f, 1489.59802f);
    pathB.close();
    pathB.moveTo(961.283997f, 1491.56299f);
    pathB.cubicTo(958.953979f, 1494.49695f, 955.61499f, 1492.81604f, 955.61499f, 1492.81604f);
    pathB.cubicTo(958.97699f, 1489.43896f, 961.283997f, 1491.56299f, 961.283997f, 1491.56299f);
    pathB.close();
    pathB.moveTo(957.127014f, 1490.40002f);
    pathB.cubicTo(955.455017f, 1493.026f, 951.414001f, 1491.21399f, 951.414001f, 1491.21399f);
    pathB.cubicTo(954.802979f, 1488.23596f, 957.127014f, 1490.40002f, 957.127014f, 1490.40002f);
    pathB.close();
    pathB.moveTo(949.890991f, 1486.86804f);
    pathB.cubicTo(947.112976f, 1488.40796f, 944.604004f, 1485.37f, 944.604004f, 1485.37f);
    pathB.cubicTo(949.562012f, 1484.06494f, 949.890991f, 1486.86804f, 949.890991f, 1486.86804f);
    pathB.close();
    pathB.moveTo(947.070984f, 1480.45496f);
    pathB.cubicTo(945.211975f, 1477.88501f, 948.786011f, 1475.59497f, 948.786011f, 1475.59497f);
    pathB.cubicTo(949.934021f, 1479.68506f, 947.070984f, 1480.45496f, 947.070984f, 1480.45496f);
    pathB.close();
    pathB.moveTo(946.054016f, 1476.229f);
    pathB.cubicTo(945.61499f, 1473.12903f, 949.046997f, 1471.97095f, 949.046997f, 1471.97095f);
    pathB.cubicTo(949.205994f, 1476.349f, 946.054016f, 1476.229f, 946.054016f, 1476.229f);
    pathB.close();
    pathB.moveTo(948.427002f, 1484.453f);
    pathB.cubicTo(946.440002f, 1482.23499f, 949.567993f, 1479.35205f, 949.567993f, 1479.35205f);
    pathB.cubicTo(951.015991f, 1483.26099f, 948.427002f, 1484.453f, 948.427002f, 1484.453f);
    pathB.close();
    pathB.moveTo(947.294006f, 1484.198f);
    pathB.cubicTo(944.210999f, 1485.49805f, 942.495972f, 1481.823f, 942.495972f, 1481.823f);
    pathB.cubicTo(947.187988f, 1481.33496f, 947.294006f, 1484.198f, 947.294006f, 1484.198f);
    pathB.close();
    pathB.moveTo(946.255005f, 1481.276f);
    pathB.cubicTo(943.094971f, 1481.93396f, 941.736023f, 1478.31494f, 941.736023f, 1478.31494f);
    pathB.cubicTo(946.728027f, 1478.38904f, 946.255005f, 1481.276f, 946.255005f, 1481.276f);
    pathB.close();
    pathB.moveTo(945.312988f, 1478.18005f);
    pathB.cubicTo(942.052979f, 1477.80103f, 942.651001f, 1473.87805f, 942.651001f, 1473.87805f);
    pathB.cubicTo(946.562988f, 1475.66199f, 945.312988f, 1478.18005f, 945.312988f, 1478.18005f);
    pathB.close();
    pathB.moveTo(945.382019f, 1474.328f);
    pathB.cubicTo(942.924011f, 1472.729f, 944.492004f, 1469.48706f, 944.492004f, 1469.48706f);
    pathB.cubicTo(947.388977f, 1471.95703f, 945.382019f, 1474.328f, 945.382019f, 1474.328f);
    pathB.close();
    pathB.moveTo(946.797974f, 1470.27405f);
    pathB.cubicTo(944.664978f, 1467.90198f, 947.083984f, 1465.50598f, 947.083984f, 1465.50598f);
    pathB.cubicTo(949.145996f, 1468.82605f, 946.797974f, 1470.27405f, 946.797974f, 1470.27405f);
    pathB.close();
    pathB.moveTo(947.392029f, 1471.64197f);
    pathB.cubicTo(947.624023f, 1468.56299f, 951.361023f, 1468.29199f, 951.361023f, 1468.29199f);
    pathB.cubicTo(950.554016f, 1471.98499f, 947.392029f, 1471.64197f, 947.392029f, 1471.64197f);
    pathB.close();
    pathB.moveTo(948.64801f, 1468.15002f);
    pathB.cubicTo(948.638977f, 1465.22095f, 952.265991f, 1464.46399f, 952.265991f, 1464.46399f);
    pathB.cubicTo(951.672974f, 1468.53101f, 948.64801f, 1468.15002f, 948.64801f, 1468.15002f);
    pathB.close();
    pathB.moveTo(951.176025f, 1486.97803f);
    pathB.cubicTo(948.963013f, 1484.62f, 951.361023f, 1481.77698f, 951.361023f, 1481.77698f);
    pathB.cubicTo(953.734985f, 1485.48596f, 951.176025f, 1486.97803f, 951.176025f, 1486.97803f);
    pathB.close();
    pathB.moveTo(947.51001f, 1488.53101f);
    pathB.cubicTo(947.51001f, 1488.53101f, 951.596985f, 1486.32202f, 953.234009f, 1489.08997f);
    pathB.cubicTo(953.234009f, 1489.08997f, 951.158997f, 1491.03601f, 947.51001f, 1488.53101f);
    pathB.close();
    pathB.moveTo(955.120972f, 1488.94495f);
    pathB.cubicTo(952.309021f, 1487.98303f, 953.458984f, 1483.93604f, 953.458984f, 1483.93604f);
    pathB.cubicTo(957.004028f, 1486.37097f, 955.120972f, 1488.94495f, 955.120972f, 1488.94495f);
    pathB.close();
    pathB.moveTo(978.770996f, 1488.53101f);
    pathB.cubicTo(975.122986f, 1491.03601f, 973.047974f, 1489.08997f, 973.047974f, 1489.08997f);
    pathB.cubicTo(974.684998f, 1486.32202f, 978.770996f, 1488.53101f, 978.770996f, 1488.53101f);
    pathB.close();
    pathB.moveTo(975.106995f, 1486.97803f);
    pathB.cubicTo(975.106995f, 1486.97803f, 972.546997f, 1485.48706f, 974.919983f, 1481.77698f);
    pathB.cubicTo(974.919983f, 1481.776f, 977.31897f, 1484.61902f, 975.106995f, 1486.97803f);
    pathB.close();
    pathB.moveTo(974.016968f, 1464.46399f);
    pathB.cubicTo(974.016968f, 1464.46399f, 977.643982f, 1465.22095f, 977.633972f, 1468.15002f);
    pathB.cubicTo(977.633972f, 1468.15002f, 974.611023f, 1468.53101f, 974.016968f, 1464.46399f);
    pathB.close();
    pathB.moveTo(974.919983f, 1468.29199f);
    pathB.cubicTo(974.919983f, 1468.29199f, 978.658997f, 1468.56299f, 978.890015f, 1471.64197f);
    pathB.cubicTo(978.890015f, 1471.64197f, 975.72699f, 1471.98499f, 974.919983f, 1468.29199f);
    pathB.close();
    pathB.moveTo(979.197998f, 1465.50598f);
    pathB.cubicTo(979.197998f, 1465.50598f, 981.619019f, 1467.90198f, 979.481995f, 1470.27405f);
    pathB.cubicTo(979.481995f, 1470.27405f, 977.138f, 1468.82605f, 979.197998f, 1465.50598f);
    pathB.close();
    pathB.moveTo(980.900024f, 1474.328f);
    pathB.cubicTo(980.900024f, 1474.328f, 978.893005f, 1471.95703f, 981.791016f, 1469.48706f);
    pathB.cubicTo(981.791016f, 1469.48596f, 983.358032f, 1472.729f, 980.900024f, 1474.328f);
    pathB.close();
    pathB.moveTo(980.968994f, 1478.18005f);
    pathB.cubicTo(980.968994f, 1478.18005f, 979.718018f, 1475.66199f, 983.632019f, 1473.87805f);
    pathB.cubicTo(983.632019f, 1473.87805f, 984.229004f, 1477.80103f, 980.968994f, 1478.18005f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_narayana_publishers_com_194(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1083.34314f, 445.65686f);
    path.quadTo(1081, 443.313721f, 1081, 440);
    path.lineTo(1257, 440);
    path.quadTo(1257, 443.313721f, 1254.65686f, 445.65686f);
    path.quadTo(1252.31372f, 448, 1249, 448);
    path.lineTo(1089, 448);
    path.quadTo(1085.68628f, 448, 1083.34314f, 445.65686f);
    path.close();
    path.moveTo(1083, 441);
    path.lineTo(1255, 441);
    path.quadTo(1255, 443.071075f, 1253.53552f, 444.535522f);
    path.quadTo(1252.07104f, 446, 1250, 446);
    path.lineTo(1088, 446);
    path.quadTo(1085.92896f, 446, 1084.46448f, 444.535522f);
    path.quadTo(1083, 443.071075f, 1083, 441);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1081, 440);
    pathB.lineTo(1082, 440);
    pathB.lineTo(1090.01001f, 448);
    pathB.lineTo(1081, 448);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_cooksnaps_com_17(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(170.340179f, 176);
    path.lineTo(166, 176);
    path.quadTo(161.964188f, 176, 158.299957f, 176.896912f);
    path.quadTo(154.678162f, 177.952271f, 151.183014f, 179.9702f);
    path.lineTo(150.316986f, 180.4702f);
    path.quadTo(146.175812f, 182.861099f, 143.115921f, 186.081696f);
    path.quadTo(140.693939f, 188.70134f, 138.99472f, 191.620407f);
    path.quadTo(137.316833f, 194.550888f, 136.259338f, 197.957367f);
    path.quadTo(135, 202.217865f, 135, 207);
    path.lineTo(135, 208);
    path.quadTo(135, 212.035751f, 135.896912f, 215.699997f);
    path.quadTo(136.952286f, 219.321869f, 138.9702f, 222.816986f);
    path.lineTo(139.4702f, 223.683014f);
    path.quadTo(141.861099f, 227.824188f, 145.081696f, 230.884079f);
    path.quadTo(147.70134f, 233.306061f, 150.620407f, 235.00528f);
    path.quadTo(153.550888f, 236.683167f, 156.957367f, 237.740662f);
    path.quadTo(161.217865f, 239, 166, 239);
    path.lineTo(170.482162f, 239);
    path.quadTo(176.307037f, 238.210968f, 181.816986f, 235.0298f);
    path.lineTo(182.683014f, 234.5298f);
    path.quadTo(182.686462f, 234.527817f, 182.689896f, 234.525818f);
    path.quadTo(193.804352f, 228.105652f, 197.126709f, 215.70639f);
    path.quadTo(200.450104f, 203.303314f, 194.0298f, 192.183014f);
    path.lineTo(193.5298f, 191.316986f);
    path.quadTo(187.109497f, 180.196686f, 174.706406f, 176.873276f);
    path.quadTo(172.503067f, 176.282898f, 170.340179f, 176);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(139.4702f, 223.683014f);
    pathB.lineTo(138.9702f, 222.816986f);
    pathB.quadTo(132.549896f, 211.696686f, 135.873291f, 199.293594f);
    pathB.quadTo(139.196686f, 186.890503f, 150.316986f, 180.4702f);
    pathB.lineTo(151.183014f, 179.9702f);
    pathB.quadTo(162.303314f, 173.549896f, 174.706406f, 176.873276f);
    pathB.quadTo(187.109497f, 180.196686f, 193.5298f, 191.316986f);
    pathB.lineTo(194.0298f, 192.183014f);
    pathB.quadTo(200.450104f, 203.303314f, 197.126709f, 215.70639f);
    pathB.quadTo(193.803314f, 228.109497f, 182.683014f, 234.5298f);
    pathB.lineTo(181.816986f, 235.0298f);
    pathB.quadTo(170.696686f, 241.450104f, 158.293594f, 238.126709f);
    pathB.quadTo(145.890503f, 234.803314f, 139.4702f, 223.683014f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_swapspacesystems_com_5(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(819.050781f, 5539.72412f);
    path.quadTo(819.651672f, 5539.1543f, 820.479858f, 5539.17578f);
    path.lineTo(1191.35278f, 5548.8877f);
    path.quadTo(1192.18091f, 5548.90918f, 1192.7511f, 5549.50977f);
    path.quadTo(1193.32141f, 5550.11133f, 1193.29968f, 5550.93945f);
    path.lineTo(1186.57214f, 5807.85107f);
    path.quadTo(1186.55054f, 5808.6792f, 1185.94958f, 5809.24951f);
    path.quadTo(1185.34863f, 5809.81982f, 1184.52051f, 5809.79834f);
    path.lineTo(813.647705f, 5800.08643f);
    path.quadTo(812.819519f, 5800.06494f, 812.249268f, 5799.46387f);
    path.quadTo(811.679016f, 5798.86279f, 811.700684f, 5798.03467f);
    path.lineTo(818.428162f, 5541.12305f);
    path.quadTo(818.44989f, 5540.29492f, 819.050781f, 5539.72412f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(818.48053f, 5539.12354f);
    pathB.lineTo(1193.35205f, 5548.93994f);
    pathB.lineTo(1186.5199f, 5809.85059f);
    pathB.lineTo(811.648376f, 5800.03418f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_kitcheninspirations_wordpress_com_66(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(47.1666679f, 27820.668f);
    path.lineTo(60.8333359f, 27820.668f);
    path.lineTo(60.8333359f, 27820.498f);
    path.lineTo(47.1666679f, 27820.5f);
    path.lineTo(47.1666679f, 27820.668f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(47.1666679f, 27820.668f);
    pathB.lineTo(47.1666679f, 27820.498f);
    pathB.lineTo(60.8333359f, 27820.5f);
    pathB.lineTo(60.8333359f, 27820.668f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_etiqadd_com_2464(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(630.378662f, 1293.42896f);
    path.quadTo(631.257385f, 1292.55029f, 632.5f, 1292.55029f);
    path.quadTo(633.742615f, 1292.55029f, 634.621338f, 1293.42896f);
    path.lineTo(639.571045f, 1298.37866f);
    path.quadTo(640.449768f, 1299.25732f, 640.449707f, 1300.5f);
    path.quadTo(640.449768f, 1301.74268f, 639.571045f, 1302.62134f);
    path.lineTo(634.621338f, 1307.57104f);
    path.quadTo(633.742615f, 1308.44971f, 632.5f, 1308.44971f);
    path.quadTo(631.257385f, 1308.44971f, 630.378662f, 1307.57104f);
    path.lineTo(625.428955f, 1302.62134f);
    path.quadTo(624.550232f, 1301.74268f, 624.550293f, 1300.5f);
    path.quadTo(624.550232f, 1299.25732f, 625.428955f, 1298.37866f);
    path.lineTo(630.378662f, 1293.42896f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(632.5f, 1291.30762f);
    pathB.lineTo(641.692383f, 1300.5f);
    pathB.lineTo(632.5f, 1309.69238f);
    pathB.lineTo(623.307617f, 1300.5f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_narayana_verlag_de_194(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1083.34314f, 513.65686f);
    path.quadTo(1081, 511.313721f, 1081, 508);
    path.lineTo(1257, 508);
    path.quadTo(1257, 511.313721f, 1254.65686f, 513.65686f);
    path.quadTo(1252.31372f, 516, 1249, 516);
    path.lineTo(1089, 516);
    path.quadTo(1085.68628f, 516, 1083.34314f, 513.65686f);
    path.close();
    path.moveTo(1083, 509);
    path.lineTo(1255, 509);
    path.quadTo(1255, 511.071075f, 1253.53552f, 512.535522f);
    path.quadTo(1252.07104f, 514, 1250, 514);
    path.lineTo(1088, 514);
    path.quadTo(1085.92896f, 514, 1084.46448f, 512.535522f);
    path.quadTo(1083, 511.071075f, 1083, 509);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1081, 508);
    pathB.lineTo(1082, 508);
    pathB.lineTo(1090.01001f, 516);
    pathB.lineTo(1081, 516);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_americascup_com_108(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(999.454102f, 689.17157f);
    path.quadTo(1001.172f, 688, 1002.82886f, 688);
    path.lineTo(1013.82886f, 688);
    path.lineTo(1002.17114f, 713);
    path.lineTo(991.171143f, 713);
    path.quadTo(989.514282f, 713, 988.889038f, 711.82843f);
    path.quadTo(988.263794f, 710.65686f, 989.036377f, 709);
    path.lineTo(996.963623f, 692);
    path.quadTo(997.736206f, 690.34314f, 999.454102f, 689.17157f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(998.828857f, 688);
    pathB.lineTo(1013.82886f, 688);
    pathB.lineTo(1002.17114f, 713);
    pathB.lineTo(987.171143f, 713);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_vantageproduction_com_109(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(794.514709f, 759.485291f);
    path.quadTo(791, 755.970581f, 791, 751);
    path.lineTo(1133, 751);
    path.quadTo(1133, 755.970581f, 1129.48523f, 759.485291f);
    path.quadTo(1125.97058f, 763, 1121, 763);
    path.lineTo(803, 763);
    path.quadTo(798.029419f, 763, 794.514709f, 759.485291f);
    path.close();
    path.moveTo(793, 752);
    path.lineTo(1131, 752);
    path.quadTo(1131, 755.727905f, 1128.36401f, 758.363953f);
    path.quadTo(1125.72791f, 761, 1122, 761);
    path.lineTo(802, 761);
    path.quadTo(798.272095f, 761, 795.636047f, 758.363953f);
    path.quadTo(793, 755.727905f, 793, 752);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(791, 751);
    pathB.lineTo(792, 751);
    pathB.lineTo(804.01001f, 763);
    pathB.lineTo(791, 763);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_aceinfographics_com_106(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(166.878677f, 7638.87891f);
    path.quadTo(166, 7639.75732f, 166, 7641);
    path.lineTo(166, 11577);
    path.quadTo(166, 11578.2422f, 166.878677f, 11579.1211f);
    path.quadTo(167.388f, 11579.6309f, 168.019989f, 11579.8447f);
    path.lineTo(168.019974f, 11576.2979f);
    path.quadTo(168, 11576.1533f, 168, 11576);
    path.lineTo(168, 7642);
    path.lineTo(168.000015f, 7641.99316f);
    path.lineTo(168, 7640);
    path.lineTo(166.878677f, 7638.87891f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(166, 7638);
    pathB.lineTo(168.020004f, 7635.97998f);
    pathB.lineTo(168, 11578);
    pathB.lineTo(166, 11580);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_tcmevents_org_13(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(465.951904f, 547.960144f);
    path.quadTo(465.66571f, 546.867371f, 465.404938f, 546);
    path.lineTo(465.504089f, 546);
    path.quadTo(465.670349f, 546.601257f, 465.84668f, 547.288391f);
    path.quadTo(467.274506f, 552.852356f, 468.506836f, 560.718567f);
    path.quadTo(467.336121f, 553.24585f, 465.951904f, 547.960144f);
    path.close();
    path.moveTo(470.591064f, 574.024353f);
    path.quadTo(474.844055f, 601.176025f, 471.728271f, 620.364502f);
    path.quadTo(470.567017f, 627.515991f, 468.635742f, 632);
    path.lineTo(469.106812f, 632);
    path.quadTo(470.791504f, 627.638672f, 471.833496f, 621.036255f);
    path.quadTo(474.905701f, 601.569519f, 470.591064f, 574.024353f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(322.992462f, 541.475708f);
    pathB.lineTo(465.531616f, 541.724426f);
    pathB.lineTo(468.507751f, 560.724426f);
    pathB.lineTo(325.968597f, 560.475708f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_paseoitaigara_com_br_56(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(633.147217f, 1247);
    path.lineTo(718, 1162.14722f);
    path.lineTo(802.852783f, 1247);
    path.lineTo(718, 1331.85278f);
    path.lineTo(633.147217f, 1247);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(635.268494f, 1244.87866f);
    pathB.lineTo(715.878662f, 1164.26855f);
    pathB.quadTo(716.757385f, 1163.38989f, 718, 1163.38989f);
    pathB.quadTo(719.242615f, 1163.38989f, 720.121338f, 1164.26855f);
    pathB.lineTo(800.731506f, 1244.87866f);
    pathB.quadTo(801.610168f, 1245.75732f, 801.610168f, 1247);
    pathB.quadTo(801.610229f, 1248.24268f, 800.731445f, 1249.12134f);
    pathB.lineTo(720.121338f, 1329.73145f);
    pathB.quadTo(719.242676f, 1330.61011f, 718, 1330.61011f);
    pathB.quadTo(716.757385f, 1330.61011f, 715.878723f, 1329.73145f);
    pathB.lineTo(635.268555f, 1249.12134f);
    pathB.quadTo(634.389832f, 1248.24268f, 634.389832f, 1247);
    pathB.quadTo(634.389832f, 1245.75732f, 635.268494f, 1244.87866f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_mortgagemarketguide_com_109(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(816.514709f, 781.485291f);
    path.quadTo(813, 777.970581f, 813, 773);
    path.lineTo(1133, 773);
    path.quadTo(1133, 777.970581f, 1129.48523f, 781.485291f);
    path.quadTo(1125.97058f, 785, 1121, 785);
    path.lineTo(825, 785);
    path.quadTo(820.029419f, 785, 816.514709f, 781.485291f);
    path.close();
    path.moveTo(815, 774);
    path.lineTo(1131, 774);
    path.quadTo(1131, 777.727905f, 1128.36401f, 780.363953f);
    path.quadTo(1125.72791f, 783, 1122, 783);
    path.lineTo(824, 783);
    path.quadTo(820.272095f, 783, 817.636047f, 780.363953f);
    path.quadTo(815, 777.727905f, 815, 774);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(813, 773);
    pathB.lineTo(814, 773);
    pathB.lineTo(826.01001f, 785);
    pathB.lineTo(813, 785);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void (*firstTest)(skiatest::Reporter* , const char* filename) = 0;

static struct TestDesc tests[] = {
    TEST(skpwww_wartepop_blogspot_com_br_6),
    TEST(skpwww_wartepop_blogspot_com_br_6a),
    TEST(skpwww_cooksnaps_com_32a),
    TEST(skpwww_argus_presse_fr_41),
    TEST(skpwww_cooksnaps_com_17),
    TEST(skpwww_cooksnaps_com_32),
    TEST(skpwww_kitcheninspirations_wordpress_com_66),
    TEST(skpwww_tcmevents_org_13),
    TEST(skpwww_narayana_publishers_com_194),
    TEST(skpwww_swapspacesystems_com_5),
    TEST(skpwww_vantageproduction_com_109),
    TEST(skpwww_americascup_com_108),
    TEST(skpwww_narayana_verlag_de_194),
    TEST(skpwww_etiqadd_com_2464),
    TEST(skpwww_paseoitaigara_com_br_56),
    TEST(skpwww_mortgagemarketguide_com_109),
    TEST(skpwww_aceinfographics_com_106),
    TEST(skpwww_educationalcraft_com_4),
    TEST(skpwww_kitcheninspirations_wordpress_com_32),
    TEST(skpwww_artblart_com_8),
    TEST(skpwww_docgelo_com_66),
    TEST(skpwww_uniquefx_net_442),
    TEST(skpwww_defense_studies_blogspot_com_64),
    TEST(skpwww_kenlevine_blogspot_com_28),
    TEST(skpwww_fashionscandal_com_94),
    TEST(skpwww_thaienews_blogspot_com_36),
    TEST(skpwww_galaxystwo_com_4),
    TEST(skpwww_catingueiraonline_com_352),
    TEST(skpwww_evolvehq_com_210),
    TEST(skpwww_odia_com_br_26),
    TEST(skpwww_lokado_de_173),
    TEST(skpwww_seopack_blogspot_com_2153),
    TEST(skpwww_partsdata_de_53),
    TEST(skpwww_simplysaru_com_40),
    TEST(skpwww_jessicaslens_wordpress_com_222),
    TEST(skpwww_kpopexplorer_net_22),
    TEST(skpwww_tunero_de_24),
    TEST(skpwww_karnivool_com_au_11),
    TEST(skpwww_pindosiya_com_99),
    TEST(skpwww_contextualnewsfeeds_com_346),
    TEST(skpwww_helha_be_109),
    TEST(skpwww_phototransferapp_com_24),
    TEST(skpwww_phototransferapp_com_24x),
    TEST(skpwww_gruposejaumdivulgador_com_br_4),
    TEST(skpwww_hubbyscook_com_22),
    TEST(skpwww_maturesupertube_com_21),
    TEST(skpwww_getgold_jp_731),
    TEST(skpwww_trashness_com_36),
    TEST(skpwww_exystence_net_61),
    TEST(skpwww_320kbps_net_2231),
    TEST(skpwww_heartiste_wordpress_com_86),
    TEST(skpwww_hairjobsearch_com_31),
    TEST(skpwww_alucinados_net_101),
    TEST(skpnamecheap_com_405),
    TEST(skpelpais_com_18),
    TEST(skpwww_cityads_ru_249),
    TEST(skpwww_alrakoba_net_62),
    TEST(skpwww_dealnews_com_315),
    TEST(skpwww_inmotionhosting_com_9),
    TEST(skpskpicture14),
    TEST(skpskpicture15),
    TEST(skpwww_meb_gov_tr_6),
    TEST(skpwww_sciality_com_101),
    TEST(skpwww_booking_com_68),
    TEST(skpwww_despegar_com_mx_272),
    TEST(skpwww_lavoixdunord_fr_11),
    TEST(skppptv_com_62),
    TEST(skppchappy_com_au102),
    TEST(skpsciality_com161),
    TEST(skpi_gino_com16),
    TEST(skpnaoxrane_ru23),
    TEST(skptcmevents_org23),
    TEST(skpredbullskatearcade_es16),
    TEST(skpfinanzasdigital_com9),
    TEST(skpgithub_io_26),
    TEST(skpgithub_io_25),
    TEST(skpwww_meb_gov_tr_5),
    TEST(skpwww_sciality_com_100),
    TEST(skpwww_joomla_org_23),
    TEST(skpwww_macrumors_com_131),
    TEST(skpwww_briian_com_34),
    TEST(skpwww_leadpages_net_84),
    TEST(skpwww_fj_p_com_22),
    TEST(skppartainasdemo250_org56),
    TEST(skpsd_graphic_net104),
    TEST(skpbreakmystyle_com10),
    TEST(skpnational_com_au81),
    TEST(skprentacheat_com30),
    TEST(skptracksflow_com9),
    TEST(skpautobutler_dk29),
    TEST(skponlinecollege_org144),
    TEST(skphostloco_com11),
    TEST(skpsergeychunkevich_com8),
    TEST(skpmlk_com326),
    TEST(skpcyclist_friends_gr52),
    TEST(skpfrauen_magazin_com83),
    TEST(skpthesuburbanite_com213),
    TEST(skpsudoestenegocios_com186),
    TEST(skpmtrk_uz27),
    TEST(skpilkoora_com37),
    TEST(skpmm4everfriends_com43),
    TEST(skpflite_com41),
    TEST(skpcheeseandburger_com225),
    TEST(skpeverytechpro_blogspot_com100),
};

static const size_t testCount = SK_ARRAY_COUNT(tests);

static bool runReverse = false;
static void (*stopTest)(skiatest::Reporter* , const char* filename) = 0;

DEF_TEST(PathOpsSkp, reporter) {
#if DEBUG_SHOW_TEST_NAME
    strncpy(DEBUG_FILENAME_STRING, "", DEBUG_FILENAME_STRING_LENGTH);
#endif
    RunTestSet(reporter, tests, testCount, firstTest, stopTest, runReverse);
}
