Lawn Area Calculator — Measure Your Yard Size Accurately

Lawn Area Calculator

Composite area & materials estimate.

Add multiple sections.
Deductions subtract from total.
Total Net Lawn Area
0
square feet
🌱 Grass Seed
New Lawn:
Overseed:
🌿 Sod (Turf)
Rolls Needed:
Pallets (~450sf):
💊 Fertilizer
Nitrogen (N):
Target: 1 lb N / 1k sq ft.
Check bag N-P-K ratio.
🟫 Topsoil (2″ Depth)
Cubic Yards:
For establishing new grade.

 

Taking care of a lawn is easier when you know exactly how big it is. Whether you want to add grass seed, fertilizer, sod, or set up an irrigation system, everything depends on the lawn area. If you guess the size, you may waste money by buying too much or too little material.

A Lawn Area Calculator helps you measure your yard quickly and accurately. Instead of doing complicated math, you just enter a few dimensions, and the tool gives you the total area. This makes lawn care planning simple and stress-free.

Related Calculator:  Total Flow Area Calculator — Sum of Fluid Passage Areas (TFA Tool)

In this guide, you will learn what a lawn area calculator is, how it works, the formulas it uses, and how to apply it with real examples.

What the Lawn Area Calculator Is

A Lawn Area Calculator is an online tool that calculates the surface area of your lawn or yard. It works for both regular shapes like rectangles and circles, and irregular shapes by breaking them into smaller sections.

The calculator helps you:

  • Find the exact lawn size

  • Plan fertilizer and seed amounts

  • Estimate sod or turf needs

  • Prepare irrigation systems

Instead of measuring by eye, you get precise results that help you manage your lawn better.

How the Lawn Area Calculator Works

Inputs You Enter

Most lawn area calculators ask for:

  • Length and width (for rectangles)

  • Radius (for circular areas)

  • Base and height (for triangles)

  • Multiple sections for irregular lawns

You can usually choose the unit, such as feet, meters, or yards.

Calculation Process

The calculator:

  1. Applies the correct area formula for each shape

  2. Adds the areas together

  3. Displays the total lawn area

Output You Get

You receive the total lawn area in square units, such as square feet or square meters.

Key Formulas Used

Rectangle or Square Area

A = l \times w

Circle Area

A = \pi r^2

Triangle Area

A = \frac{1}{2} \times b \times h

These formulas help calculate different sections of your lawn.

Related Calculator:  Subwoofer Cone Area Calculator — Find Your Speaker’s Effective Sd

Step-by-Step Examples

Example 1: Rectangular Lawn

Your lawn is 20 meters long and 10 meters wide.

A = 20 \times 10 = 200 \text{ m}^2

So, your lawn area is 200 square meters.

Example 2: Circular Garden Area

Your garden has a radius of 5 meters.

A = 3.1416 \times 5^2 = 78.54 \text{ m}^2

Example 3: Irregular Lawn

If your lawn has two sections:

  • Rectangle: 15 × 8 = 120 m²

  • Triangle: ½ × 6 × 4 = 12 m²

Total area:

120 + 12 = 132 \text{ m}^2

Features of the Lawn Area Calculator

Fast Results

You get instant calculations.

Multiple Shape Support

Works for rectangles, circles, and triangles.

Unit Flexibility

Choose meters, feet, or yards.

Easy to Use

No math skills needed.

Accurate Planning

Helps avoid overbuying or underbuying.

Uses and Applications

Lawn Care Planning

Know how much fertilizer or seed you need.

Landscaping Projects

Plan sod, grass, or turf installation.

Irrigation Setup

Design proper watering coverage.

Budget Estimation

Avoid wasting money on extra materials.

Garden Design

Measure areas for flower beds and grass zones.

Helpful Tips for Best Results

Measure Carefully

Use a tape or measuring wheel.

Divide Irregular Shapes

Break them into simple sections.

Keep Units Consistent

Do not mix meters and feet.

Double-Check Dimensions

Small mistakes affect the total.

Use Online Maps

Satellite tools can help with large lawns.

Related Calculator:  OSU Area Calculator — Find Your osu! Tablet Active Area

Common Mistakes to Avoid

Guessing the Lawn Size

Always measure instead.

Ignoring Slopes

Steep lawns may need extra material.

Mixing Units

Stick to one system.

Forgetting Extra Areas

Include side yards and corners.

Rounding Too Much

Use accurate numbers.

Frequently Asked Questions

What Is Lawn Area?

It is the total surface covered by grass.

Why Is Lawn Area Important?

It helps with planning and budgeting.

Can I Measure Irregular Lawns?

Yes, by dividing into smaller shapes.

What Units Can I Use?

Feet, meters, or yards.

Is the Calculator Accurate?

Yes, if measurements are correct.

Final Words

The Lawn Area Calculator is a simple but powerful tool for anyone who wants to take better care of their yard. By knowing your exact lawn size, you can plan fertilizer, seed, sod, and irrigation without wasting time or money.

Whether you have a small garden or a large yard, this calculator helps you make smart decisions. Measure carefully, use the formulas, and enjoy a healthier, well-managed lawn.

