// Copyright 2020 Google LLC.
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
#include "tools/fiddle/examples.h"
REG_FIDDLE(crbug_663246, 384, 256, false, 0) {
void draw(SkCanvas* canvas) {
    SkPaint p;
    p.setAntiAlias(true);
    p.setStyle(SkPaint::kStroke_Style);
    canvas->scale(0.5, 0.5);

    p.setStrokeWidth(195.23635741822847);
    SkPathBuilder path;
    path.moveTo(488, 182.10368918639688);
    path.cubicTo(572, 182.10368918639688, 572, 97.61817870911423, 655, 97.61817870911423);
    p.setColor(SK_ColorGREEN);
    canvas->drawPath(path.detach(), p);

    p.setStrokeWidth(504.6189756548017);
    path.reset();
    path.moveTo(20, 252.30948782740091);
    path.cubicTo(31, 252.30948782740091, 31, 278.79312771879796, 41, 278.79312771879796);
    p.setColor(SK_ColorRED);
    canvas->drawPath(path.detach(), p);
}
}  // END FIDDLE
