Triangle Area Calculator — Base & Height Geometry Tool

 

Triangles are one of the most common shapes in geometry. You see them in buildings, bridges, road signs, art designs, and even in nature. To understand how much space a triangle covers, we calculate its area. The area tells us the size of the surface inside the triangle’s three sides.

The Triangle Area Calculator (Base & Height) is a simple tool that helps you find the area of a triangle quickly. You only need two measurements: the base and the height. This makes it perfect for students, teachers, builders, designers, and anyone who works with shapes.

What the Triangle Area Calculator Is

A Simple Geometry Tool

The Triangle Area Calculator is an online tool that calculates the area of a triangle using the base and height. It follows a basic geometry formula that is taught in schools and used in real-life planning.

Instead of doing the math by hand, the calculator gives you the answer instantly. This saves time and helps avoid mistakes.

Why Triangle Area Matters

Knowing the area of a triangle is useful for:

  • School and college math problems
  • Construction planning
  • Land and space measurement
  • Art and design projects
  • Cutting materials into triangular shapes

Accurate area calculation helps you use materials properly and plan your work better.

Related Calculator:  Aero Port Area Calculator – Total Area of Multiple Circular Ports

How the Calculator Works

Step 1: Enter the Base

The base is the bottom side of the triangle. You measure its length and enter the value into the calculator.

Step 2: Enter the Height

The height is the perpendicular distance from the base to the opposite corner (vertex). This must be a straight, vertical line.

Step 3: Get the Area

The calculator applies the triangle area formula and shows the result in square units.

Key Formula Used

Triangle Area Formula

Triangle Area = (Base × Height) ÷ 2

This formula works for all triangles as long as the height is measured perpendicular to the base.

Example Formula

If:

  • Base = 10 cm
  • Height = 6 cm

Then:

Triangle Area = (10 × 6) ÷ 2 = 30 cm²

Step-by-Step Example

Example: Right Triangle

Given:

  • Base = 8 m
  • Height = 5 m

Step 1: Multiply base and height

8 × 5 = 40

Step 2: Divide by 2

40 ÷ 2 = 20

Result:

The area of the triangle is 20 square meters.

Features of the Triangle Area Calculator

Easy to Use

You only need two values: base and height.

Fast Results

The calculator gives instant answers.

Accurate Calculations

Uses the correct geometry formula.

Works for All Triangles

Right, acute, or obtuse triangles can all be measured.

Helpful for Learning

Great for students and teachers.

Related Calculator:  Farm Acreage Calculator — Measure Your Field in Acres & Hectares

Uses and Applications

Education

Students use the calculator to solve homework problems and understand geometry better. It helps them check their answers and learn faster.

Construction and Carpentry

Builders calculate triangular areas when designing roofs, supports, and frames. Accurate measurements help save materials and reduce waste.

Art and Design

Designers use triangle areas to plan patterns, shapes, and layouts for creative projects.

Land Measurement

Triangular plots of land can be measured using this method to estimate surface area.

Helpful Tips for Accurate Results

Measure Perpendicular Height

The height must be at a right angle to the base.

Use Correct Units

Keep base and height in the same units.

Double-Check Values

Small mistakes can change the area.

Choose the Right Base

Any side can be the base, but the height must match it.

Common Mistakes to Avoid

Using Slanted Height

The height must be perpendicular, not diagonal.

Mixing Units

Do not mix cm with m or inches with feet.

Guessing Measurements

Always measure carefully.

Forgetting to Divide by 2

This is a common error in manual calculations.

FAQs

What is the base of a triangle?

It is the side you choose to measure the height from.

What is the height of a triangle?

It is the perpendicular distance from the base to the opposite vertex.

Related Calculator:  Best Online Rectangular Prism Calculator for Volume & Surface Area (Easy & Free)

Can this work for any triangle?

Yes, as long as the height is measured correctly.

Is the calculator accurate?

Yes, when correct values are entered.

Who should use this tool?

Students, teachers, builders, and designers.

Final Words

The Triangle Area Calculator (Base & Height) is a simple and reliable tool for finding the area of any triangle. By using just two measurements, you can get quick and accurate results without complicated math.

Whether you are studying geometry, planning construction work, or creating designs, this calculator helps you measure triangle areas with confidence and ease.

Similar Posts

  • Aperture Area Calculator – Calculate Lens & Optical Opening Area

    Aperture Area Calculator Aperture Area Calculator Calculate lens opening size or telescope light gathering power. Photography Telescope Focal Length mm f-stop (Aperture) f/1.2f/1.4f/1.8f/2.0f/2.8f/4.0f/5.6f/8.0f/11f/16f/22 A smaller f-number means a larger opening area. Aperture Diameter Inchmm Central Obstruction (Optional) % (Diam) Typically 20-35% for Newtonians/SCTs. Aperture Area — sq mm Diameter — mm Light Factor 1x vs…

  • 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”;…

  • Irregular Shape Area Calculator – Fast, Easy Area Measurement for Any Shape

    Irregular Shape Area Calculator Irregular Shape Area Calculator Compute area using Vertices (Shoelace), Decomposition (Triangles/Trapezoids), or Trapezoidal Sampling. Input Mode Vertices (Shoelace Formula)Decomposition (Triangles + Trapezoids)Trapezoidal Sampling Precision 4 decimals0 decimals2 decimals6 decimals Default Unit mcmmminftyd + Vertex Clear Seed Rectangle # X Y + Triangle + Trapezoid Clear No shapes added yet. Enter X,Y…

  • Semicircle Area Calculator — Instant Half-Circle Area in Square Units

    Semi Circle Calc Semi-Circle Area, Perimeter & Centroid Solve By Radius (r)Diameter (d)Area (A)Arc Length (Curve)Total Perimeter Radius (r) units Tip: Drag the orange handle to resize. Arc Length Diameter (Base) Area — A = π·r² / 2 Arc Length — Curve = π·r Total Perimeter — Arc + 2r Centroid (Y from base) —…

  • Land Area Calculator – Find Plot Size in Sq Ft, Acres & More (Fast & Easy)

    Land Area Calculator Calculate irregular 4-sided plot areas using simple measurements or coordinates. Unit Meters (m)Feet (ft)Yards (yd) Sides + Diagonal Sides + Angle Coordinates 📐 Measure 4 sides and 1 diagonal for best accuracy without a surveyor. Side A Side B Side C Side D Diagonal (Corner 1 to 3) Connects start of Side…