Similar Posts

  • Hexagon Area Calculator — Instant Area in Square Feet, Meters & More

    Hexagon Area Calculator Hexagon Area Calculator Calculate area of a 6-sided polygon (Hexagon). Supports Regular (s, P, a, R) and Irregular (Coordinate) modes. Calculation Mode Regular Hexagon (Side Length)Regular Hexagon (Perimeter)Regular Hexagon (Apothem)Regular Hexagon (Circumradius)Irregular (Coordinates) Side Length (s) mcmmminftyd Perimeter (P) mcmmminft Apothem (a) mcmmminft Circumradius (R) mcmmminft Enter X,Y for 6 vertices Unit…

  • Area of Function Calculator – Find Area Under Any Curve

    // Base64 Content var b64 = “PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KCjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPHRpdGxlPkFyZWEgb2YgRnVuY3Rpb24gQ2FsY3VsYXRvcjwvdGl0bGU+CiAgICA8c3R5bGU+CiAgICAgICAgOnJvb3QgewogICAgICAgICAgICAtLXByaW1hcnk6ICM2MjAwZWE7CiAgICAgICAgICAgIC8qIERlZXAgUHVycGxlICovCiAgICAgICAgICAgIC0tcHJpbWFyeS1saWdodDogI2IzODhmZjsKICAgICAgICAgICAgLS1zZWNvbmRhcnk6ICMwMGJmYTU7CiAgICAgICAgICAgIC8qIFRlYWwgKi8KICAgICAgICAgICAgLS1iZy1wYWdlOiAjZjlmOWY5OwogICAgICAgICAgICAtLWJnLWNhcmQ6ICNmZmZmZmY7CiAgICAgICAgICAgIC0tdGV4dC1kYXJrOiAjMjEyMTIxOwogICAgICAgICAgICAtLXRleHQtZ3JheTogIzc1NzU3NTsKICAgICAgICAgICAgLS1ib3JkZXI6ICNlMGUwZTA7CiAgICAgICAgICAgIC0tc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgICAgfQoKICAgICAgICAqIHsKICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsIHN5c3RlbS11aSwgc2Fucy1zZXJpZjsKICAgICAgICB9CgogICAgICAgIGJvZHkgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1wYWdlKTsKICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgfQoKICAgICAgICAuY2FsYy1jYXJkIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmctY2FyZCk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdyk7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBtYXgtd2lkdGg6IDc1MHB4OwogICAgICAgICAgICBwYWRkaW5nOiAzMHB4OwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDI1cHg7CiAgICAgICAgfQoKICAgICAgICAuaGVhZGVyIGgyIHsKICAgICAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LWRhcmspOwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICAuaGVhZGVyIHAgewogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LWdyYXkpOwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45NXJlbTsKICAgICAgICB9CgogICAgICAgIC8qIENvbnRleHQgQ29udGV4dCBDb250ZXh0ICovCiAgICAgICAgLmNvbnRleHQtc2VsZWN0b3IgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjNlNWY1OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMWJlZTc7CiAgICAgICAgfQoKICAgICAgICAuY29udGV4dC1sYWJlbCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICBmb250LXNpemU6IDAuODVyZW07CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5KTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIH0KCiAgICAgICAgc2VsZWN0LmZ1bGwtc2VsZWN0IHsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgICAgICAgICAgZm9udC1zaXplOiAxcmVtOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfQoKICAgICAgICAvKiBJbnB1dCBHcmlkICovCiAgICAgICAgLmlucHV0LXJvdyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIH0KCiAgICAgICAgLmlucHV0LWdyb3VwIHsKICAgICAgICAgICAgZmxleDogMTsKICAgICAgICAgICAgbWluLXdpZHRoOiAxODBweDsKICAgICAgICB9CgogICAgICAgIC5pbnB1dC1ncm91cCBsYWJlbCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA2cHg7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LWRhcmspOwogICAgICAgIH0KCiAgICAgICAgLmlucHV0LWJveCB7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIC5wcmVmaXggewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIGxlZnQ6IDEwcHg7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LWdyYXkpOwogICAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgICBmb250LXNpemU6IDEuMXJlbTsKICAgICAgICB9CgogICAgICAgIGlucHV0IHsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDEycHggMTJweCAxMnB4IDQ1cHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGJvcmRlciAwLjJzOwogICAgICAgIH0KCiAgICAgICAgaW5wdXQuc2ltcGxlIHsKICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxMnB4OwogICAgICAgIH0KCiAgICAgICAgaW5wdXQ6Zm9jdXMsCiAgICAgICAgc2VsZWN0OmZvY3VzIHsKICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wcmltYXJ5KTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYmEoOTgsIDAsIDIzNCwgMC4xKTsKICAgICAgICB9CgogICAgICAgIC8qIEJ1dHRvbiAqLwogICAgICAgIGJ1dHRvbi5hY3Rpb24tYnRuIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcHJpbWFyeSk7CiAgICAgICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xczsKICAgICAgICB9CgogICAgICAgIGJ1dHRvbi5hY3Rpb24tYnRuOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzUwMDBkNjsKICAgICAgICB9CgogICAgICAgIGJ1dHRvbi5hY3Rpb24tYnRuOmFjdGl2ZSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpOwogICAgICAgIH0KCiAgICAgICAgLyogR3JhcGggKi8KICAgICAgICAuY2hhcnQtYm94IHsKICAgICAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgICAgfQoKICAgICAgICAubGVnZW5kIHsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBmb250LXNpemU6IDAuODVyZW07CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS10ZXh0LWdyYXkpOwogICAgICAgICAgICBtYXJnaW4tdG9wOiAtMTBweDsKICAgICAgICB9CgogICAgICAgIC8qIFJlc3VsdCAqLwogICAgICAgIC5vdXRjb21lIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2UwZjJmMTsKICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB2YXIoLS1zZWNvbmRhcnkpOwogICAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgICAgIGFuaW1hdGlvbjogc2xpZGVJbiAwLjNzOwogICAgICAgIH0KCiAgICAgICAgLm91dGNvbWUudmlzaWJsZSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIH0KCiAgICAgICAgLnJlc3VsdC1sYWJlbCB7CiAgICAgICAgICAgIGNvbG9yOiAjMDA2OTVjOwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBmb250LXNpemU6IDAuOXJlbTsKICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICB9CgogICAgICAgIC5yZXN1bHQtdmFsIHsKICAgICAgICAgICAgZm9udC1zaXplOiAyLjJyZW07CiAgICAgICAgICAgIGNvbG9yOiAjMDA0ZDQwOwogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgICAgICBtYXJnaW46IDVweCAwIDEwcHggMDsKICAgICAgICB9CgogICAgICAgIC5yZXN1bHQtZXhwbCB7CiAgICAgICAgICAgIGNvbG9yOiAjMDA3OTZiOwogICAgICAgICAgICBmb250LXNpemU6IDAuOTVyZW07CiAgICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsIDEyMSwgMTA3LCAwLjIpOwogICAgICAgICAgICBwYWRkaW5nLXRvcDogMTBweDsKICAgICAgICB9CgogICAgICAgIEBrZXlmcmFtZXMgc2xpZGVJbiB7CiAgICAgICAgICAgIGZyb20gewogICAgICAgICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg1cHgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAuZXJyb3IgewogICAgICAgICAgICBjb2xvcjogI2QzMmYyZjsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBmb250LXNpemU6IDAuOXJlbTsKICAgICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cgo8Ym9keT4KCiAgICA8ZGl2IGNsYXNzPSJjYWxjLWNhcmQiPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxoMj5BcmVhIG9mIEZ1bmN0aW9uIENhbGN1bGF0b3I8L2gyPgogICAgICAgICAgICA8cD5DYWxjdWxhdGUgdGhlIGFjY3VtdWxhdGVkIHZhbHVlIChBcmVhKSBvZiBhIGZ1bmN0aW9uIG92ZXIgYW4gaW50ZXJ2YWwuPC9wPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIEFwcGxpY2F0aW9uIENvbnRleHQgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGV4dC1zZWxlY3RvciI+CiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY29udGV4dC1sYWJlbCI+QXBwbGljYXRpb24gQ29udGV4dDwvbGFiZWw+CiAgICAgICAgICAgIDxzZWxlY3QgaWQ9ImFwcF9jb250ZXh0IiBjbGFzcz0iZnVsbC1zZWxlY3QiIG9uY2hhbmdlPSJ1cGRhdGVDb250ZXh0KCkiPgogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZ2VuZXJpYyI+R2VuZXJpYyBNYXRoIChBcmVhIHVuZGVyIEN1cnZlKTwvb3B0aW9uPgogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idmVsb2NpdHkiPlBoeXNpY3M6IFZlbG9jaXR5IHRvIERpc3RhbmNlPC9vcHRpb24+CiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJncm93dGgiPkVjb25vbWljczogR3Jvd3RoIFJhdGUgdG8gVG90YWwgR3Jvd3RoPC9vcHRpb24+CiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJmbG93Ij5FbmdpbmVlcmluZzogRmxvdyBSYXRlIHRvIFRvdGFsIFZvbHVtZTwvb3B0aW9uPgogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBJbnB1dHMgLS0+CiAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAyMHB4OyI+CiAgICAgICAgICAgICAgICA8bGFiZWwgaWQ9ImxibF9mdW5jIj5GdW5jdGlvbiBmKHgpOjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ib3giPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmVmaXgiPmYoeCk9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZnVuY19pbiIgdmFsdWU9InheMiIgcGxhY2Vob2xkZXI9ImUuZy4geF4yLCBzaW4oeCkiPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtcm93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgaWQ9ImxibF9zdGFydCI+U3RhcnQgKGEpOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InZhbF9hIiBjbGFzcz0ic2ltcGxlIiB2YWx1ZT0iMCI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgaWQ9ImxibF9lbmQiPkVuZCAoYik6PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0idmFsX2IiIGNsYXNzPSJzaW1wbGUiIHZhbHVlPSIzIj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ0biIgaWQ9ImJ0bl9jYWxjIiBvbmNsaWNrPSJjYWxjdWxhdGUoKSI+Q2FsY3VsYXRlIEFjY3VtdWxhdGlvbjwvYnV0dG9uPgogICAgICAgIDxkaXYgY2xhc3M9ImVycm9yIiBpZD0iZXJyb3JfbXNnIj48L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0ib3V0Y29tZSIgaWQ9InJlc3VsdF9ib3giPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXN1bHQtbGFiZWwiIGlkPSJyZXNfbGJsIj5SZXN1bHQ8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVzdWx0LXZhbCIgaWQ9InJlc192YWwiPi0tPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc3VsdC1leHBsIiBpZD0icmVzX2V4cGwiPjwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIFZpc3VhbCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJjaGFydC1ib3giPgogICAgICAgICAgICA8Y2FudmFzIGlkPSJncmFwaENhbnZhcyI+PC9jYW52YXM+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kIiBpZD0ibGVnZW5kX3R4dCI+U2hhZGVkIHJlZ2lvbiByZXByZXNlbnRzIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZTwvZGl2PgoKICAgIDwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAgICAgLyogLS0tIFJvYnVzdCBNYXRoIFBhcnNlciAoQVNUIC0gTm8gRXZhbCkgLS0tICovCiAgICAgICAgY29uc3QgTWF0aEVuZ2luZSA9ICgoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IFRva2VuID0geyBOdW1iZXI6IDEsIElkZW50aWZpZXI6IDIsIE9wZXJhdG9yOiAzLCBMUGFyZW46IDQsIFJQYXJlbjogNSwgRU9GOiA2IH07CiAgICAgICAgICAgIGZ1bmN0aW9uIHRva2VuaXplKHN0cikgewogICAgICAgICAgICAgICAgY29uc3QgdG9rZW5zID0gW107CiAgICAgICAgICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IHN0ci5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyID0gc3RyW2ldOwogICAgICAgICAgICAgICAgICAgIGlmICgvXHMvLnRlc3QoY2hhcikpIHsgaSsrOyBjb250aW51ZTsgfQogICAgICAgICAgICAgICAgICAgIGlmICgvWzAtOS5dLy50ZXN0KGNoYXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW0gPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBzdHIubGVuZ3RoICYmIC9bMC05Ll0vLnRlc3Qoc3RyW2ldKSkgbnVtICs9IHN0cltpKytdOwogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFRva2VuLk51bWJlciwgdmFsdWU6IHBhcnNlRmxvYXQobnVtKSB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9bYS16QS1aXS8udGVzdChjaGFyKSkgewogICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBzdHIubGVuZ3RoICYmIC9bYS16QS1aMC05XS8udGVzdChzdHJbaV0pKSBpZCArPSBzdHJbaSsrXTsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBUb2tlbi5JZGVudGlmaWVyLCB2YWx1ZTogaWQudG9Mb3dlckNhc2UoKSB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCcrLSovXicuaW5jbHVkZXMoY2hhcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBUb2tlbi5PcGVyYXRvciwgdmFsdWU6IGNoYXIgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICcoJykgeyB0b2tlbnMucHVzaCh7IHR5cGU6IFRva2VuLkxQYXJlbiB9KTsgaSsrOyB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hhciA9PT0gJyknKSB7IHRva2Vucy5wdXNoKHsgdHlwZTogVG9rZW4uUlBhcmVuIH0pOyBpKys7IH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGkrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogVG9rZW4uRU9GIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY2xhc3MgUGFyc2VyIHsKICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKHRva2VucykgeyB0aGlzLnRva2VucyA9IHRva2VuczsgdGhpcy5wb3MgPSAwOyB9CiAgICAgICAgICAgICAgICBwZWVrKCkgeyByZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5wb3NdOyB9CiAgICAgICAgICAgICAgICBjb25zdW1lKCkgeyByZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5wb3MrK107IH0KICAgICAgICAgICAgICAgIHBhcnNlRXhwcigpIHsKICAgICAgICAgICAgICAgICAgICBsZXQgbGVmdCA9IHRoaXMucGFyc2VUZXJtKCk7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMucGVlaygpLnZhbHVlID09PSAnKycgfHwgdGhpcy5wZWVrKCkudmFsdWUgPT09ICctJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcCA9IHRoaXMuY29uc3VtZSgpLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0geyB0eXBlOiAnQmluYXJ5Jywgb3AsIGxlZnQsIHJpZ2h0OiB0aGlzLnBhcnNlVGVybSgpIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcGFyc2VUZXJtKCkgewogICAgICAgICAgICAgICAgICAgIGxldCBsZWZ0ID0gdGhpcy5wYXJzZUZhY3RvcigpOwogICAgICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLnBlZWsoKS52YWx1ZSA9PT0gJyonIHx8IHRoaXMucGVlaygpLnZhbHVlID09PSAnLycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3AgPSB0aGlzLmNvbnN1bWUoKS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHsgdHlwZTogJ0JpbmFyeScsIG9wLCBsZWZ0LCByaWdodDogdGhpcy5wYXJzZUZhY3RvcigpIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcGFyc2VGYWN0b3IoKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IGxlZnQgPSB0aGlzLnBhcnNlQmFzZSgpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlZWsoKS52YWx1ZSA9PT0gJ14nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0geyB0eXBlOiAnQmluYXJ5Jywgb3A6ICdeJywgbGVmdCwgcmlnaHQ6IHRoaXMucGFyc2VGYWN0b3IoKSB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHBhcnNlQmFzZSgpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5wZWVrKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHQudHlwZSA9PT0gVG9rZW4uTnVtYmVyKSByZXR1cm4geyB0eXBlOiAnTGl0JywgdmFsdWU6IHRoaXMuY29uc3VtZSgpLnZhbHVlIH07CiAgICAgICAgICAgICAgICAgICAgaWYgKHQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5jb25zdW1lKCkudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlZWsoKS50eXBlID09PSBUb2tlbi5MUGFyZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJnID0gdGhpcy5wYXJzZUV4cHIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogJ0NhbGwnLCBuYW1lLCBhcmcgfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3gnIHx8IG5hbWUgPT09ICd0JykgcmV0dXJuIHsgdHlwZTogJ1ZhcicgfTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdwaScpIHJldHVybiB7IHR5cGU6ICdMaXQnLCB2YWx1ZTogTWF0aC5QSSB9OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2UnKSByZXR1cm4geyB0eXBlOiAnTGl0JywgdmFsdWU6IE1hdGguRSB9OwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAnTGl0JywgdmFsdWU6IDAgfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHQudHlwZSA9PT0gVG9rZW4uTFBhcmVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlID0gdGhpcy5wYXJzZUV4cHIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodC52YWx1ZSA9PT0gJy0nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZSgpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAnVW5hcnknLCBvcDogJy0nLCBhcmc6IHRoaXMucGFyc2VCYXNlKCkgfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7IHJldHVybiB7IHR5cGU6ICdMaXQnLCB2YWx1ZTogMCB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcGFyc2UoKSB7IHJldHVybiB0aGlzLnBhcnNlRXhwcigpOyB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZ1bmN0aW9uIGV2YWxOb2RlKG4sIHgpIHsKICAgICAgICAgICAgICAgIGlmICghbikgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICBpZiAobi50eXBlID09PSAnTGl0JykgcmV0dXJuIG4udmFsdWU7CiAgICAgICAgICAgICAgICBpZiAobi50eXBlID09PSAnVmFyJykgcmV0dXJuIHg7CiAgICAgICAgICAgICAgICBpZiAobi50eXBlID09PSAnQmluYXJ5JykgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBldmFsTm9kZShuLmxlZnQsIHgpLCByID0gZXZhbE5vZGUobi5yaWdodCwgeCk7CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuLm9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJysnOiByZXR1cm4gbCArIHI7IGNhc2UgJy0nOiByZXR1cm4gbCAtIHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyonOiByZXR1cm4gbCAqIHI7IGNhc2UgJy8nOiByZXR1cm4gbCAvIHI7IGNhc2UgJ14nOiByZXR1cm4gTWF0aC5wb3cobCwgcik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG4udHlwZSA9PT0gJ1VuYXJ5JykgcmV0dXJuIC1ldmFsTm9kZShuLmFyZywgeCk7CiAgICAgICAgICAgICAgICBpZiAobi50eXBlID09PSAnQ2FsbCcpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gZXZhbE5vZGUobi5hcmcsIHgpOwogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobi5uYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Npbic6IHJldHVybiBNYXRoLnNpbihhKTsgY2FzZSAnY29zJzogcmV0dXJuIE1hdGguY29zKGEpOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0YW4nOiByZXR1cm4gTWF0aC50YW4oYSk7IGNhc2UgJ3NxcnQnOiByZXR1cm4gTWF0aC5zcXJ0KGEpOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhYnMnOiByZXR1cm4gTWF0aC5hYnMoYSk7IGNhc2UgJ2xuJzogcmV0dXJuIE1hdGgubG9nKGEpOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdleHAnOiByZXR1cm4gTWF0aC5leHAoYSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjb21waWxlOiAoc3RyKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9rZW5zID0gdG9rZW5pemUoc3RyKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcih0b2tlbnMpOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhc3QgPSBwYXJzZXIucGFyc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh4KSA9PiBldmFsTm9kZShhc3QsIHgpOwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICB9KSgpOwoKICAgICAgICAvKiAtLS0gTG9naWMgLS0tICovCiAgICAgICAgY29uc3QgY3R4TGFiZWxzID0gewogICAgICAgICAgICBnZW5lcmljOiB7IGZ1bmM6ICJGdW5jdGlvbiBmKHgpOiIsIHN0YXJ0OiAiU3RhcnQgKGEpOiIsIGVuZDogIkVuZCAoYik6IiwgcmVzOiAiTmV0IEFyZWEiLCBidG46ICJDYWxjdWxhdGUgQXJlYSIsIHg6ICJ4IiwgeTogImYoeCkiIH0sCiAgICAgICAgICAgIHZlbG9jaXR5OiB7IGZ1bmM6ICJWZWxvY2l0eSB2KHQpOiIsIHN0YXJ0OiAiU3RhcnQgVGltZSAodDEpOiIsIGVuZDogIkVuZCBUaW1lICh0Mik6IiwgcmVzOiAiVG90YWwgRGlzdGFuY2UgKE5ldCkiLCBidG46ICJDYWxjdWxhdGUgRGlzdGFuY2UiLCB4OiAiVGltZSAodCkiLCB5OiAiVmVsb2NpdHkgKHYpIiB9LAogICAgICAgICAgICBncm93dGg6IHsgZnVuYzogIkdyb3d0aCBSYXRlIHIodCk6Iiwgc3RhcnQ6ICJTdGFydCBUaW1lOiIsIGVuZDogIkVuZCBUaW1lOiIsIHJlczogIlRvdGFsIEdyb3d0aCIsIGJ0bjogIkNhbGN1bGF0ZSBHcm93dGgiLCB4OiAiVGltZSIsIHk6ICJSYXRlIiB9LAogICAgICAgICAgICBmbG93OiB7IGZ1bmM6ICJGbG93IFJhdGUgZih0KToiLCBzdGFydDogIlN0YXJ0IFRpbWU6IiwgZW5kOiAiRW5kIFRpbWU6IiwgcmVzOiAiVG90YWwgVm9sdW1lIiwgYnRuOiAiQ2FsY3VsYXRlIFZvbHVtZSIsIHg6ICJUaW1lIiwgeTogIkZsb3cgUmF0ZSIgfQogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQoKSB7CiAgICAgICAgICAgIGNvbnN0IHZhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHBfY29udGV4dCcpLnZhbHVlOwogICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBjdHhMYWJlbHNbdmFsXTsKCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYmxfZnVuYycpLmlubmVyVGV4dCA9IGxhYmVscy5mdW5jOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsX3N0YXJ0JykuaW5uZXJUZXh0ID0gbGFiZWxzLnN0YXJ0OwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsX2VuZCcpLmlubmVyVGV4dCA9IGxhYmVscy5lbmQ7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG5fY2FsYycpLmlubmVyVGV4dCA9IGxhYmVscy5idG47CgogICAgICAgICAgICAvLyBVcGRhdGUgcGxhY2Vob2xkZXIgbG9naWMgaWYgbmVlZGVkCiAgICAgICAgICAgIGNhbGN1bGF0ZSgpOyAvLyBDaGVjayBpZiB2YWxpZCB0byBhdXRvLXJlZHJhdwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gYWRhcHRpdmVTaW1wc29ucyhmLCBhLCBiLCBlcHMgPSAxZS01KSB7CiAgICAgICAgICAgIGNvbnN0IG1pZCA9IChhICsgYikgLyAyLCBoID0gKGIgLSBhKSAvIDI7CiAgICAgICAgICAgIGNvbnN0IFMgPSAoaCAvIDMpICogKGYoYSkgKyA0ICogZihtaWQpICsgZihiKSk7CiAgICAgICAgICAgIGZ1bmN0aW9uIHJlYyhsLCByLCBlcHMsIFNfd2hvbGUsIGQpIHsKICAgICAgICAgICAgICAgIGlmIChkID4gMTIpIHJldHVybiBTX3dob2xlOwogICAgICAgICAgICAgICAgY29uc3QgbSA9IChsICsgcikgLyAyLCBoID0gKHIgLSBsKSAvIDI7CiAgICAgICAgICAgICAgICBjb25zdCBMUyA9IChoIC8gNikgKiAoZihsKSArIDQgKiBmKChsICsgbSkgLyAyKSArIGYobSkpOwogICAgICAgICAgICAgICAgY29uc3QgUlMgPSAoaCAvIDYpICogKGYobSkgKyA0ICogZigobSArIHIpIC8gMikgKyBmKHIpKTsKICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhMUyArIFJTIC0gU193aG9sZSkgPD0gMTUgKiBlcHMpIHJldHVybiBMUyArIFJTICsgKExTICsgUlMgLSBTX3dob2xlKSAvIDE1OwogICAgICAgICAgICAgICAgcmV0dXJuIHJlYyhsLCBtLCBlcHMgLyAyLCBMUywgZCArIDEpICsgcmVjKG0sIHIsIGVwcyAvIDIsIFJTLCBkICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlYyhhLCBiLCBlcHMsIFMsIDApOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gY2FsY3VsYXRlKCkgewogICAgICAgICAgICBjb25zdCBzdHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnVuY19pbicpLnZhbHVlOwogICAgICAgICAgICBjb25zdCBhID0gcGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmFsX2EnKS52YWx1ZSk7CiAgICAgICAgICAgIGNvbnN0IGIgPSBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2YWxfYicpLnZhbHVlKTsKCiAgICAgICAgICAgIGNvbnN0IGYgPSBNYXRoRW5naW5lLmNvbXBpbGUoc3RyKTsKICAgICAgICAgICAgY29uc3QgZXJyQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yX21zZycpOwoKICAgICAgICAgICAgaWYgKCFmIHx8IGlzTmFOKGYoMSkpKSB7CiAgICAgICAgICAgICAgICBlcnJCb3guc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgICAgICAgICBlcnJCb3guaW5uZXJUZXh0ID0gIkludmFsaWQgZnVuY3Rpb24gc3ludGF4LiBUcnkgJ3heMicgb3IgJ3Npbih4KScuIjsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJCb3guc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCiAgICAgICAgICAgIGNvbnN0IGFyZWEgPSBhZGFwdGl2ZVNpbXBzb25zKGYsIGEsIGIpOwoKICAgICAgICAgICAgLy8gT3V0cHV0CiAgICAgICAgICAgIGNvbnN0IGN0eFZhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHBfY29udGV4dCcpLnZhbHVlOwogICAgICAgICAgICBjb25zdCByZXNCb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0X2JveCcpOwogICAgICAgICAgICByZXNCb3guY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpOwoKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc19sYmwnKS5pbm5lclRleHQgPSBjdHhMYWJlbHNbY3R4VmFsXS5yZXM7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNfdmFsJykuaW5uZXJUZXh0ID0gYXJlYS50b0ZpeGVkKDQpOwoKICAgICAgICAgICAgLy8gRXhwbGFuYXRpb24KICAgICAgICAgICAgbGV0IHR4dCA9ICIiOwogICAgICAgICAgICBpZiAoY3R4VmFsID09PSAndmVsb2NpdHknKSB7CiAgICAgICAgICAgICAgICB0eHQgPSBgVGhlIGFyZWEgdW5kZXIgdGhlIHZlbG9jaXR5IGdyYXBoIHJlcHJlc2VudHMgZGlzcGxhY2VtZW50LiBUb3RhbCBkaXNwbGFjZW1lbnQgaXMgJHthcmVhLnRvRml4ZWQoMil9IHVuaXRzLmA7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3R4VmFsID09PSAnZ3Jvd3RoJykgewogICAgICAgICAgICAgICAgdHh0ID0gYEFjY3VtdWxhdGluZyB0aGUgcmF0ZSBvdmVyIHRpbWUgZ2l2ZXMgYSB0b3RhbCBncm93dGggb2YgJHthcmVhLnRvRml4ZWQoMil9LmA7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0eHQgPSBgVGhlIG5ldCBhcmVhIGJvdW5kZWQgYnkgZih4KSBhbmQgdGhlIHgtYXhpcyBmcm9tICR7YX0gdG8gJHtifS5gOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNfZXhwbCcpLmlubmVyVGV4dCA9IHR4dDsKCiAgICAgICAgICAgIGRyYXcoZiwgYSwgYiwgY3R4VmFsKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGRyYXcoZiwgYSwgYiwgY3R4VmFsKSB7CiAgICAgICAgICAgIGNvbnN0IGN2cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdncmFwaENhbnZhcycpOwogICAgICAgICAgICBjb25zdCBjdHggPSBjdnMuZ2V0Q29udGV4dCgnMmQnKTsKICAgICAgICAgICAgY29uc3QgdyA9IGN2cy5wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoOwogICAgICAgICAgICBjb25zdCBoID0gY3ZzLnBhcmVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OwogICAgICAgICAgICBjdnMud2lkdGggPSB3OyBjdnMuaGVpZ2h0ID0gaDsKCiAgICAgICAgICAgIC8vIFZpZXdwb3J0CiAgICAgICAgICAgIGxldCBtaW5YID0gTWF0aC5taW4oYSwgYiksIG1heFggPSBNYXRoLm1heChhLCBiKTsKICAgICAgICAgICAgY29uc3QgcGFkID0gKG1heFggLSBtaW5YKSAqIDAuMiB8fCAyOwogICAgICAgICAgICBtaW5YIC09IHBhZDsgbWF4WCArPSBwYWQ7CiAgICAgICAgICAgIGNvbnN0IHJhbmdlWCA9IG1heFggLSBtaW5YOwoKICAgICAgICAgICAgLy8gWSByYW5nZQogICAgICAgICAgICBsZXQgbWluWSA9IDAsIG1heFkgPSAwOwogICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSA1MDsgaSsrKSB7CiAgICAgICAgICAgICAgICBjb25zdCB4ID0gbWluWCArIChyYW5nZVggKiBpIC8gNTApOwogICAgICAgICAgICAgICAgY29uc3QgeSA9IGYoeCk7CiAgICAgICAgICAgICAgICBpZiAoaXNGaW5pdGUoeSkpIHsKICAgICAgICAgICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgeSk7CiAgICAgICAgICAgICAgICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChtYXhZIDwgMC4xKSBtYXhZID0gMTsKICAgICAgICAgICAgaWYgKG1pblkgPiAtMC4xKSBtaW5ZID0gLTE7CiAgICAgICAgICAgIGNvbnN0IHJhbmdlWSA9IChtYXhZIC0gbWluWSkgKiAxLjQ7IC8vIGJyZWF0aGluZyByb29tCiAgICAgICAgICAgIGNvbnN0IG1pZFkgPSAobWF4WSArIG1pblkpIC8gMjsKCiAgICAgICAgICAgIGNvbnN0IHRvQ3ggPSAoeCkgPT4gKHggLSBtaW5YKSAvIHJhbmdlWCAqIHc7CiAgICAgICAgICAgIGNvbnN0IHRvQ3kgPSAoeSkgPT4gaCAtICh5IC0gKG1pZFkgLSByYW5nZVkgLyAyKSkgLyByYW5nZVkgKiBoOwoKICAgICAgICAgICAgLy8gQXhlcwogICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSAnI2JkYmRiZCc7CiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAxOwogICAgICAgICAgICBjb25zdCBvcmlnaW5ZID0gdG9DeSgwKTsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOyBjdHgubW92ZVRvKDAsIG9yaWdpblkpOyBjdHgubGluZVRvKHcsIG9yaWdpblkpOyBjdHguc3Ryb2tlKCk7CiAgICAgICAgICAgIGNvbnN0IG9yaWdpblggPSB0b0N4KDApOwogICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7IGN0eC5tb3ZlVG8ob3JpZ2luWCwgMCk7IGN0eC5saW5lVG8ob3JpZ2luWCwgaCk7IGN0eC5zdHJva2UoKTsKCiAgICAgICAgICAgIC8vIExhYmVscwogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyM2MTYxNjEnOwogICAgICAgICAgICBjdHguZm9udCA9ICcxMnB4IFNlZ29lIFVJJzsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KGN0eExhYmVsc1tjdHhWYWxdLngsIHcgLSA1MCwgb3JpZ2luWSAtIDUpOwogICAgICAgICAgICBjdHguZmlsbFRleHQoY3R4TGFiZWxzW2N0eFZhbF0ueSwgb3JpZ2luWCArIDUsIDIwKTsKCiAgICAgICAgICAgIC8vIEFyZWEKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGN0eFZhbCA9PT0gJ3ZlbG9jaXR5JyA/ICdyZ2JhKDAsIDE5MSwgMTY1LCAwLjIpJyA6ICdyZ2JhKDk4LCAwLCAyMzQsIDAuMTUpJzsKICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbihhLCBiKSwgZW5kID0gTWF0aC5tYXgoYSwgYik7CiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSAoZW5kIC0gc3RhcnQpIC8gMTAwOwoKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICBsZXQgZmlyc3QgPSB0cnVlOwogICAgICAgICAgICBmb3IgKGxldCB4ID0gc3RhcnQ7IHggPD0gZW5kOyB4ICs9IHN0ZXApIHsKICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBmKHgpOwogICAgICAgICAgICAgICAgY29uc3QgY3ggPSB0b0N4KHgpLCBjeSA9IHRvQ3koeSk7CiAgICAgICAgICAgICAgICBpZiAoZmlyc3QpIHsgY3R4Lm1vdmVUbyhjeCwgb3JpZ2luWSk7IGN0eC5saW5lVG8oY3gsIGN5KTsgZmlyc3QgPSBmYWxzZTsgfQogICAgICAgICAgICAgICAgZWxzZSBjdHgubGluZVRvKGN4LCBjeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3R4LmxpbmVUbyh0b0N4KGVuZCksIG9yaWdpblkpOwogICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7CiAgICAgICAgICAgIGN0eC5maWxsKCk7CgogICAgICAgICAgICAvLyBDdXJ2ZQogICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjdHhWYWwgPT09ICd2ZWxvY2l0eScgPyAnIzAwYmZhNScgOiAnIzYyMDBlYSc7CiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAyOwogICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgIGZpcnN0ID0gdHJ1ZTsKICAgICAgICAgICAgY29uc3QgZHJhd1N0ZXAgPSByYW5nZVggLyAyMDA7CiAgICAgICAgICAgIGZvciAobGV0IHggPSBtaW5YOyB4IDw9IG1heFg7IHggKz0gZHJhd1N0ZXApIHsKICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBmKHgpOwogICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZSh5KSkgY29udGludWU7CiAgICAgICAgICAgICAgICBjb25zdCBjeCA9IHRvQ3goeCksIGN5ID0gdG9DeSh5KTsKICAgICAgICAgICAgICAgIGlmIChmaXJzdCkgeyBjdHgubW92ZVRvKGN4LCBjeSk7IGZpcnN0ID0gZmFsc2U7IH0KICAgICAgICAgICAgICAgIGVsc2UgY3R4LmxpbmVUbyhjeCwgY3kpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKICAgICAgICB9CgogICAgICAgIC8vIEluaXQKICAgICAgICBjYWxjdWxhdGUoKTsKCiAgICA8L3NjcmlwdD4KCjwvYm9keT4KCjwvaHRtbD4=”; var htmlContent = “”; try { htmlContent = atob(b64); } catch (e) { console.error(“Base64 decode failed”, e); wrapper.innerHTML = ” Error loading calculator. “; return; } // Create Iframe var iframe = document.createElement(‘iframe’); iframe.style.width = “100%”; iframe.style.border = “none”; iframe.style.overflow = “hidden”; iframe.scrolling = “no”; iframe.style.minHeight = “400px”;…

  • Built‑Up Area Calculator — Estimate Your Property’s Constructed Space

    Built Up Area Calculator Built Up Area Calculator Convert Metrics & Visualize Usable vs Saleable Area Forward (Carpet → Super) Reverse (Super → Carpet) Carpet Area ft² m² ft² Loading Factor (%) (Common Area Share) % Wall Area (%) % Balcony Area (Lump sum) ft² Area Composition Super Built-up 0 Built-up 0 Carpet 0 Key…

  • Dodecagon Area Calculator – Quick & Accurate 12-Sided Polygon Area Tool

    Dodecagon Area Calc Regular 12-Sided Polygon & Coordinate Mode Mode Regular dodecagon (side s)Regular dodecagon (perimeter P)Regular dodecagon (apothem a)Regular dodecagon (circumradius R)Coordinates (12 vertices)Triangulation (center fan) Precision 4 decimals2 decimals6 decimals Formula A = 3·s²·(2+√3) Side length s mcmft Perimeter P mcmft Apothem a mcmft Circumradius R mcmft Enter 12 vertices or drag points….

  • Open Area Calculator – Measure Your Open Space Quickly

    Open Area Calculator Open Area Calculator For Perforated Metal, Wire Mesh & Screens Measurement Unit Inches (in) Millimeters (mm) Hole Shape Round Hole (60° Staggered)Round Hole (45° Staggered)Round Hole (Straight 90°)Square Hole (Straight)Square Hole (Staggered) Hole Diameter (D) Center-to-Center Pitch (P) 40.3% Open Area Holes per sq: –   Open spaces are everywhere around us….