From 41f155bf9641a296c1f5270ecceafc8e4009ad74 Mon Sep 17 00:00:00 2001 From: "Jill \"oatmealine\" Monoids" Date: Tue, 13 Sep 2022 19:31:08 +0300 Subject: [PATCH] update tips config, add .packwizignore --- .packwizignore | 9 + .../firepit/tips/node_modules/.bin/marked | 17 + .../firepit/tips/node_modules/.modules.yaml | 21 + .../firepit/tips/node_modules/.pnpm/lock.yaml | 15 + .../node_modules/marked/LICENSE.md | 44 + .../node_modules/marked/README.md | 98 + .../node_modules/marked/bin/marked.js | 217 ++ .../node_modules/marked/lib/marked.cjs | 3065 ++++++++++++++++ .../node_modules/marked/lib/marked.esm.js | 2803 +++++++++++++++ .../node_modules/marked/lib/marked.umd.js | 3071 +++++++++++++++++ .../node_modules/marked/man/marked.1 | 92 + .../node_modules/marked/man/marked.1.txt | 86 + .../node_modules/marked/marked.min.js | 6 + .../marked/node_modules/.bin/marked | 17 + .../node_modules/marked/package.json | 97 + .../node_modules/marked/src/Lexer.js | 502 +++ .../node_modules/marked/src/Parser.js | 286 ++ .../node_modules/marked/src/Renderer.js | 203 ++ .../node_modules/marked/src/Slugger.js | 55 + .../node_modules/marked/src/TextRenderer.js | 42 + .../node_modules/marked/src/Tokenizer.js | 776 +++++ .../node_modules/marked/src/defaults.js | 30 + .../node_modules/marked/src/helpers.js | 276 ++ .../node_modules/marked/src/marked.js | 366 ++ .../node_modules/marked/src/rules.js | 302 ++ .../assets/firepit/tips/node_modules/marked | 1 + .../firepit/assets/firepit/tips/package.json | 5 + .../assets/firepit/tips/pnpm-lock.yaml | 15 + .../firepit/assets/firepit/tips/quote-0.json | 2 +- .../firepit/assets/firepit/tips/quote-1.json | 2 +- .../firepit/assets/firepit/tips/quote-10.json | 2 +- .../assets/firepit/tips/quote-100.json | 2 +- .../assets/firepit/tips/quote-101.json | 2 +- .../assets/firepit/tips/quote-102.json | 2 +- .../assets/firepit/tips/quote-103.json | 2 +- .../assets/firepit/tips/quote-104.json | 2 +- .../assets/firepit/tips/quote-105.json | 2 +- .../assets/firepit/tips/quote-106.json | 2 +- .../assets/firepit/tips/quote-107.json | 2 +- .../assets/firepit/tips/quote-108.json | 2 +- .../assets/firepit/tips/quote-109.json | 2 +- .../firepit/assets/firepit/tips/quote-11.json | 2 +- .../assets/firepit/tips/quote-110.json | 2 +- .../assets/firepit/tips/quote-111.json | 2 +- .../assets/firepit/tips/quote-112.json | 2 +- .../assets/firepit/tips/quote-113.json | 2 +- .../assets/firepit/tips/quote-114.json | 2 +- .../assets/firepit/tips/quote-115.json | 2 +- .../assets/firepit/tips/quote-116.json | 2 +- .../assets/firepit/tips/quote-117.json | 2 +- .../assets/firepit/tips/quote-118.json | 2 +- .../assets/firepit/tips/quote-119.json | 2 +- .../firepit/assets/firepit/tips/quote-12.json | 2 +- .../assets/firepit/tips/quote-120.json | 2 +- .../assets/firepit/tips/quote-121.json | 2 +- .../assets/firepit/tips/quote-122.json | 2 +- .../assets/firepit/tips/quote-123.json | 2 +- .../assets/firepit/tips/quote-124.json | 2 +- .../assets/firepit/tips/quote-125.json | 1 + .../assets/firepit/tips/quote-126.json | 1 + .../assets/firepit/tips/quote-127.json | 1 + .../assets/firepit/tips/quote-128.json | 1 + .../assets/firepit/tips/quote-129.json | 1 + .../firepit/assets/firepit/tips/quote-13.json | 2 +- .../assets/firepit/tips/quote-130.json | 1 + .../assets/firepit/tips/quote-131.json | 1 + .../assets/firepit/tips/quote-132.json | 1 + .../assets/firepit/tips/quote-133.json | 1 + .../assets/firepit/tips/quote-134.json | 1 + .../assets/firepit/tips/quote-135.json | 1 + .../assets/firepit/tips/quote-136.json | 1 + .../assets/firepit/tips/quote-137.json | 1 + .../assets/firepit/tips/quote-138.json | 1 + .../assets/firepit/tips/quote-139.json | 1 + .../firepit/assets/firepit/tips/quote-14.json | 2 +- .../assets/firepit/tips/quote-140.json | 1 + .../assets/firepit/tips/quote-141.json | 1 + .../assets/firepit/tips/quote-142.json | 1 + .../assets/firepit/tips/quote-143.json | 1 + .../assets/firepit/tips/quote-144.json | 1 + .../assets/firepit/tips/quote-145.json | 1 + .../assets/firepit/tips/quote-146.json | 1 + .../assets/firepit/tips/quote-147.json | 1 + .../assets/firepit/tips/quote-148.json | 1 + .../assets/firepit/tips/quote-149.json | 1 + .../firepit/assets/firepit/tips/quote-15.json | 2 +- .../assets/firepit/tips/quote-150.json | 1 + .../assets/firepit/tips/quote-151.json | 1 + .../assets/firepit/tips/quote-152.json | 1 + .../assets/firepit/tips/quote-153.json | 1 + .../assets/firepit/tips/quote-154.json | 1 + .../assets/firepit/tips/quote-155.json | 1 + .../assets/firepit/tips/quote-156.json | 1 + .../assets/firepit/tips/quote-157.json | 1 + .../assets/firepit/tips/quote-158.json | 1 + .../assets/firepit/tips/quote-159.json | 1 + .../firepit/assets/firepit/tips/quote-16.json | 2 +- .../assets/firepit/tips/quote-160.json | 1 + .../assets/firepit/tips/quote-161.json | 1 + .../assets/firepit/tips/quote-162.json | 1 + .../assets/firepit/tips/quote-163.json | 1 + .../assets/firepit/tips/quote-164.json | 1 + .../assets/firepit/tips/quote-165.json | 1 + .../assets/firepit/tips/quote-166.json | 1 + .../assets/firepit/tips/quote-167.json | 1 + .../assets/firepit/tips/quote-168.json | 1 + .../assets/firepit/tips/quote-169.json | 1 + .../firepit/assets/firepit/tips/quote-17.json | 2 +- .../assets/firepit/tips/quote-170.json | 1 + .../assets/firepit/tips/quote-171.json | 1 + .../assets/firepit/tips/quote-172.json | 1 + .../assets/firepit/tips/quote-173.json | 1 + .../assets/firepit/tips/quote-174.json | 1 + .../assets/firepit/tips/quote-175.json | 1 + .../assets/firepit/tips/quote-176.json | 1 + .../assets/firepit/tips/quote-177.json | 1 + .../assets/firepit/tips/quote-178.json | 1 + .../assets/firepit/tips/quote-179.json | 1 + .../firepit/assets/firepit/tips/quote-18.json | 2 +- .../assets/firepit/tips/quote-180.json | 1 + .../assets/firepit/tips/quote-181.json | 1 + .../assets/firepit/tips/quote-182.json | 1 + .../assets/firepit/tips/quote-183.json | 1 + .../assets/firepit/tips/quote-184.json | 1 + .../assets/firepit/tips/quote-185.json | 1 + .../assets/firepit/tips/quote-186.json | 1 + .../assets/firepit/tips/quote-187.json | 1 + .../assets/firepit/tips/quote-188.json | 1 + .../assets/firepit/tips/quote-189.json | 1 + .../firepit/assets/firepit/tips/quote-19.json | 2 +- .../assets/firepit/tips/quote-190.json | 1 + .../assets/firepit/tips/quote-191.json | 1 + .../assets/firepit/tips/quote-192.json | 1 + .../assets/firepit/tips/quote-193.json | 1 + .../assets/firepit/tips/quote-194.json | 1 + .../assets/firepit/tips/quote-195.json | 1 + .../assets/firepit/tips/quote-196.json | 1 + .../assets/firepit/tips/quote-197.json | 1 + .../assets/firepit/tips/quote-198.json | 1 + .../assets/firepit/tips/quote-199.json | 1 + .../firepit/assets/firepit/tips/quote-2.json | 2 +- .../firepit/assets/firepit/tips/quote-20.json | 2 +- .../assets/firepit/tips/quote-200.json | 1 + .../assets/firepit/tips/quote-201.json | 1 + .../assets/firepit/tips/quote-202.json | 1 + .../assets/firepit/tips/quote-203.json | 1 + .../assets/firepit/tips/quote-204.json | 1 + .../assets/firepit/tips/quote-205.json | 1 + .../assets/firepit/tips/quote-206.json | 1 + .../assets/firepit/tips/quote-207.json | 1 + .../assets/firepit/tips/quote-208.json | 1 + .../assets/firepit/tips/quote-209.json | 1 + .../firepit/assets/firepit/tips/quote-21.json | 2 +- .../assets/firepit/tips/quote-210.json | 1 + .../assets/firepit/tips/quote-211.json | 1 + .../assets/firepit/tips/quote-212.json | 1 + .../assets/firepit/tips/quote-213.json | 1 + .../assets/firepit/tips/quote-214.json | 1 + .../assets/firepit/tips/quote-215.json | 1 + .../assets/firepit/tips/quote-216.json | 1 + .../assets/firepit/tips/quote-217.json | 1 + .../assets/firepit/tips/quote-218.json | 1 + .../assets/firepit/tips/quote-219.json | 1 + .../firepit/assets/firepit/tips/quote-22.json | 2 +- .../assets/firepit/tips/quote-220.json | 1 + .../assets/firepit/tips/quote-221.json | 1 + .../assets/firepit/tips/quote-222.json | 1 + .../assets/firepit/tips/quote-223.json | 1 + .../assets/firepit/tips/quote-224.json | 1 + .../assets/firepit/tips/quote-225.json | 1 + .../assets/firepit/tips/quote-226.json | 1 + .../assets/firepit/tips/quote-227.json | 1 + .../assets/firepit/tips/quote-228.json | 1 + .../assets/firepit/tips/quote-229.json | 1 + .../firepit/assets/firepit/tips/quote-23.json | 2 +- .../assets/firepit/tips/quote-230.json | 1 + .../assets/firepit/tips/quote-231.json | 1 + .../assets/firepit/tips/quote-232.json | 1 + .../assets/firepit/tips/quote-233.json | 1 + .../assets/firepit/tips/quote-234.json | 1 + .../assets/firepit/tips/quote-235.json | 1 + .../assets/firepit/tips/quote-236.json | 1 + .../assets/firepit/tips/quote-237.json | 1 + .../assets/firepit/tips/quote-238.json | 1 + .../assets/firepit/tips/quote-239.json | 1 + .../firepit/assets/firepit/tips/quote-24.json | 2 +- .../assets/firepit/tips/quote-240.json | 1 + .../assets/firepit/tips/quote-241.json | 1 + .../assets/firepit/tips/quote-242.json | 1 + .../assets/firepit/tips/quote-243.json | 1 + .../assets/firepit/tips/quote-244.json | 1 + .../assets/firepit/tips/quote-245.json | 1 + .../assets/firepit/tips/quote-246.json | 1 + .../assets/firepit/tips/quote-247.json | 1 + .../assets/firepit/tips/quote-248.json | 1 + .../assets/firepit/tips/quote-249.json | 1 + .../firepit/assets/firepit/tips/quote-25.json | 2 +- .../assets/firepit/tips/quote-250.json | 1 + .../assets/firepit/tips/quote-251.json | 1 + .../assets/firepit/tips/quote-252.json | 1 + .../assets/firepit/tips/quote-253.json | 1 + .../assets/firepit/tips/quote-254.json | 1 + .../assets/firepit/tips/quote-255.json | 1 + .../assets/firepit/tips/quote-256.json | 1 + .../assets/firepit/tips/quote-257.json | 1 + .../assets/firepit/tips/quote-258.json | 1 + .../assets/firepit/tips/quote-259.json | 1 + .../firepit/assets/firepit/tips/quote-26.json | 2 +- .../assets/firepit/tips/quote-260.json | 1 + .../assets/firepit/tips/quote-261.json | 1 + .../assets/firepit/tips/quote-262.json | 1 + .../assets/firepit/tips/quote-263.json | 1 + .../assets/firepit/tips/quote-264.json | 1 + .../assets/firepit/tips/quote-265.json | 1 + .../assets/firepit/tips/quote-266.json | 1 + .../assets/firepit/tips/quote-267.json | 1 + .../assets/firepit/tips/quote-268.json | 1 + .../assets/firepit/tips/quote-269.json | 1 + .../firepit/assets/firepit/tips/quote-27.json | 2 +- .../assets/firepit/tips/quote-270.json | 1 + .../assets/firepit/tips/quote-271.json | 1 + .../assets/firepit/tips/quote-272.json | 1 + .../assets/firepit/tips/quote-273.json | 1 + .../assets/firepit/tips/quote-274.json | 1 + .../assets/firepit/tips/quote-275.json | 1 + .../assets/firepit/tips/quote-276.json | 1 + .../assets/firepit/tips/quote-277.json | 1 + .../assets/firepit/tips/quote-278.json | 1 + .../assets/firepit/tips/quote-279.json | 1 + .../firepit/assets/firepit/tips/quote-28.json | 2 +- .../firepit/assets/firepit/tips/quote-29.json | 2 +- .../firepit/assets/firepit/tips/quote-3.json | 2 +- .../firepit/assets/firepit/tips/quote-30.json | 2 +- .../firepit/assets/firepit/tips/quote-31.json | 2 +- .../firepit/assets/firepit/tips/quote-32.json | 2 +- .../firepit/assets/firepit/tips/quote-33.json | 2 +- .../firepit/assets/firepit/tips/quote-34.json | 2 +- .../firepit/assets/firepit/tips/quote-35.json | 2 +- .../firepit/assets/firepit/tips/quote-36.json | 2 +- .../firepit/assets/firepit/tips/quote-37.json | 2 +- .../firepit/assets/firepit/tips/quote-38.json | 2 +- .../firepit/assets/firepit/tips/quote-39.json | 2 +- .../firepit/assets/firepit/tips/quote-4.json | 2 +- .../firepit/assets/firepit/tips/quote-40.json | 2 +- .../firepit/assets/firepit/tips/quote-41.json | 2 +- .../firepit/assets/firepit/tips/quote-42.json | 2 +- .../firepit/assets/firepit/tips/quote-43.json | 2 +- .../firepit/assets/firepit/tips/quote-44.json | 2 +- .../firepit/assets/firepit/tips/quote-45.json | 2 +- .../firepit/assets/firepit/tips/quote-46.json | 2 +- .../firepit/assets/firepit/tips/quote-47.json | 2 +- .../firepit/assets/firepit/tips/quote-48.json | 2 +- .../firepit/assets/firepit/tips/quote-49.json | 2 +- .../firepit/assets/firepit/tips/quote-5.json | 2 +- .../firepit/assets/firepit/tips/quote-50.json | 2 +- .../firepit/assets/firepit/tips/quote-51.json | 2 +- .../firepit/assets/firepit/tips/quote-52.json | 2 +- .../firepit/assets/firepit/tips/quote-53.json | 2 +- .../firepit/assets/firepit/tips/quote-54.json | 2 +- .../firepit/assets/firepit/tips/quote-55.json | 2 +- .../firepit/assets/firepit/tips/quote-56.json | 2 +- .../firepit/assets/firepit/tips/quote-57.json | 2 +- .../firepit/assets/firepit/tips/quote-58.json | 2 +- .../firepit/assets/firepit/tips/quote-59.json | 2 +- .../firepit/assets/firepit/tips/quote-6.json | 2 +- .../firepit/assets/firepit/tips/quote-60.json | 2 +- .../firepit/assets/firepit/tips/quote-61.json | 2 +- .../firepit/assets/firepit/tips/quote-62.json | 2 +- .../firepit/assets/firepit/tips/quote-63.json | 2 +- .../firepit/assets/firepit/tips/quote-64.json | 2 +- .../firepit/assets/firepit/tips/quote-65.json | 2 +- .../firepit/assets/firepit/tips/quote-66.json | 2 +- .../firepit/assets/firepit/tips/quote-67.json | 2 +- .../firepit/assets/firepit/tips/quote-68.json | 2 +- .../firepit/assets/firepit/tips/quote-69.json | 2 +- .../firepit/assets/firepit/tips/quote-7.json | 2 +- .../firepit/assets/firepit/tips/quote-70.json | 2 +- .../firepit/assets/firepit/tips/quote-71.json | 2 +- .../firepit/assets/firepit/tips/quote-72.json | 2 +- .../firepit/assets/firepit/tips/quote-73.json | 2 +- .../firepit/assets/firepit/tips/quote-74.json | 2 +- .../firepit/assets/firepit/tips/quote-75.json | 2 +- .../firepit/assets/firepit/tips/quote-76.json | 2 +- .../firepit/assets/firepit/tips/quote-77.json | 2 +- .../firepit/assets/firepit/tips/quote-78.json | 2 +- .../firepit/assets/firepit/tips/quote-79.json | 2 +- .../firepit/assets/firepit/tips/quote-8.json | 2 +- .../firepit/assets/firepit/tips/quote-80.json | 2 +- .../firepit/assets/firepit/tips/quote-81.json | 2 +- .../firepit/assets/firepit/tips/quote-82.json | 2 +- .../firepit/assets/firepit/tips/quote-83.json | 2 +- .../firepit/assets/firepit/tips/quote-84.json | 2 +- .../firepit/assets/firepit/tips/quote-85.json | 2 +- .../firepit/assets/firepit/tips/quote-86.json | 2 +- .../firepit/assets/firepit/tips/quote-87.json | 2 +- .../firepit/assets/firepit/tips/quote-88.json | 2 +- .../firepit/assets/firepit/tips/quote-89.json | 2 +- .../firepit/assets/firepit/tips/quote-9.json | 2 +- .../firepit/assets/firepit/tips/quote-90.json | 2 +- .../firepit/assets/firepit/tips/quote-91.json | 2 +- .../firepit/assets/firepit/tips/quote-92.json | 2 +- .../firepit/assets/firepit/tips/quote-93.json | 2 +- .../firepit/assets/firepit/tips/quote-94.json | 2 +- .../firepit/assets/firepit/tips/quote-95.json | 2 +- .../firepit/assets/firepit/tips/quote-96.json | 2 +- .../firepit/assets/firepit/tips/quote-97.json | 2 +- .../firepit/assets/firepit/tips/quote-98.json | 2 +- .../firepit/assets/firepit/tips/quote-99.json | 2 +- .../firepit/assets/firepit/tips/quotes.txt | 313 ++ .../firepit/assets/firepit/tips/tojson.js | 55 +- index.toml | 886 ++++- pack.toml | 2 +- 312 files changed, 13908 insertions(+), 270 deletions(-) create mode 100644 .packwizignore create mode 100755 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.bin/marked create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.modules.yaml create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/lock.yaml create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/LICENSE.md create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/README.md create mode 100755 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/bin/marked.js create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/lib/marked.cjs create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/lib/marked.esm.js create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/lib/marked.umd.js create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/man/marked.1 create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/man/marked.1.txt create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/marked.min.js create mode 100755 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/node_modules/.bin/marked create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/package.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Lexer.js create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Parser.js create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Renderer.js create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Slugger.js create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/TextRenderer.js create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Tokenizer.js create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/defaults.js create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/helpers.js create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/marked.js create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/rules.js create mode 120000 config/openloader/resources/firepit/assets/firepit/tips/node_modules/marked create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/package.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/pnpm-lock.yaml create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-125.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-126.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-127.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-128.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-129.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-130.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-131.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-132.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-133.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-134.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-135.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-136.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-137.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-138.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-139.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-140.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-141.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-142.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-143.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-144.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-145.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-146.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-147.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-148.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-149.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-150.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-151.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-152.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-153.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-154.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-155.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-156.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-157.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-158.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-159.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-160.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-161.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-162.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-163.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-164.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-165.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-166.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-167.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-168.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-169.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-170.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-171.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-172.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-173.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-174.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-175.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-176.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-177.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-178.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-179.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-180.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-181.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-182.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-183.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-184.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-185.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-186.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-187.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-188.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-189.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-190.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-191.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-192.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-193.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-194.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-195.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-196.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-197.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-198.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-199.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-200.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-201.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-202.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-203.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-204.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-205.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-206.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-207.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-208.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-209.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-210.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-211.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-212.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-213.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-214.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-215.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-216.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-217.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-218.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-219.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-220.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-221.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-222.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-223.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-224.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-225.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-226.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-227.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-228.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-229.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-230.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-231.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-232.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-233.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-234.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-235.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-236.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-237.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-238.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-239.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-240.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-241.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-242.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-243.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-244.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-245.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-246.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-247.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-248.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-249.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-250.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-251.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-252.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-253.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-254.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-255.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-256.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-257.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-258.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-259.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-260.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-261.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-262.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-263.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-264.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-265.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-266.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-267.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-268.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-269.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-270.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-271.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-272.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-273.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-274.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-275.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-276.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-277.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-278.json create mode 100644 config/openloader/resources/firepit/assets/firepit/tips/quote-279.json diff --git a/.packwizignore b/.packwizignore new file mode 100644 index 0000000..e13713b --- /dev/null +++ b/.packwizignore @@ -0,0 +1,9 @@ +/README.md +.git/** +.gitattributes +node_modules +**/*.js +package.json +pnpm-lock.yaml +quotes.txt +**/*.sh diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.bin/marked b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.bin/marked new file mode 100755 index 0000000..e5bf961 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.bin/marked @@ -0,0 +1,17 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -z "$NODE_PATH" ]; then + export NODE_PATH="/run/media/oatmealine/8014a2d1-7458-4ad8-a9bc-fa018042a411/games/MultiMC/instances/Fire Pit 1.19.2/.minecraft/packwiz/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/node_modules" +else + export NODE_PATH="$NODE_PATH:/run/media/oatmealine/8014a2d1-7458-4ad8-a9bc-fa018042a411/games/MultiMC/instances/Fire Pit 1.19.2/.minecraft/packwiz/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/node_modules" +fi +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../marked/bin/marked.js" "$@" +else + exec node "$basedir/../marked/bin/marked.js" "$@" +fi diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.modules.yaml b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.modules.yaml new file mode 100644 index 0000000..fbeecf2 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.modules.yaml @@ -0,0 +1,21 @@ +hoistPattern: + - '*' +hoistedDependencies: {} +included: + dependencies: true + devDependencies: true + optionalDependencies: true +injectedDeps: {} +layoutVersion: 5 +nodeLinker: isolated +packageManager: pnpm@7.11.0 +pendingBuilds: [] +prunedAt: Tue, 13 Sep 2022 15:19:58 GMT +publicHoistPattern: + - '*eslint*' + - '*prettier*' +registries: + default: https://registry.npmjs.org/ +skipped: [] +storeDir: /run/media/oatmealine/8014a2d1-7458-4ad8-a9bc-fa018042a411/.pnpm-store/v3 +virtualStoreDir: .pnpm diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/lock.yaml b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/lock.yaml new file mode 100644 index 0000000..94859e2 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/lock.yaml @@ -0,0 +1,15 @@ +lockfileVersion: 5.4 + +specifiers: + marked: ^4.1.0 + +dependencies: + marked: 4.1.0 + +packages: + + /marked/4.1.0: + resolution: {integrity: sha512-+Z6KDjSPa6/723PQYyc1axYZpYYpDnECDaU6hkaf5gqBieBkMKYReL5hteF2QizhlMbgbo8umXl/clZ67+GlsA==} + engines: {node: '>= 12'} + hasBin: true + dev: false diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/LICENSE.md b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/LICENSE.md new file mode 100644 index 0000000..4bd2d4a --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/LICENSE.md @@ -0,0 +1,44 @@ +# License information + +## Contribution License Agreement + +If you contribute code to this project, you are implicitly allowing your code +to be distributed under the MIT license. You are also implicitly verifying that +all code is your original work. `` + +## Marked + +Copyright (c) 2018+, MarkedJS (https://github.com/markedjs/) +Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +## Markdown + +Copyright © 2004, John Gruber +http://daringfireball.net/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +* Neither the name “Markdown” nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +This software is provided by the copyright holders and contributors “as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage. diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/README.md b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/README.md new file mode 100644 index 0000000..87961a0 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/README.md @@ -0,0 +1,98 @@ + + + + +# Marked + +[![npm](https://badgen.net/npm/v/marked)](https://www.npmjs.com/package/marked) +[![gzip size](https://badgen.net/badgesize/gzip/https://cdn.jsdelivr.net/npm/marked/marked.min.js)](https://cdn.jsdelivr.net/npm/marked/marked.min.js) +[![install size](https://badgen.net/packagephobia/install/marked)](https://packagephobia.now.sh/result?p=marked) +[![downloads](https://badgen.net/npm/dt/marked)](https://www.npmjs.com/package/marked) +[![github actions](https://github.com/markedjs/marked/workflows/Tests/badge.svg)](https://github.com/markedjs/marked/actions) +[![snyk](https://snyk.io/test/npm/marked/badge.svg)](https://snyk.io/test/npm/marked) + +- ⚡ built for speed +- ⬇️ low-level compiler for parsing markdown without caching or blocking for long periods of time +- ⚖️ light-weight while implementing all markdown features from the supported flavors & specifications +- 🌐 works in a browser, on a server, or from a command line interface (CLI) + +## Demo + +Checkout the [demo page](https://marked.js.org/demo/) to see marked in action ⛹️ + +## Docs + +Our [documentation pages](https://marked.js.org) are also rendered using marked 💯 + +Also read about: + +* [Options](https://marked.js.org/#/USING_ADVANCED.md) +* [Extensibility](https://marked.js.org/#/USING_PRO.md) + +## Compatibility + +**Node.js:** Only [current and LTS](https://nodejs.org/en/about/releases/) Node.js versions are supported. End of life Node.js versions may become incompatible with Marked at any point in time. + +**Browser:** Not IE11 :) + +## Installation + +**CLI:** + +```sh +npm install -g marked +``` + +**In-browser:** + +```sh +npm install marked +``` + +## Usage + +### Warning: 🚨 Marked does not [sanitize](https://marked.js.org/#/USING_ADVANCED.md#options) the output HTML. Please use a sanitize library, like [DOMPurify](https://github.com/cure53/DOMPurify) (recommended), [sanitize-html](https://github.com/apostrophecms/sanitize-html) or [insane](https://github.com/bevacqua/insane) on the *output* HTML! 🚨 + +``` +DOMPurify.sanitize(marked.parse(``)); +``` + +**CLI** + +``` bash +# Example with stdin input +$ marked -o hello.html +hello world +^D +$ cat hello.html +

hello world

+``` + +```bash +# Print all options +$ marked --help +``` + +**Browser** + +```html + + + + + Marked in the browser + + +
+ + + + +``` + +## License + +Copyright (c) 2011-2022, Christopher Jeffrey. (MIT License) diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/bin/marked.js b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/bin/marked.js new file mode 100755 index 0000000..5031246 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/bin/marked.js @@ -0,0 +1,217 @@ +#!/usr/bin/env node + +/** + * Marked CLI + * Copyright (c) 2011-2013, Christopher Jeffrey (MIT License) + */ + +import { promises } from 'fs'; +import { marked } from '../lib/marked.esm.js'; + +const { readFile, writeFile } = promises; + +/** + * Man Page + */ + +async function help() { + const { spawn } = await import('child_process'); + + const options = { + cwd: process.cwd(), + env: process.env, + setsid: false, + stdio: 'inherit' + }; + + const { dirname, resolve } = await import('path'); + const { fileURLToPath } = await import('url'); + const __dirname = dirname(fileURLToPath(import.meta.url)); + const helpText = await readFile(resolve(__dirname, '../man/marked.1.txt'), 'utf8'); + + // eslint-disable-next-line promise/param-names + await new Promise(res => { + spawn('man', [resolve(__dirname, '../man/marked.1')], options) + .on('error', () => { + console.log(helpText); + }) + .on('close', res); + }); +} + +async function version() { + const { createRequire } = await import('module'); + const require = createRequire(import.meta.url); + const pkg = require('../package.json'); + console.log(pkg.version); +} + +/** + * Main + */ + +async function main(argv) { + const files = []; + const options = {}; + let input; + let output; + let string; + let arg; + let tokens; + let opt; + + function getarg() { + let arg = argv.shift(); + + if (arg.indexOf('--') === 0) { + // e.g. --opt + arg = arg.split('='); + if (arg.length > 1) { + // e.g. --opt=val + argv.unshift(arg.slice(1).join('=')); + } + arg = arg[0]; + } else if (arg[0] === '-') { + if (arg.length > 2) { + // e.g. -abc + argv = arg.substring(1).split('').map(function(ch) { + return '-' + ch; + }).concat(argv); + arg = argv.shift(); + } else { + // e.g. -a + } + } else { + // e.g. foo + } + + return arg; + } + + while (argv.length) { + arg = getarg(); + switch (arg) { + case '-o': + case '--output': + output = argv.shift(); + break; + case '-i': + case '--input': + input = argv.shift(); + break; + case '-s': + case '--string': + string = argv.shift(); + break; + case '-t': + case '--tokens': + tokens = true; + break; + case '-h': + case '--help': + return await help(); + case '-v': + case '--version': + return await version(); + default: + if (arg.indexOf('--') === 0) { + opt = camelize(arg.replace(/^--(no-)?/, '')); + if (!marked.defaults.hasOwnProperty(opt)) { + continue; + } + if (arg.indexOf('--no-') === 0) { + options[opt] = typeof marked.defaults[opt] !== 'boolean' + ? null + : false; + } else { + options[opt] = typeof marked.defaults[opt] !== 'boolean' + ? argv.shift() + : true; + } + } else { + files.push(arg); + } + break; + } + } + + async function getData() { + if (!input) { + if (files.length <= 2) { + if (string) { + return string; + } + return await getStdin(); + } + input = files.pop(); + } + return await readFile(input, 'utf8'); + } + + const data = await getData(); + + const html = tokens + ? JSON.stringify(marked.lexer(data, options), null, 2) + : marked(data, options); + + if (output) { + return await writeFile(output, html); + } + + process.stdout.write(html + '\n'); +} + +/** + * Helpers + */ + +function getStdin() { + return new Promise((resolve, reject) => { + const stdin = process.stdin; + let buff = ''; + + stdin.setEncoding('utf8'); + + stdin.on('data', function(data) { + buff += data; + }); + + stdin.on('error', function(err) { + reject(err); + }); + + stdin.on('end', function() { + resolve(buff); + }); + + stdin.resume(); + }); +} + +/** + * @param {string} text + */ +function camelize(text) { + return text.replace(/(\w)-(\w)/g, function(_, a, b) { + return a + b.toUpperCase(); + }); +} + +function handleError(err) { + if (err.code === 'ENOENT') { + console.error('marked: output to ' + err.path + ': No such directory'); + return process.exit(1); + } + throw err; +} + +/** + * Expose / Entry Point + */ + +process.title = 'marked'; +main(process.argv.slice()).then(code => { + process.exit(code || 0); +}).catch(err => { + handleError(err); +}); diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/lib/marked.cjs b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/lib/marked.cjs new file mode 100644 index 0000000..3951359 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/lib/marked.cjs @@ -0,0 +1,3065 @@ +/** + * marked - a markdown parser + * Copyright (c) 2011-2022, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ + +/** + * DO NOT EDIT THIS FILE + * The code in this file is generated from files in ./src/ + */ + +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; +} + +function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; + var i = 0; + return function () { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +function getDefaults() { + return { + async: false, + baseUrl: null, + breaks: false, + extensions: null, + gfm: true, + headerIds: true, + headerPrefix: '', + highlight: null, + langPrefix: 'language-', + mangle: true, + pedantic: false, + renderer: null, + sanitize: false, + sanitizer: null, + silent: false, + smartLists: false, + smartypants: false, + tokenizer: null, + walkTokens: null, + xhtml: false + }; +} +exports.defaults = getDefaults(); +function changeDefaults(newDefaults) { + exports.defaults = newDefaults; +} + +/** + * Helpers + */ +var escapeTest = /[&<>"']/; +var escapeReplace = /[&<>"']/g; +var escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/; +var escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g; +var escapeReplacements = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; + +var getEscapeReplacement = function getEscapeReplacement(ch) { + return escapeReplacements[ch]; +}; + +function escape(html, encode) { + if (encode) { + if (escapeTest.test(html)) { + return html.replace(escapeReplace, getEscapeReplacement); + } + } else { + if (escapeTestNoEncode.test(html)) { + return html.replace(escapeReplaceNoEncode, getEscapeReplacement); + } + } + + return html; +} +var unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig; +/** + * @param {string} html + */ + +function unescape(html) { + // explicitly match decimal, hex, and named HTML entities + return html.replace(unescapeTest, function (_, n) { + n = n.toLowerCase(); + if (n === 'colon') return ':'; + + if (n.charAt(0) === '#') { + return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1)); + } + + return ''; + }); +} +var caret = /(^|[^\[])\^/g; +/** + * @param {string | RegExp} regex + * @param {string} opt + */ + +function edit(regex, opt) { + regex = typeof regex === 'string' ? regex : regex.source; + opt = opt || ''; + var obj = { + replace: function replace(name, val) { + val = val.source || val; + val = val.replace(caret, '$1'); + regex = regex.replace(name, val); + return obj; + }, + getRegex: function getRegex() { + return new RegExp(regex, opt); + } + }; + return obj; +} +var nonWordAndColonTest = /[^\w:]/g; +var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i; +/** + * @param {boolean} sanitize + * @param {string} base + * @param {string} href + */ + +function cleanUrl(sanitize, base, href) { + if (sanitize) { + var prot; + + try { + prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase(); + } catch (e) { + return null; + } + + if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) { + return null; + } + } + + if (base && !originIndependentUrl.test(href)) { + href = resolveUrl(base, href); + } + + try { + href = encodeURI(href).replace(/%25/g, '%'); + } catch (e) { + return null; + } + + return href; +} +var baseUrls = {}; +var justDomain = /^[^:]+:\/*[^/]*$/; +var protocol = /^([^:]+:)[\s\S]*$/; +var domain = /^([^:]+:\/*[^/]*)[\s\S]*$/; +/** + * @param {string} base + * @param {string} href + */ + +function resolveUrl(base, href) { + if (!baseUrls[' ' + base]) { + // we can ignore everything in base after the last slash of its path component, + // but we might need to add _that_ + // https://tools.ietf.org/html/rfc3986#section-3 + if (justDomain.test(base)) { + baseUrls[' ' + base] = base + '/'; + } else { + baseUrls[' ' + base] = rtrim(base, '/', true); + } + } + + base = baseUrls[' ' + base]; + var relativeBase = base.indexOf(':') === -1; + + if (href.substring(0, 2) === '//') { + if (relativeBase) { + return href; + } + + return base.replace(protocol, '$1') + href; + } else if (href.charAt(0) === '/') { + if (relativeBase) { + return href; + } + + return base.replace(domain, '$1') + href; + } else { + return base + href; + } +} +var noopTest = { + exec: function noopTest() {} +}; +function merge(obj) { + var i = 1, + target, + key; + + for (; i < arguments.length; i++) { + target = arguments[i]; + + for (key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + obj[key] = target[key]; + } + } + } + + return obj; +} +function splitCells(tableRow, count) { + // ensure that every cell-delimiting pipe has a space + // before it to distinguish it from an escaped pipe + var row = tableRow.replace(/\|/g, function (match, offset, str) { + var escaped = false, + curr = offset; + + while (--curr >= 0 && str[curr] === '\\') { + escaped = !escaped; + } + + if (escaped) { + // odd number of slashes means | is escaped + // so we leave it alone + return '|'; + } else { + // add space before unescaped | + return ' |'; + } + }), + cells = row.split(/ \|/); + var i = 0; // First/last cell in a row cannot be empty if it has no leading/trailing pipe + + if (!cells[0].trim()) { + cells.shift(); + } + + if (cells.length > 0 && !cells[cells.length - 1].trim()) { + cells.pop(); + } + + if (cells.length > count) { + cells.splice(count); + } else { + while (cells.length < count) { + cells.push(''); + } + } + + for (; i < cells.length; i++) { + // leading or trailing whitespace is ignored per the gfm spec + cells[i] = cells[i].trim().replace(/\\\|/g, '|'); + } + + return cells; +} +/** + * Remove trailing 'c's. Equivalent to str.replace(/c*$/, ''). + * /c*$/ is vulnerable to REDOS. + * + * @param {string} str + * @param {string} c + * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey. + */ + +function rtrim(str, c, invert) { + var l = str.length; + + if (l === 0) { + return ''; + } // Length of suffix matching the invert condition. + + + var suffLen = 0; // Step left until we fail to match the invert condition. + + while (suffLen < l) { + var currChar = str.charAt(l - suffLen - 1); + + if (currChar === c && !invert) { + suffLen++; + } else if (currChar !== c && invert) { + suffLen++; + } else { + break; + } + } + + return str.slice(0, l - suffLen); +} +function findClosingBracket(str, b) { + if (str.indexOf(b[1]) === -1) { + return -1; + } + + var l = str.length; + var level = 0, + i = 0; + + for (; i < l; i++) { + if (str[i] === '\\') { + i++; + } else if (str[i] === b[0]) { + level++; + } else if (str[i] === b[1]) { + level--; + + if (level < 0) { + return i; + } + } + } + + return -1; +} +function checkSanitizeDeprecation(opt) { + if (opt && opt.sanitize && !opt.silent) { + console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options'); + } +} // copied from https://stackoverflow.com/a/5450113/806777 + +/** + * @param {string} pattern + * @param {number} count + */ + +function repeatString(pattern, count) { + if (count < 1) { + return ''; + } + + var result = ''; + + while (count > 1) { + if (count & 1) { + result += pattern; + } + + count >>= 1; + pattern += pattern; + } + + return result + pattern; +} + +function outputLink(cap, link, raw, lexer) { + var href = link.href; + var title = link.title ? escape(link.title) : null; + var text = cap[1].replace(/\\([\[\]])/g, '$1'); + + if (cap[0].charAt(0) !== '!') { + lexer.state.inLink = true; + var token = { + type: 'link', + raw: raw, + href: href, + title: title, + text: text, + tokens: lexer.inlineTokens(text) + }; + lexer.state.inLink = false; + return token; + } + + return { + type: 'image', + raw: raw, + href: href, + title: title, + text: escape(text) + }; +} + +function indentCodeCompensation(raw, text) { + var matchIndentToCode = raw.match(/^(\s+)(?:```)/); + + if (matchIndentToCode === null) { + return text; + } + + var indentToCode = matchIndentToCode[1]; + return text.split('\n').map(function (node) { + var matchIndentInNode = node.match(/^\s+/); + + if (matchIndentInNode === null) { + return node; + } + + var indentInNode = matchIndentInNode[0]; + + if (indentInNode.length >= indentToCode.length) { + return node.slice(indentToCode.length); + } + + return node; + }).join('\n'); +} +/** + * Tokenizer + */ + + +var Tokenizer = /*#__PURE__*/function () { + function Tokenizer(options) { + this.options = options || exports.defaults; + } + + var _proto = Tokenizer.prototype; + + _proto.space = function space(src) { + var cap = this.rules.block.newline.exec(src); + + if (cap && cap[0].length > 0) { + return { + type: 'space', + raw: cap[0] + }; + } + }; + + _proto.code = function code(src) { + var cap = this.rules.block.code.exec(src); + + if (cap) { + var text = cap[0].replace(/^ {1,4}/gm, ''); + return { + type: 'code', + raw: cap[0], + codeBlockStyle: 'indented', + text: !this.options.pedantic ? rtrim(text, '\n') : text + }; + } + }; + + _proto.fences = function fences(src) { + var cap = this.rules.block.fences.exec(src); + + if (cap) { + var raw = cap[0]; + var text = indentCodeCompensation(raw, cap[3] || ''); + return { + type: 'code', + raw: raw, + lang: cap[2] ? cap[2].trim() : cap[2], + text: text + }; + } + }; + + _proto.heading = function heading(src) { + var cap = this.rules.block.heading.exec(src); + + if (cap) { + var text = cap[2].trim(); // remove trailing #s + + if (/#$/.test(text)) { + var trimmed = rtrim(text, '#'); + + if (this.options.pedantic) { + text = trimmed.trim(); + } else if (!trimmed || / $/.test(trimmed)) { + // CommonMark requires space before trailing #s + text = trimmed.trim(); + } + } + + return { + type: 'heading', + raw: cap[0], + depth: cap[1].length, + text: text, + tokens: this.lexer.inline(text) + }; + } + }; + + _proto.hr = function hr(src) { + var cap = this.rules.block.hr.exec(src); + + if (cap) { + return { + type: 'hr', + raw: cap[0] + }; + } + }; + + _proto.blockquote = function blockquote(src) { + var cap = this.rules.block.blockquote.exec(src); + + if (cap) { + var text = cap[0].replace(/^ *>[ \t]?/gm, ''); + return { + type: 'blockquote', + raw: cap[0], + tokens: this.lexer.blockTokens(text, []), + text: text + }; + } + }; + + _proto.list = function list(src) { + var cap = this.rules.block.list.exec(src); + + if (cap) { + var raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine, line, nextLine, rawLine, itemContents, endEarly; + var bull = cap[1].trim(); + var isordered = bull.length > 1; + var list = { + type: 'list', + raw: '', + ordered: isordered, + start: isordered ? +bull.slice(0, -1) : '', + loose: false, + items: [] + }; + bull = isordered ? "\\d{1,9}\\" + bull.slice(-1) : "\\" + bull; + + if (this.options.pedantic) { + bull = isordered ? bull : '[*+-]'; + } // Get next list item + + + var itemRegex = new RegExp("^( {0,3}" + bull + ")((?:[\t ][^\\n]*)?(?:\\n|$))"); // Check if current bullet point can start a new List Item + + while (src) { + endEarly = false; + + if (!(cap = itemRegex.exec(src))) { + break; + } + + if (this.rules.block.hr.test(src)) { + // End list if bullet was actually HR (possibly move into itemRegex?) + break; + } + + raw = cap[0]; + src = src.substring(raw.length); + line = cap[2].split('\n', 1)[0]; + nextLine = src.split('\n', 1)[0]; + + if (this.options.pedantic) { + indent = 2; + itemContents = line.trimLeft(); + } else { + indent = cap[2].search(/[^ ]/); // Find first non-space char + + indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent + + itemContents = line.slice(indent); + indent += cap[1].length; + } + + blankLine = false; + + if (!line && /^ *$/.test(nextLine)) { + // Items begin with at most one blank line + raw += nextLine + '\n'; + src = src.substring(nextLine.length + 1); + endEarly = true; + } + + if (!endEarly) { + var nextBulletRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))"); + var hrRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)"); + var fencesBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}(?:```|~~~)"); + var headingBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}#"); // Check if following lines should be included in List Item + + while (src) { + rawLine = src.split('\n', 1)[0]; + line = rawLine; // Re-align to follow commonmark nesting rules + + if (this.options.pedantic) { + line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' '); + } // End list item if found code fences + + + if (fencesBeginRegex.test(line)) { + break; + } // End list item if found start of new heading + + + if (headingBeginRegex.test(line)) { + break; + } // End list item if found start of new bullet + + + if (nextBulletRegex.test(line)) { + break; + } // Horizontal rule found + + + if (hrRegex.test(src)) { + break; + } + + if (line.search(/[^ ]/) >= indent || !line.trim()) { + // Dedent if possible + itemContents += '\n' + line.slice(indent); + } else if (!blankLine) { + // Until blank line, item doesn't need indentation + itemContents += '\n' + line; + } else { + // Otherwise, improper indentation ends this item + break; + } + + if (!blankLine && !line.trim()) { + // Check if current line is blank + blankLine = true; + } + + raw += rawLine + '\n'; + src = src.substring(rawLine.length + 1); + } + } + + if (!list.loose) { + // If the previous item ended with a blank line, the list is loose + if (endsWithBlankLine) { + list.loose = true; + } else if (/\n *\n *$/.test(raw)) { + endsWithBlankLine = true; + } + } // Check for task list items + + + if (this.options.gfm) { + istask = /^\[[ xX]\] /.exec(itemContents); + + if (istask) { + ischecked = istask[0] !== '[ ] '; + itemContents = itemContents.replace(/^\[[ xX]\] +/, ''); + } + } + + list.items.push({ + type: 'list_item', + raw: raw, + task: !!istask, + checked: ischecked, + loose: false, + text: itemContents + }); + list.raw += raw; + } // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic + + + list.items[list.items.length - 1].raw = raw.trimRight(); + list.items[list.items.length - 1].text = itemContents.trimRight(); + list.raw = list.raw.trimRight(); + var l = list.items.length; // Item child tokens handled here at end because we needed to have the final item to trim it first + + for (i = 0; i < l; i++) { + this.lexer.state.top = false; + list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []); + var spacers = list.items[i].tokens.filter(function (t) { + return t.type === 'space'; + }); + var hasMultipleLineBreaks = spacers.every(function (t) { + var chars = t.raw.split(''); + var lineBreaks = 0; + + for (var _iterator = _createForOfIteratorHelperLoose(chars), _step; !(_step = _iterator()).done;) { + var _char = _step.value; + + if (_char === '\n') { + lineBreaks += 1; + } + + if (lineBreaks > 1) { + return true; + } + } + + return false; + }); + + if (!list.loose && spacers.length && hasMultipleLineBreaks) { + // Having a single line break doesn't mean a list is loose. A single line break is terminating the last list item + list.loose = true; + list.items[i].loose = true; + } + } + + return list; + } + }; + + _proto.html = function html(src) { + var cap = this.rules.block.html.exec(src); + + if (cap) { + var token = { + type: 'html', + raw: cap[0], + pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), + text: cap[0] + }; + + if (this.options.sanitize) { + var text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]); + token.type = 'paragraph'; + token.text = text; + token.tokens = this.lexer.inline(text); + } + + return token; + } + }; + + _proto.def = function def(src) { + var cap = this.rules.block.def.exec(src); + + if (cap) { + if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1); + var tag = cap[1].toLowerCase().replace(/\s+/g, ' '); + return { + type: 'def', + tag: tag, + raw: cap[0], + href: cap[2], + title: cap[3] + }; + } + }; + + _proto.table = function table(src) { + var cap = this.rules.block.table.exec(src); + + if (cap) { + var item = { + type: 'table', + header: splitCells(cap[1]).map(function (c) { + return { + text: c + }; + }), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + rows: cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, '').split('\n') : [] + }; + + if (item.header.length === item.align.length) { + item.raw = cap[0]; + var l = item.align.length; + var i, j, k, row; + + for (i = 0; i < l; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + l = item.rows.length; + + for (i = 0; i < l; i++) { + item.rows[i] = splitCells(item.rows[i], item.header.length).map(function (c) { + return { + text: c + }; + }); + } // parse child tokens inside headers and cells + // header child tokens + + + l = item.header.length; + + for (j = 0; j < l; j++) { + item.header[j].tokens = this.lexer.inline(item.header[j].text); + } // cell child tokens + + + l = item.rows.length; + + for (j = 0; j < l; j++) { + row = item.rows[j]; + + for (k = 0; k < row.length; k++) { + row[k].tokens = this.lexer.inline(row[k].text); + } + } + + return item; + } + } + }; + + _proto.lheading = function lheading(src) { + var cap = this.rules.block.lheading.exec(src); + + if (cap) { + return { + type: 'heading', + raw: cap[0], + depth: cap[2].charAt(0) === '=' ? 1 : 2, + text: cap[1], + tokens: this.lexer.inline(cap[1]) + }; + } + }; + + _proto.paragraph = function paragraph(src) { + var cap = this.rules.block.paragraph.exec(src); + + if (cap) { + var text = cap[1].charAt(cap[1].length - 1) === '\n' ? cap[1].slice(0, -1) : cap[1]; + return { + type: 'paragraph', + raw: cap[0], + text: text, + tokens: this.lexer.inline(text) + }; + } + }; + + _proto.text = function text(src) { + var cap = this.rules.block.text.exec(src); + + if (cap) { + return { + type: 'text', + raw: cap[0], + text: cap[0], + tokens: this.lexer.inline(cap[0]) + }; + } + }; + + _proto.escape = function escape$1(src) { + var cap = this.rules.inline.escape.exec(src); + + if (cap) { + return { + type: 'escape', + raw: cap[0], + text: escape(cap[1]) + }; + } + }; + + _proto.tag = function tag(src) { + var cap = this.rules.inline.tag.exec(src); + + if (cap) { + if (!this.lexer.state.inLink && /^/i.test(cap[0])) { + this.lexer.state.inLink = false; + } + + if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { + this.lexer.state.inRawBlock = true; + } else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { + this.lexer.state.inRawBlock = false; + } + + return { + type: this.options.sanitize ? 'text' : 'html', + raw: cap[0], + inLink: this.lexer.state.inLink, + inRawBlock: this.lexer.state.inRawBlock, + text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0] + }; + } + }; + + _proto.link = function link(src) { + var cap = this.rules.inline.link.exec(src); + + if (cap) { + var trimmedUrl = cap[2].trim(); + + if (!this.options.pedantic && /^$/.test(trimmedUrl)) { + return; + } // ending angle bracket cannot be escaped + + + var rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\'); + + if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) { + return; + } + } else { + // find closing parenthesis + var lastParenIndex = findClosingBracket(cap[2], '()'); + + if (lastParenIndex > -1) { + var start = cap[0].indexOf('!') === 0 ? 5 : 4; + var linkLen = start + cap[1].length + lastParenIndex; + cap[2] = cap[2].substring(0, lastParenIndex); + cap[0] = cap[0].substring(0, linkLen).trim(); + cap[3] = ''; + } + } + + var href = cap[2]; + var title = ''; + + if (this.options.pedantic) { + // split pedantic href and title + var link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href); + + if (link) { + href = link[1]; + title = link[3]; + } + } else { + title = cap[3] ? cap[3].slice(1, -1) : ''; + } + + href = href.trim(); + + if (/^$/.test(trimmedUrl)) { + // pedantic allows starting angle bracket without ending angle bracket + href = href.slice(1); + } else { + href = href.slice(1, -1); + } + } + + return outputLink(cap, { + href: href ? href.replace(this.rules.inline._escapes, '$1') : href, + title: title ? title.replace(this.rules.inline._escapes, '$1') : title + }, cap[0], this.lexer); + } + }; + + _proto.reflink = function reflink(src, links) { + var cap; + + if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) { + var link = (cap[2] || cap[1]).replace(/\s+/g, ' '); + link = links[link.toLowerCase()]; + + if (!link || !link.href) { + var text = cap[0].charAt(0); + return { + type: 'text', + raw: text, + text: text + }; + } + + return outputLink(cap, link, cap[0], this.lexer); + } + }; + + _proto.emStrong = function emStrong(src, maskedSrc, prevChar) { + if (prevChar === void 0) { + prevChar = ''; + } + + var match = this.rules.inline.emStrong.lDelim.exec(src); + if (!match) return; // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well + + if (match[3] && prevChar.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/)) return; + var nextChar = match[1] || match[2] || ''; + + if (!nextChar || nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))) { + var lLength = match[0].length - 1; + var rDelim, + rLength, + delimTotal = lLength, + midDelimTotal = 0; + var endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd; + endReg.lastIndex = 0; // Clip maskedSrc to same section of string as src (move to lexer?) + + maskedSrc = maskedSrc.slice(-1 * src.length + lLength); + + while ((match = endReg.exec(maskedSrc)) != null) { + rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6]; + if (!rDelim) continue; // skip single * in __abc*abc__ + + rLength = rDelim.length; + + if (match[3] || match[4]) { + // found another Left Delim + delimTotal += rLength; + continue; + } else if (match[5] || match[6]) { + // either Left or Right Delim + if (lLength % 3 && !((lLength + rLength) % 3)) { + midDelimTotal += rLength; + continue; // CommonMark Emphasis Rules 9-10 + } + } + + delimTotal -= rLength; + if (delimTotal > 0) continue; // Haven't found enough closing delimiters + // Remove extra characters. *a*** -> *a* + + rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal); // Create `em` if smallest delimiter has odd char count. *a*** + + if (Math.min(lLength, rLength) % 2) { + var _text = src.slice(1, lLength + match.index + rLength); + + return { + type: 'em', + raw: src.slice(0, lLength + match.index + rLength + 1), + text: _text, + tokens: this.lexer.inlineTokens(_text) + }; + } // Create 'strong' if smallest delimiter has even char count. **a*** + + + var text = src.slice(2, lLength + match.index + rLength - 1); + return { + type: 'strong', + raw: src.slice(0, lLength + match.index + rLength + 1), + text: text, + tokens: this.lexer.inlineTokens(text) + }; + } + } + }; + + _proto.codespan = function codespan(src) { + var cap = this.rules.inline.code.exec(src); + + if (cap) { + var text = cap[2].replace(/\n/g, ' '); + var hasNonSpaceChars = /[^ ]/.test(text); + var hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text); + + if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) { + text = text.substring(1, text.length - 1); + } + + text = escape(text, true); + return { + type: 'codespan', + raw: cap[0], + text: text + }; + } + }; + + _proto.br = function br(src) { + var cap = this.rules.inline.br.exec(src); + + if (cap) { + return { + type: 'br', + raw: cap[0] + }; + } + }; + + _proto.del = function del(src) { + var cap = this.rules.inline.del.exec(src); + + if (cap) { + return { + type: 'del', + raw: cap[0], + text: cap[2], + tokens: this.lexer.inlineTokens(cap[2]) + }; + } + }; + + _proto.autolink = function autolink(src, mangle) { + var cap = this.rules.inline.autolink.exec(src); + + if (cap) { + var text, href; + + if (cap[2] === '@') { + text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]); + href = 'mailto:' + text; + } else { + text = escape(cap[1]); + href = text; + } + + return { + type: 'link', + raw: cap[0], + text: text, + href: href, + tokens: [{ + type: 'text', + raw: text, + text: text + }] + }; + } + }; + + _proto.url = function url(src, mangle) { + var cap; + + if (cap = this.rules.inline.url.exec(src)) { + var text, href; + + if (cap[2] === '@') { + text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]); + href = 'mailto:' + text; + } else { + // do extended autolink path validation + var prevCapZero; + + do { + prevCapZero = cap[0]; + cap[0] = this.rules.inline._backpedal.exec(cap[0])[0]; + } while (prevCapZero !== cap[0]); + + text = escape(cap[0]); + + if (cap[1] === 'www.') { + href = 'http://' + text; + } else { + href = text; + } + } + + return { + type: 'link', + raw: cap[0], + text: text, + href: href, + tokens: [{ + type: 'text', + raw: text, + text: text + }] + }; + } + }; + + _proto.inlineText = function inlineText(src, smartypants) { + var cap = this.rules.inline.text.exec(src); + + if (cap) { + var text; + + if (this.lexer.state.inRawBlock) { + text = this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0]; + } else { + text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]); + } + + return { + type: 'text', + raw: cap[0], + text: text + }; + } + }; + + return Tokenizer; +}(); + +/** + * Block-Level Grammar + */ + +var block = { + newline: /^(?: *(?:\n|$))+/, + code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/, + fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/, + hr: /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/, + heading: /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/, + blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/, + list: /^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/, + html: '^ {0,3}(?:' // optional indentation + + '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)' // (1) + + '|comment[^\\n]*(\\n+|$)' // (2) + + '|<\\?[\\s\\S]*?(?:\\?>\\n*|$)' // (3) + + '|\\n*|$)' // (4) + + '|\\n*|$)' // (5) + + '|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (6) + + '|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) open tag + + '|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) closing tag + + ')', + def: /^ {0,3}\[(label)\]: *(?:\n *)?]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/, + table: noopTest, + lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/, + // regex template, placeholders will be replaced according to different paragraph + // interruption rules of commonmark and the original markdown spec: + _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/, + text: /^[^\n]+/ +}; +block._label = /(?!\s*\])(?:\\.|[^\[\]\\])+/; +block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/; +block.def = edit(block.def).replace('label', block._label).replace('title', block._title).getRegex(); +block.bullet = /(?:[*+-]|\d{1,9}[.)])/; +block.listItemStart = edit(/^( *)(bull) */).replace('bull', block.bullet).getRegex(); +block.list = edit(block.list).replace(/bull/g, block.bullet).replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))').replace('def', '\\n+(?=' + block.def.source + ')').getRegex(); +block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + '|track|ul'; +block._comment = /|$)/; +block.html = edit(block.html, 'i').replace('comment', block._comment).replace('tag', block._tag).replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(); +block.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs +.replace('|table', '').replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt +.replace('html', ')|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks +.getRegex(); +block.blockquote = edit(block.blockquote).replace('paragraph', block.paragraph).getRegex(); +/** + * Normal Block Grammar + */ + +block.normal = merge({}, block); +/** + * GFM Block Grammar + */ + +block.gfm = merge({}, block.normal, { + table: '^ *([^\\n ].*\\|.*)\\n' // Header + + ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?' // Align + + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells + +}); +block.gfm.table = edit(block.gfm.table).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt +.replace('html', ')|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks +.getRegex(); +block.gfm.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs +.replace('table', block.gfm.table) // interrupt paragraphs with table +.replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt +.replace('html', ')|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks +.getRegex(); +/** + * Pedantic grammar (original John Gruber's loose markdown specification) + */ + +block.pedantic = merge({}, block.normal, { + html: edit('^ *(?:comment *(?:\\n|\\s*$)' + '|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)' // closed tag + + '|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))').replace('comment', block._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b').getRegex(), + def: /^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, + heading: /^(#{1,6})(.*)(?:\n+|$)/, + fences: noopTest, + // fences not supported + paragraph: edit(block.normal._paragraph).replace('hr', block.hr).replace('heading', ' *#{1,6} *[^\n]').replace('lheading', block.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex() +}); +/** + * Inline-Level Grammar + */ + +var inline = { + escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, + autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/, + url: noopTest, + tag: '^comment' + '|^' // self-closing tag + + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag + + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. + + '|^' // declaration, e.g. + + '|^', + // CDATA section + link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/, + reflink: /^!?\[(label)\]\[(ref)\]/, + nolink: /^!?\[(ref)\](?:\[\])?/, + reflinkSearch: 'reflink|nolink(?!\\()', + emStrong: { + lDelim: /^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/, + // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right. + // () Skip orphan inside strong () Consume to delim (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a + rDelimAst: /^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/, + rDelimUnd: /^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ // ^- Not allowed for _ + + }, + code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/, + br: /^( {2,}|\\)\n(?!\s*$)/, + del: noopTest, + text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~'; +inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex(); // sequences em should skip over [title](link), `code`, + +inline.blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g; +inline.escapedEmSt = /\\\*|\\_/g; +inline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex(); +inline.emStrong.lDelim = edit(inline.emStrong.lDelim).replace(/punct/g, inline._punctuation).getRegex(); +inline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g').replace(/punct/g, inline._punctuation).getRegex(); +inline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g').replace(/punct/g, inline._punctuation).getRegex(); +inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g; +inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/; +inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/; +inline.autolink = edit(inline.autolink).replace('scheme', inline._scheme).replace('email', inline._email).getRegex(); +inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/; +inline.tag = edit(inline.tag).replace('comment', inline._comment).replace('attribute', inline._attribute).getRegex(); +inline._label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/; +inline._href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/; +inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/; +inline.link = edit(inline.link).replace('label', inline._label).replace('href', inline._href).replace('title', inline._title).getRegex(); +inline.reflink = edit(inline.reflink).replace('label', inline._label).replace('ref', block._label).getRegex(); +inline.nolink = edit(inline.nolink).replace('ref', block._label).getRegex(); +inline.reflinkSearch = edit(inline.reflinkSearch, 'g').replace('reflink', inline.reflink).replace('nolink', inline.nolink).getRegex(); +/** + * Normal Inline Grammar + */ + +inline.normal = merge({}, inline); +/** + * Pedantic Inline Grammar + */ + +inline.pedantic = merge({}, inline.normal, { + strong: { + start: /^__|\*\*/, + middle: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, + endAst: /\*\*(?!\*)/g, + endUnd: /__(?!_)/g + }, + em: { + start: /^_|\*/, + middle: /^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/, + endAst: /\*(?!\*)/g, + endUnd: /_(?!_)/g + }, + link: edit(/^!?\[(label)\]\((.*?)\)/).replace('label', inline._label).getRegex(), + reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace('label', inline._label).getRegex() +}); +/** + * GFM Inline Grammar + */ + +inline.gfm = merge({}, inline.normal, { + escape: edit(inline.escape).replace('])', '~|])').getRegex(), + _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/, + url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, + _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/, + del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/, + text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\ 0.5) { + ch = 'x' + ch.toString(16); + } + + out += '&#' + ch + ';'; + } + + return out; +} +/** + * Block Lexer + */ + + +var Lexer = /*#__PURE__*/function () { + function Lexer(options) { + this.tokens = []; + this.tokens.links = Object.create(null); + this.options = options || exports.defaults; + this.options.tokenizer = this.options.tokenizer || new Tokenizer(); + this.tokenizer = this.options.tokenizer; + this.tokenizer.options = this.options; + this.tokenizer.lexer = this; + this.inlineQueue = []; + this.state = { + inLink: false, + inRawBlock: false, + top: true + }; + var rules = { + block: block.normal, + inline: inline.normal + }; + + if (this.options.pedantic) { + rules.block = block.pedantic; + rules.inline = inline.pedantic; + } else if (this.options.gfm) { + rules.block = block.gfm; + + if (this.options.breaks) { + rules.inline = inline.breaks; + } else { + rules.inline = inline.gfm; + } + } + + this.tokenizer.rules = rules; + } + /** + * Expose Rules + */ + + + /** + * Static Lex Method + */ + Lexer.lex = function lex(src, options) { + var lexer = new Lexer(options); + return lexer.lex(src); + } + /** + * Static Lex Inline Method + */ + ; + + Lexer.lexInline = function lexInline(src, options) { + var lexer = new Lexer(options); + return lexer.inlineTokens(src); + } + /** + * Preprocessing + */ + ; + + var _proto = Lexer.prototype; + + _proto.lex = function lex(src) { + src = src.replace(/\r\n|\r/g, '\n'); + this.blockTokens(src, this.tokens); + var next; + + while (next = this.inlineQueue.shift()) { + this.inlineTokens(next.src, next.tokens); + } + + return this.tokens; + } + /** + * Lexing + */ + ; + + _proto.blockTokens = function blockTokens(src, tokens) { + var _this = this; + + if (tokens === void 0) { + tokens = []; + } + + if (this.options.pedantic) { + src = src.replace(/\t/g, ' ').replace(/^ +$/gm, ''); + } else { + src = src.replace(/^( *)(\t+)/gm, function (_, leading, tabs) { + return leading + ' '.repeat(tabs.length); + }); + } + + var token, lastToken, cutSrc, lastParagraphClipped; + + while (src) { + if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some(function (extTokenizer) { + if (token = extTokenizer.call({ + lexer: _this + }, src, tokens)) { + src = src.substring(token.raw.length); + tokens.push(token); + return true; + } + + return false; + })) { + continue; + } // newline + + + if (token = this.tokenizer.space(src)) { + src = src.substring(token.raw.length); + + if (token.raw.length === 1 && tokens.length > 0) { + // if there's a single \n as a spacer, it's terminating the last line, + // so move it there so that we don't get unecessary paragraph tags + tokens[tokens.length - 1].raw += '\n'; + } else { + tokens.push(token); + } + + continue; + } // code + + + if (token = this.tokenizer.code(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; // An indented code block cannot interrupt a paragraph. + + if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.text; + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else { + tokens.push(token); + } + + continue; + } // fences + + + if (token = this.tokenizer.fences(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // heading + + + if (token = this.tokenizer.heading(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // hr + + + if (token = this.tokenizer.hr(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // blockquote + + + if (token = this.tokenizer.blockquote(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // list + + + if (token = this.tokenizer.list(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // html + + + if (token = this.tokenizer.html(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // def + + + if (token = this.tokenizer.def(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + + if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.raw; + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else if (!this.tokens.links[token.tag]) { + this.tokens.links[token.tag] = { + href: token.href, + title: token.title + }; + } + + continue; + } // table (gfm) + + + if (token = this.tokenizer.table(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // lheading + + + if (token = this.tokenizer.lheading(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // top-level paragraph + // prevent paragraph consuming extensions by clipping 'src' to extension start + + + cutSrc = src; + + if (this.options.extensions && this.options.extensions.startBlock) { + (function () { + var startIndex = Infinity; + var tempSrc = src.slice(1); + var tempStart = void 0; + + _this.options.extensions.startBlock.forEach(function (getStartIndex) { + tempStart = getStartIndex.call({ + lexer: this + }, tempSrc); + + if (typeof tempStart === 'number' && tempStart >= 0) { + startIndex = Math.min(startIndex, tempStart); + } + }); + + if (startIndex < Infinity && startIndex >= 0) { + cutSrc = src.substring(0, startIndex + 1); + } + })(); + } + + if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) { + lastToken = tokens[tokens.length - 1]; + + if (lastParagraphClipped && lastToken.type === 'paragraph') { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.text; + this.inlineQueue.pop(); + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else { + tokens.push(token); + } + + lastParagraphClipped = cutSrc.length !== src.length; + src = src.substring(token.raw.length); + continue; + } // text + + + if (token = this.tokenizer.text(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + + if (lastToken && lastToken.type === 'text') { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.text; + this.inlineQueue.pop(); + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else { + tokens.push(token); + } + + continue; + } + + if (src) { + var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0); + + if (this.options.silent) { + console.error(errMsg); + break; + } else { + throw new Error(errMsg); + } + } + } + + this.state.top = true; + return tokens; + }; + + _proto.inline = function inline(src, tokens) { + if (tokens === void 0) { + tokens = []; + } + + this.inlineQueue.push({ + src: src, + tokens: tokens + }); + return tokens; + } + /** + * Lexing/Compiling + */ + ; + + _proto.inlineTokens = function inlineTokens(src, tokens) { + var _this2 = this; + + if (tokens === void 0) { + tokens = []; + } + + var token, lastToken, cutSrc; // String with links masked to avoid interference with em and strong + + var maskedSrc = src; + var match; + var keepPrevChar, prevChar; // Mask out reflinks + + if (this.tokens.links) { + var links = Object.keys(this.tokens.links); + + if (links.length > 0) { + while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) { + if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) { + maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex); + } + } + } + } // Mask out other blocks + + + while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) { + maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex); + } // Mask out escaped em & strong delimiters + + + while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) { + maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex); + } + + while (src) { + if (!keepPrevChar) { + prevChar = ''; + } + + keepPrevChar = false; // extensions + + if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some(function (extTokenizer) { + if (token = extTokenizer.call({ + lexer: _this2 + }, src, tokens)) { + src = src.substring(token.raw.length); + tokens.push(token); + return true; + } + + return false; + })) { + continue; + } // escape + + + if (token = this.tokenizer.escape(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // tag + + + if (token = this.tokenizer.tag(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + + if (lastToken && token.type === 'text' && lastToken.type === 'text') { + lastToken.raw += token.raw; + lastToken.text += token.text; + } else { + tokens.push(token); + } + + continue; + } // link + + + if (token = this.tokenizer.link(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // reflink, nolink + + + if (token = this.tokenizer.reflink(src, this.tokens.links)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + + if (lastToken && token.type === 'text' && lastToken.type === 'text') { + lastToken.raw += token.raw; + lastToken.text += token.text; + } else { + tokens.push(token); + } + + continue; + } // em & strong + + + if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // code + + + if (token = this.tokenizer.codespan(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // br + + + if (token = this.tokenizer.br(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // del (gfm) + + + if (token = this.tokenizer.del(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // autolink + + + if (token = this.tokenizer.autolink(src, mangle)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // url (gfm) + + + if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // text + // prevent inlineText consuming extensions by clipping 'src' to extension start + + + cutSrc = src; + + if (this.options.extensions && this.options.extensions.startInline) { + (function () { + var startIndex = Infinity; + var tempSrc = src.slice(1); + var tempStart = void 0; + + _this2.options.extensions.startInline.forEach(function (getStartIndex) { + tempStart = getStartIndex.call({ + lexer: this + }, tempSrc); + + if (typeof tempStart === 'number' && tempStart >= 0) { + startIndex = Math.min(startIndex, tempStart); + } + }); + + if (startIndex < Infinity && startIndex >= 0) { + cutSrc = src.substring(0, startIndex + 1); + } + })(); + } + + if (token = this.tokenizer.inlineText(cutSrc, smartypants)) { + src = src.substring(token.raw.length); + + if (token.raw.slice(-1) !== '_') { + // Track prevChar before string of ____ started + prevChar = token.raw.slice(-1); + } + + keepPrevChar = true; + lastToken = tokens[tokens.length - 1]; + + if (lastToken && lastToken.type === 'text') { + lastToken.raw += token.raw; + lastToken.text += token.text; + } else { + tokens.push(token); + } + + continue; + } + + if (src) { + var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0); + + if (this.options.silent) { + console.error(errMsg); + break; + } else { + throw new Error(errMsg); + } + } + } + + return tokens; + }; + + _createClass(Lexer, null, [{ + key: "rules", + get: function get() { + return { + block: block, + inline: inline + }; + } + }]); + + return Lexer; +}(); + +/** + * Renderer + */ + +var Renderer = /*#__PURE__*/function () { + function Renderer(options) { + this.options = options || exports.defaults; + } + + var _proto = Renderer.prototype; + + _proto.code = function code(_code, infostring, escaped) { + var lang = (infostring || '').match(/\S*/)[0]; + + if (this.options.highlight) { + var out = this.options.highlight(_code, lang); + + if (out != null && out !== _code) { + escaped = true; + _code = out; + } + } + + _code = _code.replace(/\n$/, '') + '\n'; + + if (!lang) { + return '
' + (escaped ? _code : escape(_code, true)) + '
\n'; + } + + return '
' + (escaped ? _code : escape(_code, true)) + '
\n'; + } + /** + * @param {string} quote + */ + ; + + _proto.blockquote = function blockquote(quote) { + return "
\n" + quote + "
\n"; + }; + + _proto.html = function html(_html) { + return _html; + } + /** + * @param {string} text + * @param {string} level + * @param {string} raw + * @param {any} slugger + */ + ; + + _proto.heading = function heading(text, level, raw, slugger) { + if (this.options.headerIds) { + var id = this.options.headerPrefix + slugger.slug(raw); + return "" + text + "\n"; + } // ignore IDs + + + return "" + text + "\n"; + }; + + _proto.hr = function hr() { + return this.options.xhtml ? '
\n' : '
\n'; + }; + + _proto.list = function list(body, ordered, start) { + var type = ordered ? 'ol' : 'ul', + startatt = ordered && start !== 1 ? ' start="' + start + '"' : ''; + return '<' + type + startatt + '>\n' + body + '\n'; + } + /** + * @param {string} text + */ + ; + + _proto.listitem = function listitem(text) { + return "
  • " + text + "
  • \n"; + }; + + _proto.checkbox = function checkbox(checked) { + return ' '; + } + /** + * @param {string} text + */ + ; + + _proto.paragraph = function paragraph(text) { + return "

    " + text + "

    \n"; + } + /** + * @param {string} header + * @param {string} body + */ + ; + + _proto.table = function table(header, body) { + if (body) body = "" + body + ""; + return '\n' + '\n' + header + '\n' + body + '
    \n'; + } + /** + * @param {string} content + */ + ; + + _proto.tablerow = function tablerow(content) { + return "\n" + content + "\n"; + }; + + _proto.tablecell = function tablecell(content, flags) { + var type = flags.header ? 'th' : 'td'; + var tag = flags.align ? "<" + type + " align=\"" + flags.align + "\">" : "<" + type + ">"; + return tag + content + ("\n"); + } + /** + * span level renderer + * @param {string} text + */ + ; + + _proto.strong = function strong(text) { + return "" + text + ""; + } + /** + * @param {string} text + */ + ; + + _proto.em = function em(text) { + return "" + text + ""; + } + /** + * @param {string} text + */ + ; + + _proto.codespan = function codespan(text) { + return "" + text + ""; + }; + + _proto.br = function br() { + return this.options.xhtml ? '
    ' : '
    '; + } + /** + * @param {string} text + */ + ; + + _proto.del = function del(text) { + return "" + text + ""; + } + /** + * @param {string} href + * @param {string} title + * @param {string} text + */ + ; + + _proto.link = function link(href, title, text) { + href = cleanUrl(this.options.sanitize, this.options.baseUrl, href); + + if (href === null) { + return text; + } + + var out = '
    '; + return out; + } + /** + * @param {string} href + * @param {string} title + * @param {string} text + */ + ; + + _proto.image = function image(href, title, text) { + href = cleanUrl(this.options.sanitize, this.options.baseUrl, href); + + if (href === null) { + return text; + } + + var out = "\""' : '>'; + return out; + }; + + _proto.text = function text(_text) { + return _text; + }; + + return Renderer; +}(); + +/** + * TextRenderer + * returns only the textual part of the token + */ +var TextRenderer = /*#__PURE__*/function () { + function TextRenderer() {} + + var _proto = TextRenderer.prototype; + + // no need for block level renderers + _proto.strong = function strong(text) { + return text; + }; + + _proto.em = function em(text) { + return text; + }; + + _proto.codespan = function codespan(text) { + return text; + }; + + _proto.del = function del(text) { + return text; + }; + + _proto.html = function html(text) { + return text; + }; + + _proto.text = function text(_text) { + return _text; + }; + + _proto.link = function link(href, title, text) { + return '' + text; + }; + + _proto.image = function image(href, title, text) { + return '' + text; + }; + + _proto.br = function br() { + return ''; + }; + + return TextRenderer; +}(); + +/** + * Slugger generates header id + */ +var Slugger = /*#__PURE__*/function () { + function Slugger() { + this.seen = {}; + } + /** + * @param {string} value + */ + + + var _proto = Slugger.prototype; + + _proto.serialize = function serialize(value) { + return value.toLowerCase().trim() // remove html tags + .replace(/<[!\/a-z].*?>/ig, '') // remove unwanted chars + .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '').replace(/\s/g, '-'); + } + /** + * Finds the next safe (unique) slug to use + * @param {string} originalSlug + * @param {boolean} isDryRun + */ + ; + + _proto.getNextSafeSlug = function getNextSafeSlug(originalSlug, isDryRun) { + var slug = originalSlug; + var occurenceAccumulator = 0; + + if (this.seen.hasOwnProperty(slug)) { + occurenceAccumulator = this.seen[originalSlug]; + + do { + occurenceAccumulator++; + slug = originalSlug + '-' + occurenceAccumulator; + } while (this.seen.hasOwnProperty(slug)); + } + + if (!isDryRun) { + this.seen[originalSlug] = occurenceAccumulator; + this.seen[slug] = 0; + } + + return slug; + } + /** + * Convert string to unique id + * @param {object} [options] + * @param {boolean} [options.dryrun] Generates the next unique slug without + * updating the internal accumulator. + */ + ; + + _proto.slug = function slug(value, options) { + if (options === void 0) { + options = {}; + } + + var slug = this.serialize(value); + return this.getNextSafeSlug(slug, options.dryrun); + }; + + return Slugger; +}(); + +/** + * Parsing & Compiling + */ + +var Parser = /*#__PURE__*/function () { + function Parser(options) { + this.options = options || exports.defaults; + this.options.renderer = this.options.renderer || new Renderer(); + this.renderer = this.options.renderer; + this.renderer.options = this.options; + this.textRenderer = new TextRenderer(); + this.slugger = new Slugger(); + } + /** + * Static Parse Method + */ + + + Parser.parse = function parse(tokens, options) { + var parser = new Parser(options); + return parser.parse(tokens); + } + /** + * Static Parse Inline Method + */ + ; + + Parser.parseInline = function parseInline(tokens, options) { + var parser = new Parser(options); + return parser.parseInline(tokens); + } + /** + * Parse Loop + */ + ; + + var _proto = Parser.prototype; + + _proto.parse = function parse(tokens, top) { + if (top === void 0) { + top = true; + } + + var out = '', + i, + j, + k, + l2, + l3, + row, + cell, + header, + body, + token, + ordered, + start, + loose, + itemBody, + item, + checked, + task, + checkbox, + ret; + var l = tokens.length; + + for (i = 0; i < l; i++) { + token = tokens[i]; // Run any renderer extensions + + if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) { + ret = this.options.extensions.renderers[token.type].call({ + parser: this + }, token); + + if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) { + out += ret || ''; + continue; + } + } + + switch (token.type) { + case 'space': + { + continue; + } + + case 'hr': + { + out += this.renderer.hr(); + continue; + } + + case 'heading': + { + out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape(this.parseInline(token.tokens, this.textRenderer)), this.slugger); + continue; + } + + case 'code': + { + out += this.renderer.code(token.text, token.lang, token.escaped); + continue; + } + + case 'table': + { + header = ''; // header + + cell = ''; + l2 = token.header.length; + + for (j = 0; j < l2; j++) { + cell += this.renderer.tablecell(this.parseInline(token.header[j].tokens), { + header: true, + align: token.align[j] + }); + } + + header += this.renderer.tablerow(cell); + body = ''; + l2 = token.rows.length; + + for (j = 0; j < l2; j++) { + row = token.rows[j]; + cell = ''; + l3 = row.length; + + for (k = 0; k < l3; k++) { + cell += this.renderer.tablecell(this.parseInline(row[k].tokens), { + header: false, + align: token.align[k] + }); + } + + body += this.renderer.tablerow(cell); + } + + out += this.renderer.table(header, body); + continue; + } + + case 'blockquote': + { + body = this.parse(token.tokens); + out += this.renderer.blockquote(body); + continue; + } + + case 'list': + { + ordered = token.ordered; + start = token.start; + loose = token.loose; + l2 = token.items.length; + body = ''; + + for (j = 0; j < l2; j++) { + item = token.items[j]; + checked = item.checked; + task = item.task; + itemBody = ''; + + if (item.task) { + checkbox = this.renderer.checkbox(checked); + + if (loose) { + if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') { + item.tokens[0].text = checkbox + ' ' + item.tokens[0].text; + + if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') { + item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text; + } + } else { + item.tokens.unshift({ + type: 'text', + text: checkbox + }); + } + } else { + itemBody += checkbox; + } + } + + itemBody += this.parse(item.tokens, loose); + body += this.renderer.listitem(itemBody, task, checked); + } + + out += this.renderer.list(body, ordered, start); + continue; + } + + case 'html': + { + // TODO parse inline content if parameter markdown=1 + out += this.renderer.html(token.text); + continue; + } + + case 'paragraph': + { + out += this.renderer.paragraph(this.parseInline(token.tokens)); + continue; + } + + case 'text': + { + body = token.tokens ? this.parseInline(token.tokens) : token.text; + + while (i + 1 < l && tokens[i + 1].type === 'text') { + token = tokens[++i]; + body += '\n' + (token.tokens ? this.parseInline(token.tokens) : token.text); + } + + out += top ? this.renderer.paragraph(body) : body; + continue; + } + + default: + { + var errMsg = 'Token with "' + token.type + '" type was not found.'; + + if (this.options.silent) { + console.error(errMsg); + return; + } else { + throw new Error(errMsg); + } + } + } + } + + return out; + } + /** + * Parse Inline Tokens + */ + ; + + _proto.parseInline = function parseInline(tokens, renderer) { + renderer = renderer || this.renderer; + var out = '', + i, + token, + ret; + var l = tokens.length; + + for (i = 0; i < l; i++) { + token = tokens[i]; // Run any renderer extensions + + if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) { + ret = this.options.extensions.renderers[token.type].call({ + parser: this + }, token); + + if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) { + out += ret || ''; + continue; + } + } + + switch (token.type) { + case 'escape': + { + out += renderer.text(token.text); + break; + } + + case 'html': + { + out += renderer.html(token.text); + break; + } + + case 'link': + { + out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer)); + break; + } + + case 'image': + { + out += renderer.image(token.href, token.title, token.text); + break; + } + + case 'strong': + { + out += renderer.strong(this.parseInline(token.tokens, renderer)); + break; + } + + case 'em': + { + out += renderer.em(this.parseInline(token.tokens, renderer)); + break; + } + + case 'codespan': + { + out += renderer.codespan(token.text); + break; + } + + case 'br': + { + out += renderer.br(); + break; + } + + case 'del': + { + out += renderer.del(this.parseInline(token.tokens, renderer)); + break; + } + + case 'text': + { + out += renderer.text(token.text); + break; + } + + default: + { + var errMsg = 'Token with "' + token.type + '" type was not found.'; + + if (this.options.silent) { + console.error(errMsg); + return; + } else { + throw new Error(errMsg); + } + } + } + } + + return out; + }; + + return Parser; +}(); + +/** + * Marked + */ + +function marked(src, opt, callback) { + // throw error in case of non string input + if (typeof src === 'undefined' || src === null) { + throw new Error('marked(): input parameter is undefined or null'); + } + + if (typeof src !== 'string') { + throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected'); + } + + if (typeof opt === 'function') { + callback = opt; + opt = null; + } + + opt = merge({}, marked.defaults, opt || {}); + checkSanitizeDeprecation(opt); + + if (callback) { + var highlight = opt.highlight; + var tokens; + + try { + tokens = Lexer.lex(src, opt); + } catch (e) { + return callback(e); + } + + var done = function done(err) { + var out; + + if (!err) { + try { + if (opt.walkTokens) { + marked.walkTokens(tokens, opt.walkTokens); + } + + out = Parser.parse(tokens, opt); + } catch (e) { + err = e; + } + } + + opt.highlight = highlight; + return err ? callback(err) : callback(null, out); + }; + + if (!highlight || highlight.length < 3) { + return done(); + } + + delete opt.highlight; + if (!tokens.length) return done(); + var pending = 0; + marked.walkTokens(tokens, function (token) { + if (token.type === 'code') { + pending++; + setTimeout(function () { + highlight(token.text, token.lang, function (err, code) { + if (err) { + return done(err); + } + + if (code != null && code !== token.text) { + token.text = code; + token.escaped = true; + } + + pending--; + + if (pending === 0) { + done(); + } + }); + }, 0); + } + }); + + if (pending === 0) { + done(); + } + + return; + } + + function onError(e) { + e.message += '\nPlease report this to https://github.com/markedjs/marked.'; + + if (opt.silent) { + return '

    An error occurred:

    ' + escape(e.message + '', true) + '
    '; + } + + throw e; + } + + try { + var _tokens = Lexer.lex(src, opt); + + if (opt.walkTokens) { + if (opt.async) { + return Promise.all(marked.walkTokens(_tokens, opt.walkTokens)).then(function () { + return Parser.parse(_tokens, opt); + })["catch"](onError); + } + + marked.walkTokens(_tokens, opt.walkTokens); + } + + return Parser.parse(_tokens, opt); + } catch (e) { + onError(e); + } +} +/** + * Options + */ + +marked.options = marked.setOptions = function (opt) { + merge(marked.defaults, opt); + changeDefaults(marked.defaults); + return marked; +}; + +marked.getDefaults = getDefaults; +marked.defaults = exports.defaults; +/** + * Use Extension + */ + +marked.use = function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var opts = merge.apply(void 0, [{}].concat(args)); + var extensions = marked.defaults.extensions || { + renderers: {}, + childTokens: {} + }; + var hasExtensions; + args.forEach(function (pack) { + // ==-- Parse "addon" extensions --== // + if (pack.extensions) { + hasExtensions = true; + pack.extensions.forEach(function (ext) { + if (!ext.name) { + throw new Error('extension name required'); + } + + if (ext.renderer) { + // Renderer extensions + var prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null; + + if (prevRenderer) { + // Replace extension with func to run new extension but fall back if false + extensions.renderers[ext.name] = function () { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var ret = ext.renderer.apply(this, args); + + if (ret === false) { + ret = prevRenderer.apply(this, args); + } + + return ret; + }; + } else { + extensions.renderers[ext.name] = ext.renderer; + } + } + + if (ext.tokenizer) { + // Tokenizer Extensions + if (!ext.level || ext.level !== 'block' && ext.level !== 'inline') { + throw new Error("extension level must be 'block' or 'inline'"); + } + + if (extensions[ext.level]) { + extensions[ext.level].unshift(ext.tokenizer); + } else { + extensions[ext.level] = [ext.tokenizer]; + } + + if (ext.start) { + // Function to check for start of token + if (ext.level === 'block') { + if (extensions.startBlock) { + extensions.startBlock.push(ext.start); + } else { + extensions.startBlock = [ext.start]; + } + } else if (ext.level === 'inline') { + if (extensions.startInline) { + extensions.startInline.push(ext.start); + } else { + extensions.startInline = [ext.start]; + } + } + } + } + + if (ext.childTokens) { + // Child tokens to be visited by walkTokens + extensions.childTokens[ext.name] = ext.childTokens; + } + }); + } // ==-- Parse "overwrite" extensions --== // + + + if (pack.renderer) { + (function () { + var renderer = marked.defaults.renderer || new Renderer(); + + var _loop = function _loop(prop) { + var prevRenderer = renderer[prop]; // Replace renderer with func to run extension, but fall back if false + + renderer[prop] = function () { + for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + var ret = pack.renderer[prop].apply(renderer, args); + + if (ret === false) { + ret = prevRenderer.apply(renderer, args); + } + + return ret; + }; + }; + + for (var prop in pack.renderer) { + _loop(prop); + } + + opts.renderer = renderer; + })(); + } + + if (pack.tokenizer) { + (function () { + var tokenizer = marked.defaults.tokenizer || new Tokenizer(); + + var _loop2 = function _loop2(prop) { + var prevTokenizer = tokenizer[prop]; // Replace tokenizer with func to run extension, but fall back if false + + tokenizer[prop] = function () { + for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } + + var ret = pack.tokenizer[prop].apply(tokenizer, args); + + if (ret === false) { + ret = prevTokenizer.apply(tokenizer, args); + } + + return ret; + }; + }; + + for (var prop in pack.tokenizer) { + _loop2(prop); + } + + opts.tokenizer = tokenizer; + })(); + } // ==-- Parse WalkTokens extensions --== // + + + if (pack.walkTokens) { + var _walkTokens = marked.defaults.walkTokens; + + opts.walkTokens = function (token) { + var values = []; + values.push(pack.walkTokens.call(this, token)); + + if (_walkTokens) { + values = values.concat(_walkTokens.call(this, token)); + } + + return values; + }; + } + + if (hasExtensions) { + opts.extensions = extensions; + } + + marked.setOptions(opts); + }); +}; +/** + * Run callback for every token + */ + + +marked.walkTokens = function (tokens, callback) { + var values = []; + + var _loop3 = function _loop3() { + var token = _step.value; + values = values.concat(callback.call(marked, token)); + + switch (token.type) { + case 'table': + { + for (var _iterator2 = _createForOfIteratorHelperLoose(token.header), _step2; !(_step2 = _iterator2()).done;) { + var cell = _step2.value; + values = values.concat(marked.walkTokens(cell.tokens, callback)); + } + + for (var _iterator3 = _createForOfIteratorHelperLoose(token.rows), _step3; !(_step3 = _iterator3()).done;) { + var row = _step3.value; + + for (var _iterator4 = _createForOfIteratorHelperLoose(row), _step4; !(_step4 = _iterator4()).done;) { + var _cell = _step4.value; + values = values.concat(marked.walkTokens(_cell.tokens, callback)); + } + } + + break; + } + + case 'list': + { + values = values.concat(marked.walkTokens(token.items, callback)); + break; + } + + default: + { + if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) { + // Walk any extensions + marked.defaults.extensions.childTokens[token.type].forEach(function (childTokens) { + values = values.concat(marked.walkTokens(token[childTokens], callback)); + }); + } else if (token.tokens) { + values = values.concat(marked.walkTokens(token.tokens, callback)); + } + } + } + }; + + for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) { + _loop3(); + } + + return values; +}; +/** + * Parse Inline + * @param {string} src + */ + + +marked.parseInline = function (src, opt) { + // throw error in case of non string input + if (typeof src === 'undefined' || src === null) { + throw new Error('marked.parseInline(): input parameter is undefined or null'); + } + + if (typeof src !== 'string') { + throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected'); + } + + opt = merge({}, marked.defaults, opt || {}); + checkSanitizeDeprecation(opt); + + try { + var tokens = Lexer.lexInline(src, opt); + + if (opt.walkTokens) { + marked.walkTokens(tokens, opt.walkTokens); + } + + return Parser.parseInline(tokens, opt); + } catch (e) { + e.message += '\nPlease report this to https://github.com/markedjs/marked.'; + + if (opt.silent) { + return '

    An error occurred:

    ' + escape(e.message + '', true) + '
    '; + } + + throw e; + } +}; +/** + * Expose + */ + + +marked.Parser = Parser; +marked.parser = Parser.parse; +marked.Renderer = Renderer; +marked.TextRenderer = TextRenderer; +marked.Lexer = Lexer; +marked.lexer = Lexer.lex; +marked.Tokenizer = Tokenizer; +marked.Slugger = Slugger; +marked.parse = marked; +var options = marked.options; +var setOptions = marked.setOptions; +var use = marked.use; +var walkTokens = marked.walkTokens; +var parseInline = marked.parseInline; +var parse = marked; +var parser = Parser.parse; +var lexer = Lexer.lex; + +exports.Lexer = Lexer; +exports.Parser = Parser; +exports.Renderer = Renderer; +exports.Slugger = Slugger; +exports.TextRenderer = TextRenderer; +exports.Tokenizer = Tokenizer; +exports.getDefaults = getDefaults; +exports.lexer = lexer; +exports.marked = marked; +exports.options = options; +exports.parse = parse; +exports.parseInline = parseInline; +exports.parser = parser; +exports.setOptions = setOptions; +exports.use = use; +exports.walkTokens = walkTokens; diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/lib/marked.esm.js b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/lib/marked.esm.js new file mode 100644 index 0000000..729c834 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/lib/marked.esm.js @@ -0,0 +1,2803 @@ +/** + * marked - a markdown parser + * Copyright (c) 2011-2022, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ + +/** + * DO NOT EDIT THIS FILE + * The code in this file is generated from files in ./src/ + */ + +function getDefaults() { + return { + async: false, + baseUrl: null, + breaks: false, + extensions: null, + gfm: true, + headerIds: true, + headerPrefix: '', + highlight: null, + langPrefix: 'language-', + mangle: true, + pedantic: false, + renderer: null, + sanitize: false, + sanitizer: null, + silent: false, + smartLists: false, + smartypants: false, + tokenizer: null, + walkTokens: null, + xhtml: false + }; +} + +let defaults = getDefaults(); + +function changeDefaults(newDefaults) { + defaults = newDefaults; +} + +/** + * Helpers + */ +const escapeTest = /[&<>"']/; +const escapeReplace = /[&<>"']/g; +const escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/; +const escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g; +const escapeReplacements = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; +const getEscapeReplacement = (ch) => escapeReplacements[ch]; +function escape(html, encode) { + if (encode) { + if (escapeTest.test(html)) { + return html.replace(escapeReplace, getEscapeReplacement); + } + } else { + if (escapeTestNoEncode.test(html)) { + return html.replace(escapeReplaceNoEncode, getEscapeReplacement); + } + } + + return html; +} + +const unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig; + +/** + * @param {string} html + */ +function unescape(html) { + // explicitly match decimal, hex, and named HTML entities + return html.replace(unescapeTest, (_, n) => { + n = n.toLowerCase(); + if (n === 'colon') return ':'; + if (n.charAt(0) === '#') { + return n.charAt(1) === 'x' + ? String.fromCharCode(parseInt(n.substring(2), 16)) + : String.fromCharCode(+n.substring(1)); + } + return ''; + }); +} + +const caret = /(^|[^\[])\^/g; + +/** + * @param {string | RegExp} regex + * @param {string} opt + */ +function edit(regex, opt) { + regex = typeof regex === 'string' ? regex : regex.source; + opt = opt || ''; + const obj = { + replace: (name, val) => { + val = val.source || val; + val = val.replace(caret, '$1'); + regex = regex.replace(name, val); + return obj; + }, + getRegex: () => { + return new RegExp(regex, opt); + } + }; + return obj; +} + +const nonWordAndColonTest = /[^\w:]/g; +const originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i; + +/** + * @param {boolean} sanitize + * @param {string} base + * @param {string} href + */ +function cleanUrl(sanitize, base, href) { + if (sanitize) { + let prot; + try { + prot = decodeURIComponent(unescape(href)) + .replace(nonWordAndColonTest, '') + .toLowerCase(); + } catch (e) { + return null; + } + if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) { + return null; + } + } + if (base && !originIndependentUrl.test(href)) { + href = resolveUrl(base, href); + } + try { + href = encodeURI(href).replace(/%25/g, '%'); + } catch (e) { + return null; + } + return href; +} + +const baseUrls = {}; +const justDomain = /^[^:]+:\/*[^/]*$/; +const protocol = /^([^:]+:)[\s\S]*$/; +const domain = /^([^:]+:\/*[^/]*)[\s\S]*$/; + +/** + * @param {string} base + * @param {string} href + */ +function resolveUrl(base, href) { + if (!baseUrls[' ' + base]) { + // we can ignore everything in base after the last slash of its path component, + // but we might need to add _that_ + // https://tools.ietf.org/html/rfc3986#section-3 + if (justDomain.test(base)) { + baseUrls[' ' + base] = base + '/'; + } else { + baseUrls[' ' + base] = rtrim(base, '/', true); + } + } + base = baseUrls[' ' + base]; + const relativeBase = base.indexOf(':') === -1; + + if (href.substring(0, 2) === '//') { + if (relativeBase) { + return href; + } + return base.replace(protocol, '$1') + href; + } else if (href.charAt(0) === '/') { + if (relativeBase) { + return href; + } + return base.replace(domain, '$1') + href; + } else { + return base + href; + } +} + +const noopTest = { exec: function noopTest() {} }; + +function merge(obj) { + let i = 1, + target, + key; + + for (; i < arguments.length; i++) { + target = arguments[i]; + for (key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + obj[key] = target[key]; + } + } + } + + return obj; +} + +function splitCells(tableRow, count) { + // ensure that every cell-delimiting pipe has a space + // before it to distinguish it from an escaped pipe + const row = tableRow.replace(/\|/g, (match, offset, str) => { + let escaped = false, + curr = offset; + while (--curr >= 0 && str[curr] === '\\') escaped = !escaped; + if (escaped) { + // odd number of slashes means | is escaped + // so we leave it alone + return '|'; + } else { + // add space before unescaped | + return ' |'; + } + }), + cells = row.split(/ \|/); + let i = 0; + + // First/last cell in a row cannot be empty if it has no leading/trailing pipe + if (!cells[0].trim()) { cells.shift(); } + if (cells.length > 0 && !cells[cells.length - 1].trim()) { cells.pop(); } + + if (cells.length > count) { + cells.splice(count); + } else { + while (cells.length < count) cells.push(''); + } + + for (; i < cells.length; i++) { + // leading or trailing whitespace is ignored per the gfm spec + cells[i] = cells[i].trim().replace(/\\\|/g, '|'); + } + return cells; +} + +/** + * Remove trailing 'c's. Equivalent to str.replace(/c*$/, ''). + * /c*$/ is vulnerable to REDOS. + * + * @param {string} str + * @param {string} c + * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey. + */ +function rtrim(str, c, invert) { + const l = str.length; + if (l === 0) { + return ''; + } + + // Length of suffix matching the invert condition. + let suffLen = 0; + + // Step left until we fail to match the invert condition. + while (suffLen < l) { + const currChar = str.charAt(l - suffLen - 1); + if (currChar === c && !invert) { + suffLen++; + } else if (currChar !== c && invert) { + suffLen++; + } else { + break; + } + } + + return str.slice(0, l - suffLen); +} + +function findClosingBracket(str, b) { + if (str.indexOf(b[1]) === -1) { + return -1; + } + const l = str.length; + let level = 0, + i = 0; + for (; i < l; i++) { + if (str[i] === '\\') { + i++; + } else if (str[i] === b[0]) { + level++; + } else if (str[i] === b[1]) { + level--; + if (level < 0) { + return i; + } + } + } + return -1; +} + +function checkSanitizeDeprecation(opt) { + if (opt && opt.sanitize && !opt.silent) { + console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options'); + } +} + +// copied from https://stackoverflow.com/a/5450113/806777 +/** + * @param {string} pattern + * @param {number} count + */ +function repeatString(pattern, count) { + if (count < 1) { + return ''; + } + let result = ''; + while (count > 1) { + if (count & 1) { + result += pattern; + } + count >>= 1; + pattern += pattern; + } + return result + pattern; +} + +function outputLink(cap, link, raw, lexer) { + const href = link.href; + const title = link.title ? escape(link.title) : null; + const text = cap[1].replace(/\\([\[\]])/g, '$1'); + + if (cap[0].charAt(0) !== '!') { + lexer.state.inLink = true; + const token = { + type: 'link', + raw, + href, + title, + text, + tokens: lexer.inlineTokens(text) + }; + lexer.state.inLink = false; + return token; + } + return { + type: 'image', + raw, + href, + title, + text: escape(text) + }; +} + +function indentCodeCompensation(raw, text) { + const matchIndentToCode = raw.match(/^(\s+)(?:```)/); + + if (matchIndentToCode === null) { + return text; + } + + const indentToCode = matchIndentToCode[1]; + + return text + .split('\n') + .map(node => { + const matchIndentInNode = node.match(/^\s+/); + if (matchIndentInNode === null) { + return node; + } + + const [indentInNode] = matchIndentInNode; + + if (indentInNode.length >= indentToCode.length) { + return node.slice(indentToCode.length); + } + + return node; + }) + .join('\n'); +} + +/** + * Tokenizer + */ +class Tokenizer { + constructor(options) { + this.options = options || defaults; + } + + space(src) { + const cap = this.rules.block.newline.exec(src); + if (cap && cap[0].length > 0) { + return { + type: 'space', + raw: cap[0] + }; + } + } + + code(src) { + const cap = this.rules.block.code.exec(src); + if (cap) { + const text = cap[0].replace(/^ {1,4}/gm, ''); + return { + type: 'code', + raw: cap[0], + codeBlockStyle: 'indented', + text: !this.options.pedantic + ? rtrim(text, '\n') + : text + }; + } + } + + fences(src) { + const cap = this.rules.block.fences.exec(src); + if (cap) { + const raw = cap[0]; + const text = indentCodeCompensation(raw, cap[3] || ''); + + return { + type: 'code', + raw, + lang: cap[2] ? cap[2].trim() : cap[2], + text + }; + } + } + + heading(src) { + const cap = this.rules.block.heading.exec(src); + if (cap) { + let text = cap[2].trim(); + + // remove trailing #s + if (/#$/.test(text)) { + const trimmed = rtrim(text, '#'); + if (this.options.pedantic) { + text = trimmed.trim(); + } else if (!trimmed || / $/.test(trimmed)) { + // CommonMark requires space before trailing #s + text = trimmed.trim(); + } + } + + return { + type: 'heading', + raw: cap[0], + depth: cap[1].length, + text, + tokens: this.lexer.inline(text) + }; + } + } + + hr(src) { + const cap = this.rules.block.hr.exec(src); + if (cap) { + return { + type: 'hr', + raw: cap[0] + }; + } + } + + blockquote(src) { + const cap = this.rules.block.blockquote.exec(src); + if (cap) { + const text = cap[0].replace(/^ *>[ \t]?/gm, ''); + + return { + type: 'blockquote', + raw: cap[0], + tokens: this.lexer.blockTokens(text, []), + text + }; + } + } + + list(src) { + let cap = this.rules.block.list.exec(src); + if (cap) { + let raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine, + line, nextLine, rawLine, itemContents, endEarly; + + let bull = cap[1].trim(); + const isordered = bull.length > 1; + + const list = { + type: 'list', + raw: '', + ordered: isordered, + start: isordered ? +bull.slice(0, -1) : '', + loose: false, + items: [] + }; + + bull = isordered ? `\\d{1,9}\\${bull.slice(-1)}` : `\\${bull}`; + + if (this.options.pedantic) { + bull = isordered ? bull : '[*+-]'; + } + + // Get next list item + const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\t ][^\\n]*)?(?:\\n|$))`); + + // Check if current bullet point can start a new List Item + while (src) { + endEarly = false; + if (!(cap = itemRegex.exec(src))) { + break; + } + + if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?) + break; + } + + raw = cap[0]; + src = src.substring(raw.length); + + line = cap[2].split('\n', 1)[0]; + nextLine = src.split('\n', 1)[0]; + + if (this.options.pedantic) { + indent = 2; + itemContents = line.trimLeft(); + } else { + indent = cap[2].search(/[^ ]/); // Find first non-space char + indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent + itemContents = line.slice(indent); + indent += cap[1].length; + } + + blankLine = false; + + if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line + raw += nextLine + '\n'; + src = src.substring(nextLine.length + 1); + endEarly = true; + } + + if (!endEarly) { + const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))`); + const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`); + const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\`\`\`|~~~)`); + const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`); + + // Check if following lines should be included in List Item + while (src) { + rawLine = src.split('\n', 1)[0]; + line = rawLine; + + // Re-align to follow commonmark nesting rules + if (this.options.pedantic) { + line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' '); + } + + // End list item if found code fences + if (fencesBeginRegex.test(line)) { + break; + } + + // End list item if found start of new heading + if (headingBeginRegex.test(line)) { + break; + } + + // End list item if found start of new bullet + if (nextBulletRegex.test(line)) { + break; + } + + // Horizontal rule found + if (hrRegex.test(src)) { + break; + } + + if (line.search(/[^ ]/) >= indent || !line.trim()) { // Dedent if possible + itemContents += '\n' + line.slice(indent); + } else if (!blankLine) { // Until blank line, item doesn't need indentation + itemContents += '\n' + line; + } else { // Otherwise, improper indentation ends this item + break; + } + + if (!blankLine && !line.trim()) { // Check if current line is blank + blankLine = true; + } + + raw += rawLine + '\n'; + src = src.substring(rawLine.length + 1); + } + } + + if (!list.loose) { + // If the previous item ended with a blank line, the list is loose + if (endsWithBlankLine) { + list.loose = true; + } else if (/\n *\n *$/.test(raw)) { + endsWithBlankLine = true; + } + } + + // Check for task list items + if (this.options.gfm) { + istask = /^\[[ xX]\] /.exec(itemContents); + if (istask) { + ischecked = istask[0] !== '[ ] '; + itemContents = itemContents.replace(/^\[[ xX]\] +/, ''); + } + } + + list.items.push({ + type: 'list_item', + raw, + task: !!istask, + checked: ischecked, + loose: false, + text: itemContents + }); + + list.raw += raw; + } + + // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic + list.items[list.items.length - 1].raw = raw.trimRight(); + list.items[list.items.length - 1].text = itemContents.trimRight(); + list.raw = list.raw.trimRight(); + + const l = list.items.length; + + // Item child tokens handled here at end because we needed to have the final item to trim it first + for (i = 0; i < l; i++) { + this.lexer.state.top = false; + list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []); + const spacers = list.items[i].tokens.filter(t => t.type === 'space'); + const hasMultipleLineBreaks = spacers.every(t => { + const chars = t.raw.split(''); + let lineBreaks = 0; + for (const char of chars) { + if (char === '\n') { + lineBreaks += 1; + } + if (lineBreaks > 1) { + return true; + } + } + + return false; + }); + + if (!list.loose && spacers.length && hasMultipleLineBreaks) { + // Having a single line break doesn't mean a list is loose. A single line break is terminating the last list item + list.loose = true; + list.items[i].loose = true; + } + } + + return list; + } + } + + html(src) { + const cap = this.rules.block.html.exec(src); + if (cap) { + const token = { + type: 'html', + raw: cap[0], + pre: !this.options.sanitizer + && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), + text: cap[0] + }; + if (this.options.sanitize) { + const text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]); + token.type = 'paragraph'; + token.text = text; + token.tokens = this.lexer.inline(text); + } + return token; + } + } + + def(src) { + const cap = this.rules.block.def.exec(src); + if (cap) { + if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1); + const tag = cap[1].toLowerCase().replace(/\s+/g, ' '); + return { + type: 'def', + tag, + raw: cap[0], + href: cap[2], + title: cap[3] + }; + } + } + + table(src) { + const cap = this.rules.block.table.exec(src); + if (cap) { + const item = { + type: 'table', + header: splitCells(cap[1]).map(c => { return { text: c }; }), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + rows: cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, '').split('\n') : [] + }; + + if (item.header.length === item.align.length) { + item.raw = cap[0]; + + let l = item.align.length; + let i, j, k, row; + for (i = 0; i < l; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + l = item.rows.length; + for (i = 0; i < l; i++) { + item.rows[i] = splitCells(item.rows[i], item.header.length).map(c => { return { text: c }; }); + } + + // parse child tokens inside headers and cells + + // header child tokens + l = item.header.length; + for (j = 0; j < l; j++) { + item.header[j].tokens = this.lexer.inline(item.header[j].text); + } + + // cell child tokens + l = item.rows.length; + for (j = 0; j < l; j++) { + row = item.rows[j]; + for (k = 0; k < row.length; k++) { + row[k].tokens = this.lexer.inline(row[k].text); + } + } + + return item; + } + } + } + + lheading(src) { + const cap = this.rules.block.lheading.exec(src); + if (cap) { + return { + type: 'heading', + raw: cap[0], + depth: cap[2].charAt(0) === '=' ? 1 : 2, + text: cap[1], + tokens: this.lexer.inline(cap[1]) + }; + } + } + + paragraph(src) { + const cap = this.rules.block.paragraph.exec(src); + if (cap) { + const text = cap[1].charAt(cap[1].length - 1) === '\n' + ? cap[1].slice(0, -1) + : cap[1]; + return { + type: 'paragraph', + raw: cap[0], + text, + tokens: this.lexer.inline(text) + }; + } + } + + text(src) { + const cap = this.rules.block.text.exec(src); + if (cap) { + return { + type: 'text', + raw: cap[0], + text: cap[0], + tokens: this.lexer.inline(cap[0]) + }; + } + } + + escape(src) { + const cap = this.rules.inline.escape.exec(src); + if (cap) { + return { + type: 'escape', + raw: cap[0], + text: escape(cap[1]) + }; + } + } + + tag(src) { + const cap = this.rules.inline.tag.exec(src); + if (cap) { + if (!this.lexer.state.inLink && /^
    /i.test(cap[0])) { + this.lexer.state.inLink = false; + } + if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { + this.lexer.state.inRawBlock = true; + } else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { + this.lexer.state.inRawBlock = false; + } + + return { + type: this.options.sanitize + ? 'text' + : 'html', + raw: cap[0], + inLink: this.lexer.state.inLink, + inRawBlock: this.lexer.state.inRawBlock, + text: this.options.sanitize + ? (this.options.sanitizer + ? this.options.sanitizer(cap[0]) + : escape(cap[0])) + : cap[0] + }; + } + } + + link(src) { + const cap = this.rules.inline.link.exec(src); + if (cap) { + const trimmedUrl = cap[2].trim(); + if (!this.options.pedantic && /^$/.test(trimmedUrl))) { + return; + } + + // ending angle bracket cannot be escaped + const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\'); + if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) { + return; + } + } else { + // find closing parenthesis + const lastParenIndex = findClosingBracket(cap[2], '()'); + if (lastParenIndex > -1) { + const start = cap[0].indexOf('!') === 0 ? 5 : 4; + const linkLen = start + cap[1].length + lastParenIndex; + cap[2] = cap[2].substring(0, lastParenIndex); + cap[0] = cap[0].substring(0, linkLen).trim(); + cap[3] = ''; + } + } + let href = cap[2]; + let title = ''; + if (this.options.pedantic) { + // split pedantic href and title + const link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href); + + if (link) { + href = link[1]; + title = link[3]; + } + } else { + title = cap[3] ? cap[3].slice(1, -1) : ''; + } + + href = href.trim(); + if (/^$/.test(trimmedUrl))) { + // pedantic allows starting angle bracket without ending angle bracket + href = href.slice(1); + } else { + href = href.slice(1, -1); + } + } + return outputLink(cap, { + href: href ? href.replace(this.rules.inline._escapes, '$1') : href, + title: title ? title.replace(this.rules.inline._escapes, '$1') : title + }, cap[0], this.lexer); + } + } + + reflink(src, links) { + let cap; + if ((cap = this.rules.inline.reflink.exec(src)) + || (cap = this.rules.inline.nolink.exec(src))) { + let link = (cap[2] || cap[1]).replace(/\s+/g, ' '); + link = links[link.toLowerCase()]; + if (!link || !link.href) { + const text = cap[0].charAt(0); + return { + type: 'text', + raw: text, + text + }; + } + return outputLink(cap, link, cap[0], this.lexer); + } + } + + emStrong(src, maskedSrc, prevChar = '') { + let match = this.rules.inline.emStrong.lDelim.exec(src); + if (!match) return; + + // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well + if (match[3] && prevChar.match(/[\p{L}\p{N}]/u)) return; + + const nextChar = match[1] || match[2] || ''; + + if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) { + const lLength = match[0].length - 1; + let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0; + + const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd; + endReg.lastIndex = 0; + + // Clip maskedSrc to same section of string as src (move to lexer?) + maskedSrc = maskedSrc.slice(-1 * src.length + lLength); + + while ((match = endReg.exec(maskedSrc)) != null) { + rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6]; + + if (!rDelim) continue; // skip single * in __abc*abc__ + + rLength = rDelim.length; + + if (match[3] || match[4]) { // found another Left Delim + delimTotal += rLength; + continue; + } else if (match[5] || match[6]) { // either Left or Right Delim + if (lLength % 3 && !((lLength + rLength) % 3)) { + midDelimTotal += rLength; + continue; // CommonMark Emphasis Rules 9-10 + } + } + + delimTotal -= rLength; + + if (delimTotal > 0) continue; // Haven't found enough closing delimiters + + // Remove extra characters. *a*** -> *a* + rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal); + + // Create `em` if smallest delimiter has odd char count. *a*** + if (Math.min(lLength, rLength) % 2) { + const text = src.slice(1, lLength + match.index + rLength); + return { + type: 'em', + raw: src.slice(0, lLength + match.index + rLength + 1), + text, + tokens: this.lexer.inlineTokens(text) + }; + } + + // Create 'strong' if smallest delimiter has even char count. **a*** + const text = src.slice(2, lLength + match.index + rLength - 1); + return { + type: 'strong', + raw: src.slice(0, lLength + match.index + rLength + 1), + text, + tokens: this.lexer.inlineTokens(text) + }; + } + } + } + + codespan(src) { + const cap = this.rules.inline.code.exec(src); + if (cap) { + let text = cap[2].replace(/\n/g, ' '); + const hasNonSpaceChars = /[^ ]/.test(text); + const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text); + if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) { + text = text.substring(1, text.length - 1); + } + text = escape(text, true); + return { + type: 'codespan', + raw: cap[0], + text + }; + } + } + + br(src) { + const cap = this.rules.inline.br.exec(src); + if (cap) { + return { + type: 'br', + raw: cap[0] + }; + } + } + + del(src) { + const cap = this.rules.inline.del.exec(src); + if (cap) { + return { + type: 'del', + raw: cap[0], + text: cap[2], + tokens: this.lexer.inlineTokens(cap[2]) + }; + } + } + + autolink(src, mangle) { + const cap = this.rules.inline.autolink.exec(src); + if (cap) { + let text, href; + if (cap[2] === '@') { + text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]); + href = 'mailto:' + text; + } else { + text = escape(cap[1]); + href = text; + } + + return { + type: 'link', + raw: cap[0], + text, + href, + tokens: [ + { + type: 'text', + raw: text, + text + } + ] + }; + } + } + + url(src, mangle) { + let cap; + if (cap = this.rules.inline.url.exec(src)) { + let text, href; + if (cap[2] === '@') { + text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]); + href = 'mailto:' + text; + } else { + // do extended autolink path validation + let prevCapZero; + do { + prevCapZero = cap[0]; + cap[0] = this.rules.inline._backpedal.exec(cap[0])[0]; + } while (prevCapZero !== cap[0]); + text = escape(cap[0]); + if (cap[1] === 'www.') { + href = 'http://' + text; + } else { + href = text; + } + } + return { + type: 'link', + raw: cap[0], + text, + href, + tokens: [ + { + type: 'text', + raw: text, + text + } + ] + }; + } + } + + inlineText(src, smartypants) { + const cap = this.rules.inline.text.exec(src); + if (cap) { + let text; + if (this.lexer.state.inRawBlock) { + text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0]; + } else { + text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]); + } + return { + type: 'text', + raw: cap[0], + text + }; + } + } +} + +/** + * Block-Level Grammar + */ +const block = { + newline: /^(?: *(?:\n|$))+/, + code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/, + fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/, + hr: /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/, + heading: /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/, + blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/, + list: /^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/, + html: '^ {0,3}(?:' // optional indentation + + '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)' // (1) + + '|comment[^\\n]*(\\n+|$)' // (2) + + '|<\\?[\\s\\S]*?(?:\\?>\\n*|$)' // (3) + + '|\\n*|$)' // (4) + + '|\\n*|$)' // (5) + + '|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (6) + + '|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) open tag + + '|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) closing tag + + ')', + def: /^ {0,3}\[(label)\]: *(?:\n *)?]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/, + table: noopTest, + lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/, + // regex template, placeholders will be replaced according to different paragraph + // interruption rules of commonmark and the original markdown spec: + _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/, + text: /^[^\n]+/ +}; + +block._label = /(?!\s*\])(?:\\.|[^\[\]\\])+/; +block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/; +block.def = edit(block.def) + .replace('label', block._label) + .replace('title', block._title) + .getRegex(); + +block.bullet = /(?:[*+-]|\d{1,9}[.)])/; +block.listItemStart = edit(/^( *)(bull) */) + .replace('bull', block.bullet) + .getRegex(); + +block.list = edit(block.list) + .replace(/bull/g, block.bullet) + .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))') + .replace('def', '\\n+(?=' + block.def.source + ')') + .getRegex(); + +block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + + '|track|ul'; +block._comment = /|$)/; +block.html = edit(block.html, 'i') + .replace('comment', block._comment) + .replace('tag', block._tag) + .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/) + .getRegex(); + +block.paragraph = edit(block._paragraph) + .replace('hr', block.hr) + .replace('heading', ' {0,3}#{1,6} ') + .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs + .replace('|table', '') + .replace('blockquote', ' {0,3}>') + .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') + .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt + .replace('html', ')|<(?:script|pre|style|textarea|!--)') + .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks + .getRegex(); + +block.blockquote = edit(block.blockquote) + .replace('paragraph', block.paragraph) + .getRegex(); + +/** + * Normal Block Grammar + */ + +block.normal = merge({}, block); + +/** + * GFM Block Grammar + */ + +block.gfm = merge({}, block.normal, { + table: '^ *([^\\n ].*\\|.*)\\n' // Header + + ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?' // Align + + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells +}); + +block.gfm.table = edit(block.gfm.table) + .replace('hr', block.hr) + .replace('heading', ' {0,3}#{1,6} ') + .replace('blockquote', ' {0,3}>') + .replace('code', ' {4}[^\\n]') + .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') + .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt + .replace('html', ')|<(?:script|pre|style|textarea|!--)') + .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks + .getRegex(); + +block.gfm.paragraph = edit(block._paragraph) + .replace('hr', block.hr) + .replace('heading', ' {0,3}#{1,6} ') + .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs + .replace('table', block.gfm.table) // interrupt paragraphs with table + .replace('blockquote', ' {0,3}>') + .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') + .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt + .replace('html', ')|<(?:script|pre|style|textarea|!--)') + .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks + .getRegex(); +/** + * Pedantic grammar (original John Gruber's loose markdown specification) + */ + +block.pedantic = merge({}, block.normal, { + html: edit( + '^ *(?:comment *(?:\\n|\\s*$)' + + '|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)' // closed tag + + '|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))') + .replace('comment', block._comment) + .replace(/tag/g, '(?!(?:' + + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b') + .getRegex(), + def: /^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, + heading: /^(#{1,6})(.*)(?:\n+|$)/, + fences: noopTest, // fences not supported + paragraph: edit(block.normal._paragraph) + .replace('hr', block.hr) + .replace('heading', ' *#{1,6} *[^\n]') + .replace('lheading', block.lheading) + .replace('blockquote', ' {0,3}>') + .replace('|fences', '') + .replace('|list', '') + .replace('|html', '') + .getRegex() +}); + +/** + * Inline-Level Grammar + */ +const inline = { + escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, + autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/, + url: noopTest, + tag: '^comment' + + '|^' // self-closing tag + + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag + + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. + + '|^' // declaration, e.g. + + '|^', // CDATA section + link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/, + reflink: /^!?\[(label)\]\[(ref)\]/, + nolink: /^!?\[(ref)\](?:\[\])?/, + reflinkSearch: 'reflink|nolink(?!\\()', + emStrong: { + lDelim: /^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/, + // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right. + // () Skip orphan inside strong () Consume to delim (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a + rDelimAst: /^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/, + rDelimUnd: /^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ // ^- Not allowed for _ + }, + code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/, + br: /^( {2,}|\\)\n(?!\s*$)/, + del: noopTest, + text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~'; +inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex(); + +// sequences em should skip over [title](link), `code`, +inline.blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g; +inline.escapedEmSt = /\\\*|\\_/g; + +inline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex(); + +inline.emStrong.lDelim = edit(inline.emStrong.lDelim) + .replace(/punct/g, inline._punctuation) + .getRegex(); + +inline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g') + .replace(/punct/g, inline._punctuation) + .getRegex(); + +inline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g') + .replace(/punct/g, inline._punctuation) + .getRegex(); + +inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g; + +inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/; +inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/; +inline.autolink = edit(inline.autolink) + .replace('scheme', inline._scheme) + .replace('email', inline._email) + .getRegex(); + +inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/; + +inline.tag = edit(inline.tag) + .replace('comment', inline._comment) + .replace('attribute', inline._attribute) + .getRegex(); + +inline._label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/; +inline._href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/; +inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/; + +inline.link = edit(inline.link) + .replace('label', inline._label) + .replace('href', inline._href) + .replace('title', inline._title) + .getRegex(); + +inline.reflink = edit(inline.reflink) + .replace('label', inline._label) + .replace('ref', block._label) + .getRegex(); + +inline.nolink = edit(inline.nolink) + .replace('ref', block._label) + .getRegex(); + +inline.reflinkSearch = edit(inline.reflinkSearch, 'g') + .replace('reflink', inline.reflink) + .replace('nolink', inline.nolink) + .getRegex(); + +/** + * Normal Inline Grammar + */ + +inline.normal = merge({}, inline); + +/** + * Pedantic Inline Grammar + */ + +inline.pedantic = merge({}, inline.normal, { + strong: { + start: /^__|\*\*/, + middle: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, + endAst: /\*\*(?!\*)/g, + endUnd: /__(?!_)/g + }, + em: { + start: /^_|\*/, + middle: /^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/, + endAst: /\*(?!\*)/g, + endUnd: /_(?!_)/g + }, + link: edit(/^!?\[(label)\]\((.*?)\)/) + .replace('label', inline._label) + .getRegex(), + reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/) + .replace('label', inline._label) + .getRegex() +}); + +/** + * GFM Inline Grammar + */ + +inline.gfm = merge({}, inline.normal, { + escape: edit(inline.escape).replace('])', '~|])').getRegex(), + _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/, + url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, + _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/, + del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/, + text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\ 0.5) { + ch = 'x' + ch.toString(16); + } + out += '&#' + ch + ';'; + } + + return out; +} + +/** + * Block Lexer + */ +class Lexer { + constructor(options) { + this.tokens = []; + this.tokens.links = Object.create(null); + this.options = options || defaults; + this.options.tokenizer = this.options.tokenizer || new Tokenizer(); + this.tokenizer = this.options.tokenizer; + this.tokenizer.options = this.options; + this.tokenizer.lexer = this; + this.inlineQueue = []; + this.state = { + inLink: false, + inRawBlock: false, + top: true + }; + + const rules = { + block: block.normal, + inline: inline.normal + }; + + if (this.options.pedantic) { + rules.block = block.pedantic; + rules.inline = inline.pedantic; + } else if (this.options.gfm) { + rules.block = block.gfm; + if (this.options.breaks) { + rules.inline = inline.breaks; + } else { + rules.inline = inline.gfm; + } + } + this.tokenizer.rules = rules; + } + + /** + * Expose Rules + */ + static get rules() { + return { + block, + inline + }; + } + + /** + * Static Lex Method + */ + static lex(src, options) { + const lexer = new Lexer(options); + return lexer.lex(src); + } + + /** + * Static Lex Inline Method + */ + static lexInline(src, options) { + const lexer = new Lexer(options); + return lexer.inlineTokens(src); + } + + /** + * Preprocessing + */ + lex(src) { + src = src + .replace(/\r\n|\r/g, '\n'); + + this.blockTokens(src, this.tokens); + + let next; + while (next = this.inlineQueue.shift()) { + this.inlineTokens(next.src, next.tokens); + } + + return this.tokens; + } + + /** + * Lexing + */ + blockTokens(src, tokens = []) { + if (this.options.pedantic) { + src = src.replace(/\t/g, ' ').replace(/^ +$/gm, ''); + } else { + src = src.replace(/^( *)(\t+)/gm, (_, leading, tabs) => { + return leading + ' '.repeat(tabs.length); + }); + } + + let token, lastToken, cutSrc, lastParagraphClipped; + + while (src) { + if (this.options.extensions + && this.options.extensions.block + && this.options.extensions.block.some((extTokenizer) => { + if (token = extTokenizer.call({ lexer: this }, src, tokens)) { + src = src.substring(token.raw.length); + tokens.push(token); + return true; + } + return false; + })) { + continue; + } + + // newline + if (token = this.tokenizer.space(src)) { + src = src.substring(token.raw.length); + if (token.raw.length === 1 && tokens.length > 0) { + // if there's a single \n as a spacer, it's terminating the last line, + // so move it there so that we don't get unecessary paragraph tags + tokens[tokens.length - 1].raw += '\n'; + } else { + tokens.push(token); + } + continue; + } + + // code + if (token = this.tokenizer.code(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + // An indented code block cannot interrupt a paragraph. + if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.text; + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else { + tokens.push(token); + } + continue; + } + + // fences + if (token = this.tokenizer.fences(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // heading + if (token = this.tokenizer.heading(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // hr + if (token = this.tokenizer.hr(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // blockquote + if (token = this.tokenizer.blockquote(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // list + if (token = this.tokenizer.list(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // html + if (token = this.tokenizer.html(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // def + if (token = this.tokenizer.def(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.raw; + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else if (!this.tokens.links[token.tag]) { + this.tokens.links[token.tag] = { + href: token.href, + title: token.title + }; + } + continue; + } + + // table (gfm) + if (token = this.tokenizer.table(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // lheading + if (token = this.tokenizer.lheading(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // top-level paragraph + // prevent paragraph consuming extensions by clipping 'src' to extension start + cutSrc = src; + if (this.options.extensions && this.options.extensions.startBlock) { + let startIndex = Infinity; + const tempSrc = src.slice(1); + let tempStart; + this.options.extensions.startBlock.forEach(function(getStartIndex) { + tempStart = getStartIndex.call({ lexer: this }, tempSrc); + if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); } + }); + if (startIndex < Infinity && startIndex >= 0) { + cutSrc = src.substring(0, startIndex + 1); + } + } + if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) { + lastToken = tokens[tokens.length - 1]; + if (lastParagraphClipped && lastToken.type === 'paragraph') { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.text; + this.inlineQueue.pop(); + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else { + tokens.push(token); + } + lastParagraphClipped = (cutSrc.length !== src.length); + src = src.substring(token.raw.length); + continue; + } + + // text + if (token = this.tokenizer.text(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + if (lastToken && lastToken.type === 'text') { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.text; + this.inlineQueue.pop(); + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else { + tokens.push(token); + } + continue; + } + + if (src) { + const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0); + if (this.options.silent) { + console.error(errMsg); + break; + } else { + throw new Error(errMsg); + } + } + } + + this.state.top = true; + return tokens; + } + + inline(src, tokens = []) { + this.inlineQueue.push({ src, tokens }); + return tokens; + } + + /** + * Lexing/Compiling + */ + inlineTokens(src, tokens = []) { + let token, lastToken, cutSrc; + + // String with links masked to avoid interference with em and strong + let maskedSrc = src; + let match; + let keepPrevChar, prevChar; + + // Mask out reflinks + if (this.tokens.links) { + const links = Object.keys(this.tokens.links); + if (links.length > 0) { + while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) { + if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) { + maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex); + } + } + } + } + // Mask out other blocks + while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) { + maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex); + } + + // Mask out escaped em & strong delimiters + while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) { + maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex); + } + + while (src) { + if (!keepPrevChar) { + prevChar = ''; + } + keepPrevChar = false; + + // extensions + if (this.options.extensions + && this.options.extensions.inline + && this.options.extensions.inline.some((extTokenizer) => { + if (token = extTokenizer.call({ lexer: this }, src, tokens)) { + src = src.substring(token.raw.length); + tokens.push(token); + return true; + } + return false; + })) { + continue; + } + + // escape + if (token = this.tokenizer.escape(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // tag + if (token = this.tokenizer.tag(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + if (lastToken && token.type === 'text' && lastToken.type === 'text') { + lastToken.raw += token.raw; + lastToken.text += token.text; + } else { + tokens.push(token); + } + continue; + } + + // link + if (token = this.tokenizer.link(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // reflink, nolink + if (token = this.tokenizer.reflink(src, this.tokens.links)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + if (lastToken && token.type === 'text' && lastToken.type === 'text') { + lastToken.raw += token.raw; + lastToken.text += token.text; + } else { + tokens.push(token); + } + continue; + } + + // em & strong + if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // code + if (token = this.tokenizer.codespan(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // br + if (token = this.tokenizer.br(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // del (gfm) + if (token = this.tokenizer.del(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // autolink + if (token = this.tokenizer.autolink(src, mangle)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // url (gfm) + if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // text + // prevent inlineText consuming extensions by clipping 'src' to extension start + cutSrc = src; + if (this.options.extensions && this.options.extensions.startInline) { + let startIndex = Infinity; + const tempSrc = src.slice(1); + let tempStart; + this.options.extensions.startInline.forEach(function(getStartIndex) { + tempStart = getStartIndex.call({ lexer: this }, tempSrc); + if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); } + }); + if (startIndex < Infinity && startIndex >= 0) { + cutSrc = src.substring(0, startIndex + 1); + } + } + if (token = this.tokenizer.inlineText(cutSrc, smartypants)) { + src = src.substring(token.raw.length); + if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started + prevChar = token.raw.slice(-1); + } + keepPrevChar = true; + lastToken = tokens[tokens.length - 1]; + if (lastToken && lastToken.type === 'text') { + lastToken.raw += token.raw; + lastToken.text += token.text; + } else { + tokens.push(token); + } + continue; + } + + if (src) { + const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0); + if (this.options.silent) { + console.error(errMsg); + break; + } else { + throw new Error(errMsg); + } + } + } + + return tokens; + } +} + +/** + * Renderer + */ +class Renderer { + constructor(options) { + this.options = options || defaults; + } + + code(code, infostring, escaped) { + const lang = (infostring || '').match(/\S*/)[0]; + if (this.options.highlight) { + const out = this.options.highlight(code, lang); + if (out != null && out !== code) { + escaped = true; + code = out; + } + } + + code = code.replace(/\n$/, '') + '\n'; + + if (!lang) { + return '
    '
    +        + (escaped ? code : escape(code, true))
    +        + '
    \n'; + } + + return '
    '
    +      + (escaped ? code : escape(code, true))
    +      + '
    \n'; + } + + /** + * @param {string} quote + */ + blockquote(quote) { + return `
    \n${quote}
    \n`; + } + + html(html) { + return html; + } + + /** + * @param {string} text + * @param {string} level + * @param {string} raw + * @param {any} slugger + */ + heading(text, level, raw, slugger) { + if (this.options.headerIds) { + const id = this.options.headerPrefix + slugger.slug(raw); + return `${text}\n`; + } + + // ignore IDs + return `${text}\n`; + } + + hr() { + return this.options.xhtml ? '
    \n' : '
    \n'; + } + + list(body, ordered, start) { + const type = ordered ? 'ol' : 'ul', + startatt = (ordered && start !== 1) ? (' start="' + start + '"') : ''; + return '<' + type + startatt + '>\n' + body + '\n'; + } + + /** + * @param {string} text + */ + listitem(text) { + return `
  • ${text}
  • \n`; + } + + checkbox(checked) { + return ' '; + } + + /** + * @param {string} text + */ + paragraph(text) { + return `

    ${text}

    \n`; + } + + /** + * @param {string} header + * @param {string} body + */ + table(header, body) { + if (body) body = `${body}`; + + return '\n' + + '\n' + + header + + '\n' + + body + + '
    \n'; + } + + /** + * @param {string} content + */ + tablerow(content) { + return `\n${content}\n`; + } + + tablecell(content, flags) { + const type = flags.header ? 'th' : 'td'; + const tag = flags.align + ? `<${type} align="${flags.align}">` + : `<${type}>`; + return tag + content + `\n`; + } + + /** + * span level renderer + * @param {string} text + */ + strong(text) { + return `${text}`; + } + + /** + * @param {string} text + */ + em(text) { + return `${text}`; + } + + /** + * @param {string} text + */ + codespan(text) { + return `${text}`; + } + + br() { + return this.options.xhtml ? '
    ' : '
    '; + } + + /** + * @param {string} text + */ + del(text) { + return `${text}`; + } + + /** + * @param {string} href + * @param {string} title + * @param {string} text + */ + link(href, title, text) { + href = cleanUrl(this.options.sanitize, this.options.baseUrl, href); + if (href === null) { + return text; + } + let out = '
    '; + return out; + } + + /** + * @param {string} href + * @param {string} title + * @param {string} text + */ + image(href, title, text) { + href = cleanUrl(this.options.sanitize, this.options.baseUrl, href); + if (href === null) { + return text; + } + + let out = `${text}' : '>'; + return out; + } + + text(text) { + return text; + } +} + +/** + * TextRenderer + * returns only the textual part of the token + */ +class TextRenderer { + // no need for block level renderers + strong(text) { + return text; + } + + em(text) { + return text; + } + + codespan(text) { + return text; + } + + del(text) { + return text; + } + + html(text) { + return text; + } + + text(text) { + return text; + } + + link(href, title, text) { + return '' + text; + } + + image(href, title, text) { + return '' + text; + } + + br() { + return ''; + } +} + +/** + * Slugger generates header id + */ +class Slugger { + constructor() { + this.seen = {}; + } + + /** + * @param {string} value + */ + serialize(value) { + return value + .toLowerCase() + .trim() + // remove html tags + .replace(/<[!\/a-z].*?>/ig, '') + // remove unwanted chars + .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '') + .replace(/\s/g, '-'); + } + + /** + * Finds the next safe (unique) slug to use + * @param {string} originalSlug + * @param {boolean} isDryRun + */ + getNextSafeSlug(originalSlug, isDryRun) { + let slug = originalSlug; + let occurenceAccumulator = 0; + if (this.seen.hasOwnProperty(slug)) { + occurenceAccumulator = this.seen[originalSlug]; + do { + occurenceAccumulator++; + slug = originalSlug + '-' + occurenceAccumulator; + } while (this.seen.hasOwnProperty(slug)); + } + if (!isDryRun) { + this.seen[originalSlug] = occurenceAccumulator; + this.seen[slug] = 0; + } + return slug; + } + + /** + * Convert string to unique id + * @param {object} [options] + * @param {boolean} [options.dryrun] Generates the next unique slug without + * updating the internal accumulator. + */ + slug(value, options = {}) { + const slug = this.serialize(value); + return this.getNextSafeSlug(slug, options.dryrun); + } +} + +/** + * Parsing & Compiling + */ +class Parser { + constructor(options) { + this.options = options || defaults; + this.options.renderer = this.options.renderer || new Renderer(); + this.renderer = this.options.renderer; + this.renderer.options = this.options; + this.textRenderer = new TextRenderer(); + this.slugger = new Slugger(); + } + + /** + * Static Parse Method + */ + static parse(tokens, options) { + const parser = new Parser(options); + return parser.parse(tokens); + } + + /** + * Static Parse Inline Method + */ + static parseInline(tokens, options) { + const parser = new Parser(options); + return parser.parseInline(tokens); + } + + /** + * Parse Loop + */ + parse(tokens, top = true) { + let out = '', + i, + j, + k, + l2, + l3, + row, + cell, + header, + body, + token, + ordered, + start, + loose, + itemBody, + item, + checked, + task, + checkbox, + ret; + + const l = tokens.length; + for (i = 0; i < l; i++) { + token = tokens[i]; + + // Run any renderer extensions + if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) { + ret = this.options.extensions.renderers[token.type].call({ parser: this }, token); + if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) { + out += ret || ''; + continue; + } + } + + switch (token.type) { + case 'space': { + continue; + } + case 'hr': { + out += this.renderer.hr(); + continue; + } + case 'heading': { + out += this.renderer.heading( + this.parseInline(token.tokens), + token.depth, + unescape(this.parseInline(token.tokens, this.textRenderer)), + this.slugger); + continue; + } + case 'code': { + out += this.renderer.code(token.text, + token.lang, + token.escaped); + continue; + } + case 'table': { + header = ''; + + // header + cell = ''; + l2 = token.header.length; + for (j = 0; j < l2; j++) { + cell += this.renderer.tablecell( + this.parseInline(token.header[j].tokens), + { header: true, align: token.align[j] } + ); + } + header += this.renderer.tablerow(cell); + + body = ''; + l2 = token.rows.length; + for (j = 0; j < l2; j++) { + row = token.rows[j]; + + cell = ''; + l3 = row.length; + for (k = 0; k < l3; k++) { + cell += this.renderer.tablecell( + this.parseInline(row[k].tokens), + { header: false, align: token.align[k] } + ); + } + + body += this.renderer.tablerow(cell); + } + out += this.renderer.table(header, body); + continue; + } + case 'blockquote': { + body = this.parse(token.tokens); + out += this.renderer.blockquote(body); + continue; + } + case 'list': { + ordered = token.ordered; + start = token.start; + loose = token.loose; + l2 = token.items.length; + + body = ''; + for (j = 0; j < l2; j++) { + item = token.items[j]; + checked = item.checked; + task = item.task; + + itemBody = ''; + if (item.task) { + checkbox = this.renderer.checkbox(checked); + if (loose) { + if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') { + item.tokens[0].text = checkbox + ' ' + item.tokens[0].text; + if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') { + item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text; + } + } else { + item.tokens.unshift({ + type: 'text', + text: checkbox + }); + } + } else { + itemBody += checkbox; + } + } + + itemBody += this.parse(item.tokens, loose); + body += this.renderer.listitem(itemBody, task, checked); + } + + out += this.renderer.list(body, ordered, start); + continue; + } + case 'html': { + // TODO parse inline content if parameter markdown=1 + out += this.renderer.html(token.text); + continue; + } + case 'paragraph': { + out += this.renderer.paragraph(this.parseInline(token.tokens)); + continue; + } + case 'text': { + body = token.tokens ? this.parseInline(token.tokens) : token.text; + while (i + 1 < l && tokens[i + 1].type === 'text') { + token = tokens[++i]; + body += '\n' + (token.tokens ? this.parseInline(token.tokens) : token.text); + } + out += top ? this.renderer.paragraph(body) : body; + continue; + } + + default: { + const errMsg = 'Token with "' + token.type + '" type was not found.'; + if (this.options.silent) { + console.error(errMsg); + return; + } else { + throw new Error(errMsg); + } + } + } + } + + return out; + } + + /** + * Parse Inline Tokens + */ + parseInline(tokens, renderer) { + renderer = renderer || this.renderer; + let out = '', + i, + token, + ret; + + const l = tokens.length; + for (i = 0; i < l; i++) { + token = tokens[i]; + + // Run any renderer extensions + if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) { + ret = this.options.extensions.renderers[token.type].call({ parser: this }, token); + if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) { + out += ret || ''; + continue; + } + } + + switch (token.type) { + case 'escape': { + out += renderer.text(token.text); + break; + } + case 'html': { + out += renderer.html(token.text); + break; + } + case 'link': { + out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer)); + break; + } + case 'image': { + out += renderer.image(token.href, token.title, token.text); + break; + } + case 'strong': { + out += renderer.strong(this.parseInline(token.tokens, renderer)); + break; + } + case 'em': { + out += renderer.em(this.parseInline(token.tokens, renderer)); + break; + } + case 'codespan': { + out += renderer.codespan(token.text); + break; + } + case 'br': { + out += renderer.br(); + break; + } + case 'del': { + out += renderer.del(this.parseInline(token.tokens, renderer)); + break; + } + case 'text': { + out += renderer.text(token.text); + break; + } + default: { + const errMsg = 'Token with "' + token.type + '" type was not found.'; + if (this.options.silent) { + console.error(errMsg); + return; + } else { + throw new Error(errMsg); + } + } + } + } + return out; + } +} + +/** + * Marked + */ +function marked(src, opt, callback) { + // throw error in case of non string input + if (typeof src === 'undefined' || src === null) { + throw new Error('marked(): input parameter is undefined or null'); + } + if (typeof src !== 'string') { + throw new Error('marked(): input parameter is of type ' + + Object.prototype.toString.call(src) + ', string expected'); + } + + if (typeof opt === 'function') { + callback = opt; + opt = null; + } + + opt = merge({}, marked.defaults, opt || {}); + checkSanitizeDeprecation(opt); + + if (callback) { + const highlight = opt.highlight; + let tokens; + + try { + tokens = Lexer.lex(src, opt); + } catch (e) { + return callback(e); + } + + const done = function(err) { + let out; + + if (!err) { + try { + if (opt.walkTokens) { + marked.walkTokens(tokens, opt.walkTokens); + } + out = Parser.parse(tokens, opt); + } catch (e) { + err = e; + } + } + + opt.highlight = highlight; + + return err + ? callback(err) + : callback(null, out); + }; + + if (!highlight || highlight.length < 3) { + return done(); + } + + delete opt.highlight; + + if (!tokens.length) return done(); + + let pending = 0; + marked.walkTokens(tokens, function(token) { + if (token.type === 'code') { + pending++; + setTimeout(() => { + highlight(token.text, token.lang, function(err, code) { + if (err) { + return done(err); + } + if (code != null && code !== token.text) { + token.text = code; + token.escaped = true; + } + + pending--; + if (pending === 0) { + done(); + } + }); + }, 0); + } + }); + + if (pending === 0) { + done(); + } + + return; + } + + function onError(e) { + e.message += '\nPlease report this to https://github.com/markedjs/marked.'; + if (opt.silent) { + return '

    An error occurred:

    '
    +        + escape(e.message + '', true)
    +        + '
    '; + } + throw e; + } + + try { + const tokens = Lexer.lex(src, opt); + if (opt.walkTokens) { + if (opt.async) { + return Promise.all(marked.walkTokens(tokens, opt.walkTokens)) + .then(() => { + return Parser.parse(tokens, opt); + }) + .catch(onError); + } + marked.walkTokens(tokens, opt.walkTokens); + } + return Parser.parse(tokens, opt); + } catch (e) { + onError(e); + } +} + +/** + * Options + */ + +marked.options = +marked.setOptions = function(opt) { + merge(marked.defaults, opt); + changeDefaults(marked.defaults); + return marked; +}; + +marked.getDefaults = getDefaults; + +marked.defaults = defaults; + +/** + * Use Extension + */ + +marked.use = function(...args) { + const opts = merge({}, ...args); + const extensions = marked.defaults.extensions || { renderers: {}, childTokens: {} }; + let hasExtensions; + + args.forEach((pack) => { + // ==-- Parse "addon" extensions --== // + if (pack.extensions) { + hasExtensions = true; + pack.extensions.forEach((ext) => { + if (!ext.name) { + throw new Error('extension name required'); + } + if (ext.renderer) { // Renderer extensions + const prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null; + if (prevRenderer) { + // Replace extension with func to run new extension but fall back if false + extensions.renderers[ext.name] = function(...args) { + let ret = ext.renderer.apply(this, args); + if (ret === false) { + ret = prevRenderer.apply(this, args); + } + return ret; + }; + } else { + extensions.renderers[ext.name] = ext.renderer; + } + } + if (ext.tokenizer) { // Tokenizer Extensions + if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) { + throw new Error("extension level must be 'block' or 'inline'"); + } + if (extensions[ext.level]) { + extensions[ext.level].unshift(ext.tokenizer); + } else { + extensions[ext.level] = [ext.tokenizer]; + } + if (ext.start) { // Function to check for start of token + if (ext.level === 'block') { + if (extensions.startBlock) { + extensions.startBlock.push(ext.start); + } else { + extensions.startBlock = [ext.start]; + } + } else if (ext.level === 'inline') { + if (extensions.startInline) { + extensions.startInline.push(ext.start); + } else { + extensions.startInline = [ext.start]; + } + } + } + } + if (ext.childTokens) { // Child tokens to be visited by walkTokens + extensions.childTokens[ext.name] = ext.childTokens; + } + }); + } + + // ==-- Parse "overwrite" extensions --== // + if (pack.renderer) { + const renderer = marked.defaults.renderer || new Renderer(); + for (const prop in pack.renderer) { + const prevRenderer = renderer[prop]; + // Replace renderer with func to run extension, but fall back if false + renderer[prop] = (...args) => { + let ret = pack.renderer[prop].apply(renderer, args); + if (ret === false) { + ret = prevRenderer.apply(renderer, args); + } + return ret; + }; + } + opts.renderer = renderer; + } + if (pack.tokenizer) { + const tokenizer = marked.defaults.tokenizer || new Tokenizer(); + for (const prop in pack.tokenizer) { + const prevTokenizer = tokenizer[prop]; + // Replace tokenizer with func to run extension, but fall back if false + tokenizer[prop] = (...args) => { + let ret = pack.tokenizer[prop].apply(tokenizer, args); + if (ret === false) { + ret = prevTokenizer.apply(tokenizer, args); + } + return ret; + }; + } + opts.tokenizer = tokenizer; + } + + // ==-- Parse WalkTokens extensions --== // + if (pack.walkTokens) { + const walkTokens = marked.defaults.walkTokens; + opts.walkTokens = function(token) { + let values = []; + values.push(pack.walkTokens.call(this, token)); + if (walkTokens) { + values = values.concat(walkTokens.call(this, token)); + } + return values; + }; + } + + if (hasExtensions) { + opts.extensions = extensions; + } + + marked.setOptions(opts); + }); +}; + +/** + * Run callback for every token + */ + +marked.walkTokens = function(tokens, callback) { + let values = []; + for (const token of tokens) { + values = values.concat(callback.call(marked, token)); + switch (token.type) { + case 'table': { + for (const cell of token.header) { + values = values.concat(marked.walkTokens(cell.tokens, callback)); + } + for (const row of token.rows) { + for (const cell of row) { + values = values.concat(marked.walkTokens(cell.tokens, callback)); + } + } + break; + } + case 'list': { + values = values.concat(marked.walkTokens(token.items, callback)); + break; + } + default: { + if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) { // Walk any extensions + marked.defaults.extensions.childTokens[token.type].forEach(function(childTokens) { + values = values.concat(marked.walkTokens(token[childTokens], callback)); + }); + } else if (token.tokens) { + values = values.concat(marked.walkTokens(token.tokens, callback)); + } + } + } + } + return values; +}; + +/** + * Parse Inline + * @param {string} src + */ +marked.parseInline = function(src, opt) { + // throw error in case of non string input + if (typeof src === 'undefined' || src === null) { + throw new Error('marked.parseInline(): input parameter is undefined or null'); + } + if (typeof src !== 'string') { + throw new Error('marked.parseInline(): input parameter is of type ' + + Object.prototype.toString.call(src) + ', string expected'); + } + + opt = merge({}, marked.defaults, opt || {}); + checkSanitizeDeprecation(opt); + + try { + const tokens = Lexer.lexInline(src, opt); + if (opt.walkTokens) { + marked.walkTokens(tokens, opt.walkTokens); + } + return Parser.parseInline(tokens, opt); + } catch (e) { + e.message += '\nPlease report this to https://github.com/markedjs/marked.'; + if (opt.silent) { + return '

    An error occurred:

    '
    +        + escape(e.message + '', true)
    +        + '
    '; + } + throw e; + } +}; + +/** + * Expose + */ +marked.Parser = Parser; +marked.parser = Parser.parse; +marked.Renderer = Renderer; +marked.TextRenderer = TextRenderer; +marked.Lexer = Lexer; +marked.lexer = Lexer.lex; +marked.Tokenizer = Tokenizer; +marked.Slugger = Slugger; +marked.parse = marked; + +const options = marked.options; +const setOptions = marked.setOptions; +const use = marked.use; +const walkTokens = marked.walkTokens; +const parseInline = marked.parseInline; +const parse = marked; +const parser = Parser.parse; +const lexer = Lexer.lex; + +export { Lexer, Parser, Renderer, Slugger, TextRenderer, Tokenizer, defaults, getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens }; diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/lib/marked.umd.js b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/lib/marked.umd.js new file mode 100644 index 0000000..cee7acb --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/lib/marked.umd.js @@ -0,0 +1,3071 @@ +/** + * marked - a markdown parser + * Copyright (c) 2011-2022, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ + +/** + * DO NOT EDIT THIS FILE + * The code in this file is generated from files in ./src/ + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.marked = {})); +})(this, (function (exports) { 'use strict'; + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; + var i = 0; + return function () { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + function getDefaults() { + return { + async: false, + baseUrl: null, + breaks: false, + extensions: null, + gfm: true, + headerIds: true, + headerPrefix: '', + highlight: null, + langPrefix: 'language-', + mangle: true, + pedantic: false, + renderer: null, + sanitize: false, + sanitizer: null, + silent: false, + smartLists: false, + smartypants: false, + tokenizer: null, + walkTokens: null, + xhtml: false + }; + } + exports.defaults = getDefaults(); + function changeDefaults(newDefaults) { + exports.defaults = newDefaults; + } + + /** + * Helpers + */ + var escapeTest = /[&<>"']/; + var escapeReplace = /[&<>"']/g; + var escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/; + var escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g; + var escapeReplacements = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + var getEscapeReplacement = function getEscapeReplacement(ch) { + return escapeReplacements[ch]; + }; + + function escape(html, encode) { + if (encode) { + if (escapeTest.test(html)) { + return html.replace(escapeReplace, getEscapeReplacement); + } + } else { + if (escapeTestNoEncode.test(html)) { + return html.replace(escapeReplaceNoEncode, getEscapeReplacement); + } + } + + return html; + } + var unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig; + /** + * @param {string} html + */ + + function unescape(html) { + // explicitly match decimal, hex, and named HTML entities + return html.replace(unescapeTest, function (_, n) { + n = n.toLowerCase(); + if (n === 'colon') return ':'; + + if (n.charAt(0) === '#') { + return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1)); + } + + return ''; + }); + } + var caret = /(^|[^\[])\^/g; + /** + * @param {string | RegExp} regex + * @param {string} opt + */ + + function edit(regex, opt) { + regex = typeof regex === 'string' ? regex : regex.source; + opt = opt || ''; + var obj = { + replace: function replace(name, val) { + val = val.source || val; + val = val.replace(caret, '$1'); + regex = regex.replace(name, val); + return obj; + }, + getRegex: function getRegex() { + return new RegExp(regex, opt); + } + }; + return obj; + } + var nonWordAndColonTest = /[^\w:]/g; + var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i; + /** + * @param {boolean} sanitize + * @param {string} base + * @param {string} href + */ + + function cleanUrl(sanitize, base, href) { + if (sanitize) { + var prot; + + try { + prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase(); + } catch (e) { + return null; + } + + if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) { + return null; + } + } + + if (base && !originIndependentUrl.test(href)) { + href = resolveUrl(base, href); + } + + try { + href = encodeURI(href).replace(/%25/g, '%'); + } catch (e) { + return null; + } + + return href; + } + var baseUrls = {}; + var justDomain = /^[^:]+:\/*[^/]*$/; + var protocol = /^([^:]+:)[\s\S]*$/; + var domain = /^([^:]+:\/*[^/]*)[\s\S]*$/; + /** + * @param {string} base + * @param {string} href + */ + + function resolveUrl(base, href) { + if (!baseUrls[' ' + base]) { + // we can ignore everything in base after the last slash of its path component, + // but we might need to add _that_ + // https://tools.ietf.org/html/rfc3986#section-3 + if (justDomain.test(base)) { + baseUrls[' ' + base] = base + '/'; + } else { + baseUrls[' ' + base] = rtrim(base, '/', true); + } + } + + base = baseUrls[' ' + base]; + var relativeBase = base.indexOf(':') === -1; + + if (href.substring(0, 2) === '//') { + if (relativeBase) { + return href; + } + + return base.replace(protocol, '$1') + href; + } else if (href.charAt(0) === '/') { + if (relativeBase) { + return href; + } + + return base.replace(domain, '$1') + href; + } else { + return base + href; + } + } + var noopTest = { + exec: function noopTest() {} + }; + function merge(obj) { + var i = 1, + target, + key; + + for (; i < arguments.length; i++) { + target = arguments[i]; + + for (key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + obj[key] = target[key]; + } + } + } + + return obj; + } + function splitCells(tableRow, count) { + // ensure that every cell-delimiting pipe has a space + // before it to distinguish it from an escaped pipe + var row = tableRow.replace(/\|/g, function (match, offset, str) { + var escaped = false, + curr = offset; + + while (--curr >= 0 && str[curr] === '\\') { + escaped = !escaped; + } + + if (escaped) { + // odd number of slashes means | is escaped + // so we leave it alone + return '|'; + } else { + // add space before unescaped | + return ' |'; + } + }), + cells = row.split(/ \|/); + var i = 0; // First/last cell in a row cannot be empty if it has no leading/trailing pipe + + if (!cells[0].trim()) { + cells.shift(); + } + + if (cells.length > 0 && !cells[cells.length - 1].trim()) { + cells.pop(); + } + + if (cells.length > count) { + cells.splice(count); + } else { + while (cells.length < count) { + cells.push(''); + } + } + + for (; i < cells.length; i++) { + // leading or trailing whitespace is ignored per the gfm spec + cells[i] = cells[i].trim().replace(/\\\|/g, '|'); + } + + return cells; + } + /** + * Remove trailing 'c's. Equivalent to str.replace(/c*$/, ''). + * /c*$/ is vulnerable to REDOS. + * + * @param {string} str + * @param {string} c + * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey. + */ + + function rtrim(str, c, invert) { + var l = str.length; + + if (l === 0) { + return ''; + } // Length of suffix matching the invert condition. + + + var suffLen = 0; // Step left until we fail to match the invert condition. + + while (suffLen < l) { + var currChar = str.charAt(l - suffLen - 1); + + if (currChar === c && !invert) { + suffLen++; + } else if (currChar !== c && invert) { + suffLen++; + } else { + break; + } + } + + return str.slice(0, l - suffLen); + } + function findClosingBracket(str, b) { + if (str.indexOf(b[1]) === -1) { + return -1; + } + + var l = str.length; + var level = 0, + i = 0; + + for (; i < l; i++) { + if (str[i] === '\\') { + i++; + } else if (str[i] === b[0]) { + level++; + } else if (str[i] === b[1]) { + level--; + + if (level < 0) { + return i; + } + } + } + + return -1; + } + function checkSanitizeDeprecation(opt) { + if (opt && opt.sanitize && !opt.silent) { + console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options'); + } + } // copied from https://stackoverflow.com/a/5450113/806777 + + /** + * @param {string} pattern + * @param {number} count + */ + + function repeatString(pattern, count) { + if (count < 1) { + return ''; + } + + var result = ''; + + while (count > 1) { + if (count & 1) { + result += pattern; + } + + count >>= 1; + pattern += pattern; + } + + return result + pattern; + } + + function outputLink(cap, link, raw, lexer) { + var href = link.href; + var title = link.title ? escape(link.title) : null; + var text = cap[1].replace(/\\([\[\]])/g, '$1'); + + if (cap[0].charAt(0) !== '!') { + lexer.state.inLink = true; + var token = { + type: 'link', + raw: raw, + href: href, + title: title, + text: text, + tokens: lexer.inlineTokens(text) + }; + lexer.state.inLink = false; + return token; + } + + return { + type: 'image', + raw: raw, + href: href, + title: title, + text: escape(text) + }; + } + + function indentCodeCompensation(raw, text) { + var matchIndentToCode = raw.match(/^(\s+)(?:```)/); + + if (matchIndentToCode === null) { + return text; + } + + var indentToCode = matchIndentToCode[1]; + return text.split('\n').map(function (node) { + var matchIndentInNode = node.match(/^\s+/); + + if (matchIndentInNode === null) { + return node; + } + + var indentInNode = matchIndentInNode[0]; + + if (indentInNode.length >= indentToCode.length) { + return node.slice(indentToCode.length); + } + + return node; + }).join('\n'); + } + /** + * Tokenizer + */ + + + var Tokenizer = /*#__PURE__*/function () { + function Tokenizer(options) { + this.options = options || exports.defaults; + } + + var _proto = Tokenizer.prototype; + + _proto.space = function space(src) { + var cap = this.rules.block.newline.exec(src); + + if (cap && cap[0].length > 0) { + return { + type: 'space', + raw: cap[0] + }; + } + }; + + _proto.code = function code(src) { + var cap = this.rules.block.code.exec(src); + + if (cap) { + var text = cap[0].replace(/^ {1,4}/gm, ''); + return { + type: 'code', + raw: cap[0], + codeBlockStyle: 'indented', + text: !this.options.pedantic ? rtrim(text, '\n') : text + }; + } + }; + + _proto.fences = function fences(src) { + var cap = this.rules.block.fences.exec(src); + + if (cap) { + var raw = cap[0]; + var text = indentCodeCompensation(raw, cap[3] || ''); + return { + type: 'code', + raw: raw, + lang: cap[2] ? cap[2].trim() : cap[2], + text: text + }; + } + }; + + _proto.heading = function heading(src) { + var cap = this.rules.block.heading.exec(src); + + if (cap) { + var text = cap[2].trim(); // remove trailing #s + + if (/#$/.test(text)) { + var trimmed = rtrim(text, '#'); + + if (this.options.pedantic) { + text = trimmed.trim(); + } else if (!trimmed || / $/.test(trimmed)) { + // CommonMark requires space before trailing #s + text = trimmed.trim(); + } + } + + return { + type: 'heading', + raw: cap[0], + depth: cap[1].length, + text: text, + tokens: this.lexer.inline(text) + }; + } + }; + + _proto.hr = function hr(src) { + var cap = this.rules.block.hr.exec(src); + + if (cap) { + return { + type: 'hr', + raw: cap[0] + }; + } + }; + + _proto.blockquote = function blockquote(src) { + var cap = this.rules.block.blockquote.exec(src); + + if (cap) { + var text = cap[0].replace(/^ *>[ \t]?/gm, ''); + return { + type: 'blockquote', + raw: cap[0], + tokens: this.lexer.blockTokens(text, []), + text: text + }; + } + }; + + _proto.list = function list(src) { + var cap = this.rules.block.list.exec(src); + + if (cap) { + var raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine, line, nextLine, rawLine, itemContents, endEarly; + var bull = cap[1].trim(); + var isordered = bull.length > 1; + var list = { + type: 'list', + raw: '', + ordered: isordered, + start: isordered ? +bull.slice(0, -1) : '', + loose: false, + items: [] + }; + bull = isordered ? "\\d{1,9}\\" + bull.slice(-1) : "\\" + bull; + + if (this.options.pedantic) { + bull = isordered ? bull : '[*+-]'; + } // Get next list item + + + var itemRegex = new RegExp("^( {0,3}" + bull + ")((?:[\t ][^\\n]*)?(?:\\n|$))"); // Check if current bullet point can start a new List Item + + while (src) { + endEarly = false; + + if (!(cap = itemRegex.exec(src))) { + break; + } + + if (this.rules.block.hr.test(src)) { + // End list if bullet was actually HR (possibly move into itemRegex?) + break; + } + + raw = cap[0]; + src = src.substring(raw.length); + line = cap[2].split('\n', 1)[0]; + nextLine = src.split('\n', 1)[0]; + + if (this.options.pedantic) { + indent = 2; + itemContents = line.trimLeft(); + } else { + indent = cap[2].search(/[^ ]/); // Find first non-space char + + indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent + + itemContents = line.slice(indent); + indent += cap[1].length; + } + + blankLine = false; + + if (!line && /^ *$/.test(nextLine)) { + // Items begin with at most one blank line + raw += nextLine + '\n'; + src = src.substring(nextLine.length + 1); + endEarly = true; + } + + if (!endEarly) { + var nextBulletRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))"); + var hrRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)"); + var fencesBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}(?:```|~~~)"); + var headingBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}#"); // Check if following lines should be included in List Item + + while (src) { + rawLine = src.split('\n', 1)[0]; + line = rawLine; // Re-align to follow commonmark nesting rules + + if (this.options.pedantic) { + line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' '); + } // End list item if found code fences + + + if (fencesBeginRegex.test(line)) { + break; + } // End list item if found start of new heading + + + if (headingBeginRegex.test(line)) { + break; + } // End list item if found start of new bullet + + + if (nextBulletRegex.test(line)) { + break; + } // Horizontal rule found + + + if (hrRegex.test(src)) { + break; + } + + if (line.search(/[^ ]/) >= indent || !line.trim()) { + // Dedent if possible + itemContents += '\n' + line.slice(indent); + } else if (!blankLine) { + // Until blank line, item doesn't need indentation + itemContents += '\n' + line; + } else { + // Otherwise, improper indentation ends this item + break; + } + + if (!blankLine && !line.trim()) { + // Check if current line is blank + blankLine = true; + } + + raw += rawLine + '\n'; + src = src.substring(rawLine.length + 1); + } + } + + if (!list.loose) { + // If the previous item ended with a blank line, the list is loose + if (endsWithBlankLine) { + list.loose = true; + } else if (/\n *\n *$/.test(raw)) { + endsWithBlankLine = true; + } + } // Check for task list items + + + if (this.options.gfm) { + istask = /^\[[ xX]\] /.exec(itemContents); + + if (istask) { + ischecked = istask[0] !== '[ ] '; + itemContents = itemContents.replace(/^\[[ xX]\] +/, ''); + } + } + + list.items.push({ + type: 'list_item', + raw: raw, + task: !!istask, + checked: ischecked, + loose: false, + text: itemContents + }); + list.raw += raw; + } // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic + + + list.items[list.items.length - 1].raw = raw.trimRight(); + list.items[list.items.length - 1].text = itemContents.trimRight(); + list.raw = list.raw.trimRight(); + var l = list.items.length; // Item child tokens handled here at end because we needed to have the final item to trim it first + + for (i = 0; i < l; i++) { + this.lexer.state.top = false; + list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []); + var spacers = list.items[i].tokens.filter(function (t) { + return t.type === 'space'; + }); + var hasMultipleLineBreaks = spacers.every(function (t) { + var chars = t.raw.split(''); + var lineBreaks = 0; + + for (var _iterator = _createForOfIteratorHelperLoose(chars), _step; !(_step = _iterator()).done;) { + var _char = _step.value; + + if (_char === '\n') { + lineBreaks += 1; + } + + if (lineBreaks > 1) { + return true; + } + } + + return false; + }); + + if (!list.loose && spacers.length && hasMultipleLineBreaks) { + // Having a single line break doesn't mean a list is loose. A single line break is terminating the last list item + list.loose = true; + list.items[i].loose = true; + } + } + + return list; + } + }; + + _proto.html = function html(src) { + var cap = this.rules.block.html.exec(src); + + if (cap) { + var token = { + type: 'html', + raw: cap[0], + pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), + text: cap[0] + }; + + if (this.options.sanitize) { + var text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]); + token.type = 'paragraph'; + token.text = text; + token.tokens = this.lexer.inline(text); + } + + return token; + } + }; + + _proto.def = function def(src) { + var cap = this.rules.block.def.exec(src); + + if (cap) { + if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1); + var tag = cap[1].toLowerCase().replace(/\s+/g, ' '); + return { + type: 'def', + tag: tag, + raw: cap[0], + href: cap[2], + title: cap[3] + }; + } + }; + + _proto.table = function table(src) { + var cap = this.rules.block.table.exec(src); + + if (cap) { + var item = { + type: 'table', + header: splitCells(cap[1]).map(function (c) { + return { + text: c + }; + }), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + rows: cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, '').split('\n') : [] + }; + + if (item.header.length === item.align.length) { + item.raw = cap[0]; + var l = item.align.length; + var i, j, k, row; + + for (i = 0; i < l; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + l = item.rows.length; + + for (i = 0; i < l; i++) { + item.rows[i] = splitCells(item.rows[i], item.header.length).map(function (c) { + return { + text: c + }; + }); + } // parse child tokens inside headers and cells + // header child tokens + + + l = item.header.length; + + for (j = 0; j < l; j++) { + item.header[j].tokens = this.lexer.inline(item.header[j].text); + } // cell child tokens + + + l = item.rows.length; + + for (j = 0; j < l; j++) { + row = item.rows[j]; + + for (k = 0; k < row.length; k++) { + row[k].tokens = this.lexer.inline(row[k].text); + } + } + + return item; + } + } + }; + + _proto.lheading = function lheading(src) { + var cap = this.rules.block.lheading.exec(src); + + if (cap) { + return { + type: 'heading', + raw: cap[0], + depth: cap[2].charAt(0) === '=' ? 1 : 2, + text: cap[1], + tokens: this.lexer.inline(cap[1]) + }; + } + }; + + _proto.paragraph = function paragraph(src) { + var cap = this.rules.block.paragraph.exec(src); + + if (cap) { + var text = cap[1].charAt(cap[1].length - 1) === '\n' ? cap[1].slice(0, -1) : cap[1]; + return { + type: 'paragraph', + raw: cap[0], + text: text, + tokens: this.lexer.inline(text) + }; + } + }; + + _proto.text = function text(src) { + var cap = this.rules.block.text.exec(src); + + if (cap) { + return { + type: 'text', + raw: cap[0], + text: cap[0], + tokens: this.lexer.inline(cap[0]) + }; + } + }; + + _proto.escape = function escape$1(src) { + var cap = this.rules.inline.escape.exec(src); + + if (cap) { + return { + type: 'escape', + raw: cap[0], + text: escape(cap[1]) + }; + } + }; + + _proto.tag = function tag(src) { + var cap = this.rules.inline.tag.exec(src); + + if (cap) { + if (!this.lexer.state.inLink && /^
    /i.test(cap[0])) { + this.lexer.state.inLink = false; + } + + if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { + this.lexer.state.inRawBlock = true; + } else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { + this.lexer.state.inRawBlock = false; + } + + return { + type: this.options.sanitize ? 'text' : 'html', + raw: cap[0], + inLink: this.lexer.state.inLink, + inRawBlock: this.lexer.state.inRawBlock, + text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0] + }; + } + }; + + _proto.link = function link(src) { + var cap = this.rules.inline.link.exec(src); + + if (cap) { + var trimmedUrl = cap[2].trim(); + + if (!this.options.pedantic && /^$/.test(trimmedUrl)) { + return; + } // ending angle bracket cannot be escaped + + + var rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\'); + + if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) { + return; + } + } else { + // find closing parenthesis + var lastParenIndex = findClosingBracket(cap[2], '()'); + + if (lastParenIndex > -1) { + var start = cap[0].indexOf('!') === 0 ? 5 : 4; + var linkLen = start + cap[1].length + lastParenIndex; + cap[2] = cap[2].substring(0, lastParenIndex); + cap[0] = cap[0].substring(0, linkLen).trim(); + cap[3] = ''; + } + } + + var href = cap[2]; + var title = ''; + + if (this.options.pedantic) { + // split pedantic href and title + var link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href); + + if (link) { + href = link[1]; + title = link[3]; + } + } else { + title = cap[3] ? cap[3].slice(1, -1) : ''; + } + + href = href.trim(); + + if (/^$/.test(trimmedUrl)) { + // pedantic allows starting angle bracket without ending angle bracket + href = href.slice(1); + } else { + href = href.slice(1, -1); + } + } + + return outputLink(cap, { + href: href ? href.replace(this.rules.inline._escapes, '$1') : href, + title: title ? title.replace(this.rules.inline._escapes, '$1') : title + }, cap[0], this.lexer); + } + }; + + _proto.reflink = function reflink(src, links) { + var cap; + + if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) { + var link = (cap[2] || cap[1]).replace(/\s+/g, ' '); + link = links[link.toLowerCase()]; + + if (!link || !link.href) { + var text = cap[0].charAt(0); + return { + type: 'text', + raw: text, + text: text + }; + } + + return outputLink(cap, link, cap[0], this.lexer); + } + }; + + _proto.emStrong = function emStrong(src, maskedSrc, prevChar) { + if (prevChar === void 0) { + prevChar = ''; + } + + var match = this.rules.inline.emStrong.lDelim.exec(src); + if (!match) return; // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well + + if (match[3] && prevChar.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/)) return; + var nextChar = match[1] || match[2] || ''; + + if (!nextChar || nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))) { + var lLength = match[0].length - 1; + var rDelim, + rLength, + delimTotal = lLength, + midDelimTotal = 0; + var endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd; + endReg.lastIndex = 0; // Clip maskedSrc to same section of string as src (move to lexer?) + + maskedSrc = maskedSrc.slice(-1 * src.length + lLength); + + while ((match = endReg.exec(maskedSrc)) != null) { + rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6]; + if (!rDelim) continue; // skip single * in __abc*abc__ + + rLength = rDelim.length; + + if (match[3] || match[4]) { + // found another Left Delim + delimTotal += rLength; + continue; + } else if (match[5] || match[6]) { + // either Left or Right Delim + if (lLength % 3 && !((lLength + rLength) % 3)) { + midDelimTotal += rLength; + continue; // CommonMark Emphasis Rules 9-10 + } + } + + delimTotal -= rLength; + if (delimTotal > 0) continue; // Haven't found enough closing delimiters + // Remove extra characters. *a*** -> *a* + + rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal); // Create `em` if smallest delimiter has odd char count. *a*** + + if (Math.min(lLength, rLength) % 2) { + var _text = src.slice(1, lLength + match.index + rLength); + + return { + type: 'em', + raw: src.slice(0, lLength + match.index + rLength + 1), + text: _text, + tokens: this.lexer.inlineTokens(_text) + }; + } // Create 'strong' if smallest delimiter has even char count. **a*** + + + var text = src.slice(2, lLength + match.index + rLength - 1); + return { + type: 'strong', + raw: src.slice(0, lLength + match.index + rLength + 1), + text: text, + tokens: this.lexer.inlineTokens(text) + }; + } + } + }; + + _proto.codespan = function codespan(src) { + var cap = this.rules.inline.code.exec(src); + + if (cap) { + var text = cap[2].replace(/\n/g, ' '); + var hasNonSpaceChars = /[^ ]/.test(text); + var hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text); + + if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) { + text = text.substring(1, text.length - 1); + } + + text = escape(text, true); + return { + type: 'codespan', + raw: cap[0], + text: text + }; + } + }; + + _proto.br = function br(src) { + var cap = this.rules.inline.br.exec(src); + + if (cap) { + return { + type: 'br', + raw: cap[0] + }; + } + }; + + _proto.del = function del(src) { + var cap = this.rules.inline.del.exec(src); + + if (cap) { + return { + type: 'del', + raw: cap[0], + text: cap[2], + tokens: this.lexer.inlineTokens(cap[2]) + }; + } + }; + + _proto.autolink = function autolink(src, mangle) { + var cap = this.rules.inline.autolink.exec(src); + + if (cap) { + var text, href; + + if (cap[2] === '@') { + text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]); + href = 'mailto:' + text; + } else { + text = escape(cap[1]); + href = text; + } + + return { + type: 'link', + raw: cap[0], + text: text, + href: href, + tokens: [{ + type: 'text', + raw: text, + text: text + }] + }; + } + }; + + _proto.url = function url(src, mangle) { + var cap; + + if (cap = this.rules.inline.url.exec(src)) { + var text, href; + + if (cap[2] === '@') { + text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]); + href = 'mailto:' + text; + } else { + // do extended autolink path validation + var prevCapZero; + + do { + prevCapZero = cap[0]; + cap[0] = this.rules.inline._backpedal.exec(cap[0])[0]; + } while (prevCapZero !== cap[0]); + + text = escape(cap[0]); + + if (cap[1] === 'www.') { + href = 'http://' + text; + } else { + href = text; + } + } + + return { + type: 'link', + raw: cap[0], + text: text, + href: href, + tokens: [{ + type: 'text', + raw: text, + text: text + }] + }; + } + }; + + _proto.inlineText = function inlineText(src, smartypants) { + var cap = this.rules.inline.text.exec(src); + + if (cap) { + var text; + + if (this.lexer.state.inRawBlock) { + text = this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0]; + } else { + text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]); + } + + return { + type: 'text', + raw: cap[0], + text: text + }; + } + }; + + return Tokenizer; + }(); + + /** + * Block-Level Grammar + */ + + var block = { + newline: /^(?: *(?:\n|$))+/, + code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/, + fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/, + hr: /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/, + heading: /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/, + blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/, + list: /^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/, + html: '^ {0,3}(?:' // optional indentation + + '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)' // (1) + + '|comment[^\\n]*(\\n+|$)' // (2) + + '|<\\?[\\s\\S]*?(?:\\?>\\n*|$)' // (3) + + '|\\n*|$)' // (4) + + '|\\n*|$)' // (5) + + '|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (6) + + '|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) open tag + + '|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) closing tag + + ')', + def: /^ {0,3}\[(label)\]: *(?:\n *)?]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/, + table: noopTest, + lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/, + // regex template, placeholders will be replaced according to different paragraph + // interruption rules of commonmark and the original markdown spec: + _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/, + text: /^[^\n]+/ + }; + block._label = /(?!\s*\])(?:\\.|[^\[\]\\])+/; + block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/; + block.def = edit(block.def).replace('label', block._label).replace('title', block._title).getRegex(); + block.bullet = /(?:[*+-]|\d{1,9}[.)])/; + block.listItemStart = edit(/^( *)(bull) */).replace('bull', block.bullet).getRegex(); + block.list = edit(block.list).replace(/bull/g, block.bullet).replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))').replace('def', '\\n+(?=' + block.def.source + ')').getRegex(); + block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + '|track|ul'; + block._comment = /|$)/; + block.html = edit(block.html, 'i').replace('comment', block._comment).replace('tag', block._tag).replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(); + block.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs + .replace('|table', '').replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt + .replace('html', ')|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks + .getRegex(); + block.blockquote = edit(block.blockquote).replace('paragraph', block.paragraph).getRegex(); + /** + * Normal Block Grammar + */ + + block.normal = merge({}, block); + /** + * GFM Block Grammar + */ + + block.gfm = merge({}, block.normal, { + table: '^ *([^\\n ].*\\|.*)\\n' // Header + + ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?' // Align + + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells + + }); + block.gfm.table = edit(block.gfm.table).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt + .replace('html', ')|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks + .getRegex(); + block.gfm.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs + .replace('table', block.gfm.table) // interrupt paragraphs with table + .replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt + .replace('html', ')|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks + .getRegex(); + /** + * Pedantic grammar (original John Gruber's loose markdown specification) + */ + + block.pedantic = merge({}, block.normal, { + html: edit('^ *(?:comment *(?:\\n|\\s*$)' + '|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)' // closed tag + + '|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))').replace('comment', block._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b').getRegex(), + def: /^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, + heading: /^(#{1,6})(.*)(?:\n+|$)/, + fences: noopTest, + // fences not supported + paragraph: edit(block.normal._paragraph).replace('hr', block.hr).replace('heading', ' *#{1,6} *[^\n]').replace('lheading', block.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex() + }); + /** + * Inline-Level Grammar + */ + + var inline = { + escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, + autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/, + url: noopTest, + tag: '^comment' + '|^' // self-closing tag + + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag + + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. + + '|^' // declaration, e.g. + + '|^', + // CDATA section + link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/, + reflink: /^!?\[(label)\]\[(ref)\]/, + nolink: /^!?\[(ref)\](?:\[\])?/, + reflinkSearch: 'reflink|nolink(?!\\()', + emStrong: { + lDelim: /^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/, + // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right. + // () Skip orphan inside strong () Consume to delim (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a + rDelimAst: /^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/, + rDelimUnd: /^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ // ^- Not allowed for _ + + }, + code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/, + br: /^( {2,}|\\)\n(?!\s*$)/, + del: noopTest, + text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~'; + inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex(); // sequences em should skip over [title](link), `code`, + + inline.blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g; + inline.escapedEmSt = /\\\*|\\_/g; + inline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex(); + inline.emStrong.lDelim = edit(inline.emStrong.lDelim).replace(/punct/g, inline._punctuation).getRegex(); + inline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g').replace(/punct/g, inline._punctuation).getRegex(); + inline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g').replace(/punct/g, inline._punctuation).getRegex(); + inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g; + inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/; + inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/; + inline.autolink = edit(inline.autolink).replace('scheme', inline._scheme).replace('email', inline._email).getRegex(); + inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/; + inline.tag = edit(inline.tag).replace('comment', inline._comment).replace('attribute', inline._attribute).getRegex(); + inline._label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/; + inline._href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/; + inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/; + inline.link = edit(inline.link).replace('label', inline._label).replace('href', inline._href).replace('title', inline._title).getRegex(); + inline.reflink = edit(inline.reflink).replace('label', inline._label).replace('ref', block._label).getRegex(); + inline.nolink = edit(inline.nolink).replace('ref', block._label).getRegex(); + inline.reflinkSearch = edit(inline.reflinkSearch, 'g').replace('reflink', inline.reflink).replace('nolink', inline.nolink).getRegex(); + /** + * Normal Inline Grammar + */ + + inline.normal = merge({}, inline); + /** + * Pedantic Inline Grammar + */ + + inline.pedantic = merge({}, inline.normal, { + strong: { + start: /^__|\*\*/, + middle: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, + endAst: /\*\*(?!\*)/g, + endUnd: /__(?!_)/g + }, + em: { + start: /^_|\*/, + middle: /^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/, + endAst: /\*(?!\*)/g, + endUnd: /_(?!_)/g + }, + link: edit(/^!?\[(label)\]\((.*?)\)/).replace('label', inline._label).getRegex(), + reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace('label', inline._label).getRegex() + }); + /** + * GFM Inline Grammar + */ + + inline.gfm = merge({}, inline.normal, { + escape: edit(inline.escape).replace('])', '~|])').getRegex(), + _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/, + url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, + _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/, + del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/, + text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\ 0.5) { + ch = 'x' + ch.toString(16); + } + + out += '&#' + ch + ';'; + } + + return out; + } + /** + * Block Lexer + */ + + + var Lexer = /*#__PURE__*/function () { + function Lexer(options) { + this.tokens = []; + this.tokens.links = Object.create(null); + this.options = options || exports.defaults; + this.options.tokenizer = this.options.tokenizer || new Tokenizer(); + this.tokenizer = this.options.tokenizer; + this.tokenizer.options = this.options; + this.tokenizer.lexer = this; + this.inlineQueue = []; + this.state = { + inLink: false, + inRawBlock: false, + top: true + }; + var rules = { + block: block.normal, + inline: inline.normal + }; + + if (this.options.pedantic) { + rules.block = block.pedantic; + rules.inline = inline.pedantic; + } else if (this.options.gfm) { + rules.block = block.gfm; + + if (this.options.breaks) { + rules.inline = inline.breaks; + } else { + rules.inline = inline.gfm; + } + } + + this.tokenizer.rules = rules; + } + /** + * Expose Rules + */ + + + /** + * Static Lex Method + */ + Lexer.lex = function lex(src, options) { + var lexer = new Lexer(options); + return lexer.lex(src); + } + /** + * Static Lex Inline Method + */ + ; + + Lexer.lexInline = function lexInline(src, options) { + var lexer = new Lexer(options); + return lexer.inlineTokens(src); + } + /** + * Preprocessing + */ + ; + + var _proto = Lexer.prototype; + + _proto.lex = function lex(src) { + src = src.replace(/\r\n|\r/g, '\n'); + this.blockTokens(src, this.tokens); + var next; + + while (next = this.inlineQueue.shift()) { + this.inlineTokens(next.src, next.tokens); + } + + return this.tokens; + } + /** + * Lexing + */ + ; + + _proto.blockTokens = function blockTokens(src, tokens) { + var _this = this; + + if (tokens === void 0) { + tokens = []; + } + + if (this.options.pedantic) { + src = src.replace(/\t/g, ' ').replace(/^ +$/gm, ''); + } else { + src = src.replace(/^( *)(\t+)/gm, function (_, leading, tabs) { + return leading + ' '.repeat(tabs.length); + }); + } + + var token, lastToken, cutSrc, lastParagraphClipped; + + while (src) { + if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some(function (extTokenizer) { + if (token = extTokenizer.call({ + lexer: _this + }, src, tokens)) { + src = src.substring(token.raw.length); + tokens.push(token); + return true; + } + + return false; + })) { + continue; + } // newline + + + if (token = this.tokenizer.space(src)) { + src = src.substring(token.raw.length); + + if (token.raw.length === 1 && tokens.length > 0) { + // if there's a single \n as a spacer, it's terminating the last line, + // so move it there so that we don't get unecessary paragraph tags + tokens[tokens.length - 1].raw += '\n'; + } else { + tokens.push(token); + } + + continue; + } // code + + + if (token = this.tokenizer.code(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; // An indented code block cannot interrupt a paragraph. + + if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.text; + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else { + tokens.push(token); + } + + continue; + } // fences + + + if (token = this.tokenizer.fences(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // heading + + + if (token = this.tokenizer.heading(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // hr + + + if (token = this.tokenizer.hr(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // blockquote + + + if (token = this.tokenizer.blockquote(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // list + + + if (token = this.tokenizer.list(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // html + + + if (token = this.tokenizer.html(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // def + + + if (token = this.tokenizer.def(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + + if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.raw; + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else if (!this.tokens.links[token.tag]) { + this.tokens.links[token.tag] = { + href: token.href, + title: token.title + }; + } + + continue; + } // table (gfm) + + + if (token = this.tokenizer.table(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // lheading + + + if (token = this.tokenizer.lheading(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // top-level paragraph + // prevent paragraph consuming extensions by clipping 'src' to extension start + + + cutSrc = src; + + if (this.options.extensions && this.options.extensions.startBlock) { + (function () { + var startIndex = Infinity; + var tempSrc = src.slice(1); + var tempStart = void 0; + + _this.options.extensions.startBlock.forEach(function (getStartIndex) { + tempStart = getStartIndex.call({ + lexer: this + }, tempSrc); + + if (typeof tempStart === 'number' && tempStart >= 0) { + startIndex = Math.min(startIndex, tempStart); + } + }); + + if (startIndex < Infinity && startIndex >= 0) { + cutSrc = src.substring(0, startIndex + 1); + } + })(); + } + + if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) { + lastToken = tokens[tokens.length - 1]; + + if (lastParagraphClipped && lastToken.type === 'paragraph') { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.text; + this.inlineQueue.pop(); + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else { + tokens.push(token); + } + + lastParagraphClipped = cutSrc.length !== src.length; + src = src.substring(token.raw.length); + continue; + } // text + + + if (token = this.tokenizer.text(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + + if (lastToken && lastToken.type === 'text') { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.text; + this.inlineQueue.pop(); + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else { + tokens.push(token); + } + + continue; + } + + if (src) { + var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0); + + if (this.options.silent) { + console.error(errMsg); + break; + } else { + throw new Error(errMsg); + } + } + } + + this.state.top = true; + return tokens; + }; + + _proto.inline = function inline(src, tokens) { + if (tokens === void 0) { + tokens = []; + } + + this.inlineQueue.push({ + src: src, + tokens: tokens + }); + return tokens; + } + /** + * Lexing/Compiling + */ + ; + + _proto.inlineTokens = function inlineTokens(src, tokens) { + var _this2 = this; + + if (tokens === void 0) { + tokens = []; + } + + var token, lastToken, cutSrc; // String with links masked to avoid interference with em and strong + + var maskedSrc = src; + var match; + var keepPrevChar, prevChar; // Mask out reflinks + + if (this.tokens.links) { + var links = Object.keys(this.tokens.links); + + if (links.length > 0) { + while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) { + if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) { + maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex); + } + } + } + } // Mask out other blocks + + + while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) { + maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex); + } // Mask out escaped em & strong delimiters + + + while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) { + maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex); + } + + while (src) { + if (!keepPrevChar) { + prevChar = ''; + } + + keepPrevChar = false; // extensions + + if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some(function (extTokenizer) { + if (token = extTokenizer.call({ + lexer: _this2 + }, src, tokens)) { + src = src.substring(token.raw.length); + tokens.push(token); + return true; + } + + return false; + })) { + continue; + } // escape + + + if (token = this.tokenizer.escape(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // tag + + + if (token = this.tokenizer.tag(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + + if (lastToken && token.type === 'text' && lastToken.type === 'text') { + lastToken.raw += token.raw; + lastToken.text += token.text; + } else { + tokens.push(token); + } + + continue; + } // link + + + if (token = this.tokenizer.link(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // reflink, nolink + + + if (token = this.tokenizer.reflink(src, this.tokens.links)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + + if (lastToken && token.type === 'text' && lastToken.type === 'text') { + lastToken.raw += token.raw; + lastToken.text += token.text; + } else { + tokens.push(token); + } + + continue; + } // em & strong + + + if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // code + + + if (token = this.tokenizer.codespan(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // br + + + if (token = this.tokenizer.br(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // del (gfm) + + + if (token = this.tokenizer.del(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // autolink + + + if (token = this.tokenizer.autolink(src, mangle)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // url (gfm) + + + if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } // text + // prevent inlineText consuming extensions by clipping 'src' to extension start + + + cutSrc = src; + + if (this.options.extensions && this.options.extensions.startInline) { + (function () { + var startIndex = Infinity; + var tempSrc = src.slice(1); + var tempStart = void 0; + + _this2.options.extensions.startInline.forEach(function (getStartIndex) { + tempStart = getStartIndex.call({ + lexer: this + }, tempSrc); + + if (typeof tempStart === 'number' && tempStart >= 0) { + startIndex = Math.min(startIndex, tempStart); + } + }); + + if (startIndex < Infinity && startIndex >= 0) { + cutSrc = src.substring(0, startIndex + 1); + } + })(); + } + + if (token = this.tokenizer.inlineText(cutSrc, smartypants)) { + src = src.substring(token.raw.length); + + if (token.raw.slice(-1) !== '_') { + // Track prevChar before string of ____ started + prevChar = token.raw.slice(-1); + } + + keepPrevChar = true; + lastToken = tokens[tokens.length - 1]; + + if (lastToken && lastToken.type === 'text') { + lastToken.raw += token.raw; + lastToken.text += token.text; + } else { + tokens.push(token); + } + + continue; + } + + if (src) { + var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0); + + if (this.options.silent) { + console.error(errMsg); + break; + } else { + throw new Error(errMsg); + } + } + } + + return tokens; + }; + + _createClass(Lexer, null, [{ + key: "rules", + get: function get() { + return { + block: block, + inline: inline + }; + } + }]); + + return Lexer; + }(); + + /** + * Renderer + */ + + var Renderer = /*#__PURE__*/function () { + function Renderer(options) { + this.options = options || exports.defaults; + } + + var _proto = Renderer.prototype; + + _proto.code = function code(_code, infostring, escaped) { + var lang = (infostring || '').match(/\S*/)[0]; + + if (this.options.highlight) { + var out = this.options.highlight(_code, lang); + + if (out != null && out !== _code) { + escaped = true; + _code = out; + } + } + + _code = _code.replace(/\n$/, '') + '\n'; + + if (!lang) { + return '
    ' + (escaped ? _code : escape(_code, true)) + '
    \n'; + } + + return '
    ' + (escaped ? _code : escape(_code, true)) + '
    \n'; + } + /** + * @param {string} quote + */ + ; + + _proto.blockquote = function blockquote(quote) { + return "
    \n" + quote + "
    \n"; + }; + + _proto.html = function html(_html) { + return _html; + } + /** + * @param {string} text + * @param {string} level + * @param {string} raw + * @param {any} slugger + */ + ; + + _proto.heading = function heading(text, level, raw, slugger) { + if (this.options.headerIds) { + var id = this.options.headerPrefix + slugger.slug(raw); + return "" + text + "\n"; + } // ignore IDs + + + return "" + text + "\n"; + }; + + _proto.hr = function hr() { + return this.options.xhtml ? '
    \n' : '
    \n'; + }; + + _proto.list = function list(body, ordered, start) { + var type = ordered ? 'ol' : 'ul', + startatt = ordered && start !== 1 ? ' start="' + start + '"' : ''; + return '<' + type + startatt + '>\n' + body + '\n'; + } + /** + * @param {string} text + */ + ; + + _proto.listitem = function listitem(text) { + return "
  • " + text + "
  • \n"; + }; + + _proto.checkbox = function checkbox(checked) { + return ' '; + } + /** + * @param {string} text + */ + ; + + _proto.paragraph = function paragraph(text) { + return "

    " + text + "

    \n"; + } + /** + * @param {string} header + * @param {string} body + */ + ; + + _proto.table = function table(header, body) { + if (body) body = "" + body + ""; + return '\n' + '\n' + header + '\n' + body + '
    \n'; + } + /** + * @param {string} content + */ + ; + + _proto.tablerow = function tablerow(content) { + return "\n" + content + "\n"; + }; + + _proto.tablecell = function tablecell(content, flags) { + var type = flags.header ? 'th' : 'td'; + var tag = flags.align ? "<" + type + " align=\"" + flags.align + "\">" : "<" + type + ">"; + return tag + content + ("\n"); + } + /** + * span level renderer + * @param {string} text + */ + ; + + _proto.strong = function strong(text) { + return "" + text + ""; + } + /** + * @param {string} text + */ + ; + + _proto.em = function em(text) { + return "" + text + ""; + } + /** + * @param {string} text + */ + ; + + _proto.codespan = function codespan(text) { + return "" + text + ""; + }; + + _proto.br = function br() { + return this.options.xhtml ? '
    ' : '
    '; + } + /** + * @param {string} text + */ + ; + + _proto.del = function del(text) { + return "" + text + ""; + } + /** + * @param {string} href + * @param {string} title + * @param {string} text + */ + ; + + _proto.link = function link(href, title, text) { + href = cleanUrl(this.options.sanitize, this.options.baseUrl, href); + + if (href === null) { + return text; + } + + var out = '
    '; + return out; + } + /** + * @param {string} href + * @param {string} title + * @param {string} text + */ + ; + + _proto.image = function image(href, title, text) { + href = cleanUrl(this.options.sanitize, this.options.baseUrl, href); + + if (href === null) { + return text; + } + + var out = "\""' : '>'; + return out; + }; + + _proto.text = function text(_text) { + return _text; + }; + + return Renderer; + }(); + + /** + * TextRenderer + * returns only the textual part of the token + */ + var TextRenderer = /*#__PURE__*/function () { + function TextRenderer() {} + + var _proto = TextRenderer.prototype; + + // no need for block level renderers + _proto.strong = function strong(text) { + return text; + }; + + _proto.em = function em(text) { + return text; + }; + + _proto.codespan = function codespan(text) { + return text; + }; + + _proto.del = function del(text) { + return text; + }; + + _proto.html = function html(text) { + return text; + }; + + _proto.text = function text(_text) { + return _text; + }; + + _proto.link = function link(href, title, text) { + return '' + text; + }; + + _proto.image = function image(href, title, text) { + return '' + text; + }; + + _proto.br = function br() { + return ''; + }; + + return TextRenderer; + }(); + + /** + * Slugger generates header id + */ + var Slugger = /*#__PURE__*/function () { + function Slugger() { + this.seen = {}; + } + /** + * @param {string} value + */ + + + var _proto = Slugger.prototype; + + _proto.serialize = function serialize(value) { + return value.toLowerCase().trim() // remove html tags + .replace(/<[!\/a-z].*?>/ig, '') // remove unwanted chars + .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '').replace(/\s/g, '-'); + } + /** + * Finds the next safe (unique) slug to use + * @param {string} originalSlug + * @param {boolean} isDryRun + */ + ; + + _proto.getNextSafeSlug = function getNextSafeSlug(originalSlug, isDryRun) { + var slug = originalSlug; + var occurenceAccumulator = 0; + + if (this.seen.hasOwnProperty(slug)) { + occurenceAccumulator = this.seen[originalSlug]; + + do { + occurenceAccumulator++; + slug = originalSlug + '-' + occurenceAccumulator; + } while (this.seen.hasOwnProperty(slug)); + } + + if (!isDryRun) { + this.seen[originalSlug] = occurenceAccumulator; + this.seen[slug] = 0; + } + + return slug; + } + /** + * Convert string to unique id + * @param {object} [options] + * @param {boolean} [options.dryrun] Generates the next unique slug without + * updating the internal accumulator. + */ + ; + + _proto.slug = function slug(value, options) { + if (options === void 0) { + options = {}; + } + + var slug = this.serialize(value); + return this.getNextSafeSlug(slug, options.dryrun); + }; + + return Slugger; + }(); + + /** + * Parsing & Compiling + */ + + var Parser = /*#__PURE__*/function () { + function Parser(options) { + this.options = options || exports.defaults; + this.options.renderer = this.options.renderer || new Renderer(); + this.renderer = this.options.renderer; + this.renderer.options = this.options; + this.textRenderer = new TextRenderer(); + this.slugger = new Slugger(); + } + /** + * Static Parse Method + */ + + + Parser.parse = function parse(tokens, options) { + var parser = new Parser(options); + return parser.parse(tokens); + } + /** + * Static Parse Inline Method + */ + ; + + Parser.parseInline = function parseInline(tokens, options) { + var parser = new Parser(options); + return parser.parseInline(tokens); + } + /** + * Parse Loop + */ + ; + + var _proto = Parser.prototype; + + _proto.parse = function parse(tokens, top) { + if (top === void 0) { + top = true; + } + + var out = '', + i, + j, + k, + l2, + l3, + row, + cell, + header, + body, + token, + ordered, + start, + loose, + itemBody, + item, + checked, + task, + checkbox, + ret; + var l = tokens.length; + + for (i = 0; i < l; i++) { + token = tokens[i]; // Run any renderer extensions + + if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) { + ret = this.options.extensions.renderers[token.type].call({ + parser: this + }, token); + + if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) { + out += ret || ''; + continue; + } + } + + switch (token.type) { + case 'space': + { + continue; + } + + case 'hr': + { + out += this.renderer.hr(); + continue; + } + + case 'heading': + { + out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape(this.parseInline(token.tokens, this.textRenderer)), this.slugger); + continue; + } + + case 'code': + { + out += this.renderer.code(token.text, token.lang, token.escaped); + continue; + } + + case 'table': + { + header = ''; // header + + cell = ''; + l2 = token.header.length; + + for (j = 0; j < l2; j++) { + cell += this.renderer.tablecell(this.parseInline(token.header[j].tokens), { + header: true, + align: token.align[j] + }); + } + + header += this.renderer.tablerow(cell); + body = ''; + l2 = token.rows.length; + + for (j = 0; j < l2; j++) { + row = token.rows[j]; + cell = ''; + l3 = row.length; + + for (k = 0; k < l3; k++) { + cell += this.renderer.tablecell(this.parseInline(row[k].tokens), { + header: false, + align: token.align[k] + }); + } + + body += this.renderer.tablerow(cell); + } + + out += this.renderer.table(header, body); + continue; + } + + case 'blockquote': + { + body = this.parse(token.tokens); + out += this.renderer.blockquote(body); + continue; + } + + case 'list': + { + ordered = token.ordered; + start = token.start; + loose = token.loose; + l2 = token.items.length; + body = ''; + + for (j = 0; j < l2; j++) { + item = token.items[j]; + checked = item.checked; + task = item.task; + itemBody = ''; + + if (item.task) { + checkbox = this.renderer.checkbox(checked); + + if (loose) { + if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') { + item.tokens[0].text = checkbox + ' ' + item.tokens[0].text; + + if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') { + item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text; + } + } else { + item.tokens.unshift({ + type: 'text', + text: checkbox + }); + } + } else { + itemBody += checkbox; + } + } + + itemBody += this.parse(item.tokens, loose); + body += this.renderer.listitem(itemBody, task, checked); + } + + out += this.renderer.list(body, ordered, start); + continue; + } + + case 'html': + { + // TODO parse inline content if parameter markdown=1 + out += this.renderer.html(token.text); + continue; + } + + case 'paragraph': + { + out += this.renderer.paragraph(this.parseInline(token.tokens)); + continue; + } + + case 'text': + { + body = token.tokens ? this.parseInline(token.tokens) : token.text; + + while (i + 1 < l && tokens[i + 1].type === 'text') { + token = tokens[++i]; + body += '\n' + (token.tokens ? this.parseInline(token.tokens) : token.text); + } + + out += top ? this.renderer.paragraph(body) : body; + continue; + } + + default: + { + var errMsg = 'Token with "' + token.type + '" type was not found.'; + + if (this.options.silent) { + console.error(errMsg); + return; + } else { + throw new Error(errMsg); + } + } + } + } + + return out; + } + /** + * Parse Inline Tokens + */ + ; + + _proto.parseInline = function parseInline(tokens, renderer) { + renderer = renderer || this.renderer; + var out = '', + i, + token, + ret; + var l = tokens.length; + + for (i = 0; i < l; i++) { + token = tokens[i]; // Run any renderer extensions + + if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) { + ret = this.options.extensions.renderers[token.type].call({ + parser: this + }, token); + + if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) { + out += ret || ''; + continue; + } + } + + switch (token.type) { + case 'escape': + { + out += renderer.text(token.text); + break; + } + + case 'html': + { + out += renderer.html(token.text); + break; + } + + case 'link': + { + out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer)); + break; + } + + case 'image': + { + out += renderer.image(token.href, token.title, token.text); + break; + } + + case 'strong': + { + out += renderer.strong(this.parseInline(token.tokens, renderer)); + break; + } + + case 'em': + { + out += renderer.em(this.parseInline(token.tokens, renderer)); + break; + } + + case 'codespan': + { + out += renderer.codespan(token.text); + break; + } + + case 'br': + { + out += renderer.br(); + break; + } + + case 'del': + { + out += renderer.del(this.parseInline(token.tokens, renderer)); + break; + } + + case 'text': + { + out += renderer.text(token.text); + break; + } + + default: + { + var errMsg = 'Token with "' + token.type + '" type was not found.'; + + if (this.options.silent) { + console.error(errMsg); + return; + } else { + throw new Error(errMsg); + } + } + } + } + + return out; + }; + + return Parser; + }(); + + /** + * Marked + */ + + function marked(src, opt, callback) { + // throw error in case of non string input + if (typeof src === 'undefined' || src === null) { + throw new Error('marked(): input parameter is undefined or null'); + } + + if (typeof src !== 'string') { + throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected'); + } + + if (typeof opt === 'function') { + callback = opt; + opt = null; + } + + opt = merge({}, marked.defaults, opt || {}); + checkSanitizeDeprecation(opt); + + if (callback) { + var highlight = opt.highlight; + var tokens; + + try { + tokens = Lexer.lex(src, opt); + } catch (e) { + return callback(e); + } + + var done = function done(err) { + var out; + + if (!err) { + try { + if (opt.walkTokens) { + marked.walkTokens(tokens, opt.walkTokens); + } + + out = Parser.parse(tokens, opt); + } catch (e) { + err = e; + } + } + + opt.highlight = highlight; + return err ? callback(err) : callback(null, out); + }; + + if (!highlight || highlight.length < 3) { + return done(); + } + + delete opt.highlight; + if (!tokens.length) return done(); + var pending = 0; + marked.walkTokens(tokens, function (token) { + if (token.type === 'code') { + pending++; + setTimeout(function () { + highlight(token.text, token.lang, function (err, code) { + if (err) { + return done(err); + } + + if (code != null && code !== token.text) { + token.text = code; + token.escaped = true; + } + + pending--; + + if (pending === 0) { + done(); + } + }); + }, 0); + } + }); + + if (pending === 0) { + done(); + } + + return; + } + + function onError(e) { + e.message += '\nPlease report this to https://github.com/markedjs/marked.'; + + if (opt.silent) { + return '

    An error occurred:

    ' + escape(e.message + '', true) + '
    '; + } + + throw e; + } + + try { + var _tokens = Lexer.lex(src, opt); + + if (opt.walkTokens) { + if (opt.async) { + return Promise.all(marked.walkTokens(_tokens, opt.walkTokens)).then(function () { + return Parser.parse(_tokens, opt); + })["catch"](onError); + } + + marked.walkTokens(_tokens, opt.walkTokens); + } + + return Parser.parse(_tokens, opt); + } catch (e) { + onError(e); + } + } + /** + * Options + */ + + marked.options = marked.setOptions = function (opt) { + merge(marked.defaults, opt); + changeDefaults(marked.defaults); + return marked; + }; + + marked.getDefaults = getDefaults; + marked.defaults = exports.defaults; + /** + * Use Extension + */ + + marked.use = function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var opts = merge.apply(void 0, [{}].concat(args)); + var extensions = marked.defaults.extensions || { + renderers: {}, + childTokens: {} + }; + var hasExtensions; + args.forEach(function (pack) { + // ==-- Parse "addon" extensions --== // + if (pack.extensions) { + hasExtensions = true; + pack.extensions.forEach(function (ext) { + if (!ext.name) { + throw new Error('extension name required'); + } + + if (ext.renderer) { + // Renderer extensions + var prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null; + + if (prevRenderer) { + // Replace extension with func to run new extension but fall back if false + extensions.renderers[ext.name] = function () { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var ret = ext.renderer.apply(this, args); + + if (ret === false) { + ret = prevRenderer.apply(this, args); + } + + return ret; + }; + } else { + extensions.renderers[ext.name] = ext.renderer; + } + } + + if (ext.tokenizer) { + // Tokenizer Extensions + if (!ext.level || ext.level !== 'block' && ext.level !== 'inline') { + throw new Error("extension level must be 'block' or 'inline'"); + } + + if (extensions[ext.level]) { + extensions[ext.level].unshift(ext.tokenizer); + } else { + extensions[ext.level] = [ext.tokenizer]; + } + + if (ext.start) { + // Function to check for start of token + if (ext.level === 'block') { + if (extensions.startBlock) { + extensions.startBlock.push(ext.start); + } else { + extensions.startBlock = [ext.start]; + } + } else if (ext.level === 'inline') { + if (extensions.startInline) { + extensions.startInline.push(ext.start); + } else { + extensions.startInline = [ext.start]; + } + } + } + } + + if (ext.childTokens) { + // Child tokens to be visited by walkTokens + extensions.childTokens[ext.name] = ext.childTokens; + } + }); + } // ==-- Parse "overwrite" extensions --== // + + + if (pack.renderer) { + (function () { + var renderer = marked.defaults.renderer || new Renderer(); + + var _loop = function _loop(prop) { + var prevRenderer = renderer[prop]; // Replace renderer with func to run extension, but fall back if false + + renderer[prop] = function () { + for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + var ret = pack.renderer[prop].apply(renderer, args); + + if (ret === false) { + ret = prevRenderer.apply(renderer, args); + } + + return ret; + }; + }; + + for (var prop in pack.renderer) { + _loop(prop); + } + + opts.renderer = renderer; + })(); + } + + if (pack.tokenizer) { + (function () { + var tokenizer = marked.defaults.tokenizer || new Tokenizer(); + + var _loop2 = function _loop2(prop) { + var prevTokenizer = tokenizer[prop]; // Replace tokenizer with func to run extension, but fall back if false + + tokenizer[prop] = function () { + for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } + + var ret = pack.tokenizer[prop].apply(tokenizer, args); + + if (ret === false) { + ret = prevTokenizer.apply(tokenizer, args); + } + + return ret; + }; + }; + + for (var prop in pack.tokenizer) { + _loop2(prop); + } + + opts.tokenizer = tokenizer; + })(); + } // ==-- Parse WalkTokens extensions --== // + + + if (pack.walkTokens) { + var _walkTokens = marked.defaults.walkTokens; + + opts.walkTokens = function (token) { + var values = []; + values.push(pack.walkTokens.call(this, token)); + + if (_walkTokens) { + values = values.concat(_walkTokens.call(this, token)); + } + + return values; + }; + } + + if (hasExtensions) { + opts.extensions = extensions; + } + + marked.setOptions(opts); + }); + }; + /** + * Run callback for every token + */ + + + marked.walkTokens = function (tokens, callback) { + var values = []; + + var _loop3 = function _loop3() { + var token = _step.value; + values = values.concat(callback.call(marked, token)); + + switch (token.type) { + case 'table': + { + for (var _iterator2 = _createForOfIteratorHelperLoose(token.header), _step2; !(_step2 = _iterator2()).done;) { + var cell = _step2.value; + values = values.concat(marked.walkTokens(cell.tokens, callback)); + } + + for (var _iterator3 = _createForOfIteratorHelperLoose(token.rows), _step3; !(_step3 = _iterator3()).done;) { + var row = _step3.value; + + for (var _iterator4 = _createForOfIteratorHelperLoose(row), _step4; !(_step4 = _iterator4()).done;) { + var _cell = _step4.value; + values = values.concat(marked.walkTokens(_cell.tokens, callback)); + } + } + + break; + } + + case 'list': + { + values = values.concat(marked.walkTokens(token.items, callback)); + break; + } + + default: + { + if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) { + // Walk any extensions + marked.defaults.extensions.childTokens[token.type].forEach(function (childTokens) { + values = values.concat(marked.walkTokens(token[childTokens], callback)); + }); + } else if (token.tokens) { + values = values.concat(marked.walkTokens(token.tokens, callback)); + } + } + } + }; + + for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) { + _loop3(); + } + + return values; + }; + /** + * Parse Inline + * @param {string} src + */ + + + marked.parseInline = function (src, opt) { + // throw error in case of non string input + if (typeof src === 'undefined' || src === null) { + throw new Error('marked.parseInline(): input parameter is undefined or null'); + } + + if (typeof src !== 'string') { + throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected'); + } + + opt = merge({}, marked.defaults, opt || {}); + checkSanitizeDeprecation(opt); + + try { + var tokens = Lexer.lexInline(src, opt); + + if (opt.walkTokens) { + marked.walkTokens(tokens, opt.walkTokens); + } + + return Parser.parseInline(tokens, opt); + } catch (e) { + e.message += '\nPlease report this to https://github.com/markedjs/marked.'; + + if (opt.silent) { + return '

    An error occurred:

    ' + escape(e.message + '', true) + '
    '; + } + + throw e; + } + }; + /** + * Expose + */ + + + marked.Parser = Parser; + marked.parser = Parser.parse; + marked.Renderer = Renderer; + marked.TextRenderer = TextRenderer; + marked.Lexer = Lexer; + marked.lexer = Lexer.lex; + marked.Tokenizer = Tokenizer; + marked.Slugger = Slugger; + marked.parse = marked; + var options = marked.options; + var setOptions = marked.setOptions; + var use = marked.use; + var walkTokens = marked.walkTokens; + var parseInline = marked.parseInline; + var parse = marked; + var parser = Parser.parse; + var lexer = Lexer.lex; + + exports.Lexer = Lexer; + exports.Parser = Parser; + exports.Renderer = Renderer; + exports.Slugger = Slugger; + exports.TextRenderer = TextRenderer; + exports.Tokenizer = Tokenizer; + exports.getDefaults = getDefaults; + exports.lexer = lexer; + exports.marked = marked; + exports.options = options; + exports.parse = parse; + exports.parseInline = parseInline; + exports.parser = parser; + exports.setOptions = setOptions; + exports.use = use; + exports.walkTokens = walkTokens; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/man/marked.1 b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/man/marked.1 new file mode 100644 index 0000000..4dd24fd --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/man/marked.1 @@ -0,0 +1,92 @@ +.ds q \N'34' +.TH marked 1 + +.SH NAME +marked \- a javascript markdown parser + +.SH SYNOPSIS +.B marked +[\-o \fI\fP] [\-i \fI\fP] [\-s \fI\fP] [\-\-help] +[\-\-tokens] [\-\-pedantic] [\-\-gfm] +[\-\-breaks] [\-\-sanitize] +[\-\-smart\-lists] [\-\-lang\-prefix \fI\fP] +[\-\-no\-etc...] [\-\-silent] [\fIfilename\fP] + +.SH DESCRIPTION +.B marked +is a full-featured javascript markdown parser, built for speed. +It also includes multiple GFM features. + +.SH EXAMPLES +.TP +cat in.md | marked > out.html +.TP +echo "hello *world*" | marked +.TP +marked \-o out.html \-i in.md \-\-gfm +.TP +marked \-\-output="hello world.html" \-i in.md \-\-no-breaks + +.SH OPTIONS +.TP +.BI \-o,\ \-\-output\ [\fIoutput\fP] +Specify file output. If none is specified, write to stdout. +.TP +.BI \-i,\ \-\-input\ [\fIinput\fP] +Specify file input, otherwise use last argument as input file. +If no input file is specified, read from stdin. +.TP +.BI \-s,\ \-\-string\ [\fIstring\fP] +Specify string input instead of a file. +.TP +.BI \-t,\ \-\-tokens +Output a token stream instead of html. +.TP +.BI \-\-pedantic +Conform to obscure parts of markdown.pl as much as possible. +Don't fix original markdown bugs. +.TP +.BI \-\-gfm +Enable github flavored markdown. +.TP +.BI \-\-breaks +Enable GFM line breaks. Only works with the gfm option. +.TP +.BI \-\-sanitize +Sanitize output. Ignore any HTML input. +.TP +.BI \-\-smart\-lists +Use smarter list behavior than the original markdown. +.TP +.BI \-\-lang\-prefix\ [\fIprefix\fP] +Set the prefix for code block classes. +.TP +.BI \-\-mangle +Mangle email addresses. +.TP +.BI \-\-no\-sanitize,\ \-no-etc... +The inverse of any of the marked options above. +.TP +.BI \-\-silent +Silence error output. +.TP +.BI \-h,\ \-\-help +Display help information. + +.SH CONFIGURATION +For configuring and running programmatically. + +.B Example + + import { marked } from 'marked'; + marked('*foo*', { gfm: true }); + +.SH BUGS +Please report any bugs to https://github.com/markedjs/marked. + +.SH LICENSE +Copyright (c) 2011-2014, Christopher Jeffrey (MIT License). + +.SH "SEE ALSO" +.BR markdown(1), +.BR node.js(1) diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/man/marked.1.txt b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/man/marked.1.txt new file mode 100644 index 0000000..1a6816b --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/man/marked.1.txt @@ -0,0 +1,86 @@ +marked(1) General Commands Manual marked(1) + +NAME + marked - a javascript markdown parser + +SYNOPSIS + marked [-o ] [-i ] [-s ] [--help] [--tokens] + [--pedantic] [--gfm] [--breaks] [--sanitize] [--smart-lists] + [--lang-prefix ] [--no-etc...] [--silent] [filename] + + +DESCRIPTION + marked is a full-featured javascript markdown parser, built for speed. + It also includes multiple GFM features. + +EXAMPLES + cat in.md | marked > out.html + + echo "hello *world*" | marked + + marked -o out.html -i in.md --gfm + + marked --output="hello world.html" -i in.md --no-breaks + +OPTIONS + -o, --output [output] + Specify file output. If none is specified, write to stdout. + + -i, --input [input] + Specify file input, otherwise use last argument as input file. + If no input file is specified, read from stdin. + + -s, --string [string] + Specify string input instead of a file. + + -t, --tokens + Output a token stream instead of html. + + --pedantic + Conform to obscure parts of markdown.pl as much as possible. + Don't fix original markdown bugs. + + --gfm Enable github flavored markdown. + + --breaks + Enable GFM line breaks. Only works with the gfm option. + + --sanitize + Sanitize output. Ignore any HTML input. + + --smart-lists + Use smarter list behavior than the original markdown. + + --lang-prefix [prefix] + Set the prefix for code block classes. + + --mangle + Mangle email addresses. + + --no-sanitize, -no-etc... + The inverse of any of the marked options above. + + --silent + Silence error output. + + -h, --help + Display help information. + +CONFIGURATION + For configuring and running programmatically. + + Example + + import { marked } from 'marked'; + marked('*foo*', { gfm: true }); + +BUGS + Please report any bugs to https://github.com/markedjs/marked. + +LICENSE + Copyright (c) 2011-2014, Christopher Jeffrey (MIT License). + +SEE ALSO + markdown(1), node.js(1) + + marked(1) diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/marked.min.js b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/marked.min.js new file mode 100644 index 0000000..544d06c --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/marked.min.js @@ -0,0 +1,6 @@ +/** + * marked - a markdown parser + * Copyright (c) 2011-2022, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).marked={})}(this,function(r){"use strict";function i(e,t){for(var u=0;ue.length)&&(t=e.length);for(var u=0,n=new Array(t);u=e.length?{done:!0}:{done:!1,value:e[u++]}};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function e(){return{async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}r.defaults=e();function u(e){return t[e]}var n=/[&<>"']/,l=/[&<>"']/g,a=/[<>"']|&(?!#?\w+;)/,o=/[<>"']|&(?!#?\w+;)/g,t={"&":"&","<":"<",">":">",'"':""","'":"'"};function D(e,t){if(t){if(n.test(e))return e.replace(l,u)}else if(a.test(e))return e.replace(o,u);return e}var c=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function x(e){return e.replace(c,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}var h=/(^|[^\[])\^/g;function p(u,e){u="string"==typeof u?u:u.source,e=e||"";var n={replace:function(e,t){return t=(t=t.source||t).replace(h,"$1"),u=u.replace(e,t),n},getRegex:function(){return new RegExp(u,e)}};return n}var f=/[^\w:]/g,Z=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function g(e,t,u){if(e){try{n=decodeURIComponent(x(u)).replace(f,"").toLowerCase()}catch(e){return null}if(0===n.indexOf("javascript:")||0===n.indexOf("vbscript:")||0===n.indexOf("data:"))return null}var n;t&&!Z.test(u)&&(e=u,F[" "+(n=t)]||(O.test(n)?F[" "+n]=n+"/":F[" "+n]=k(n,"/",!0)),t=-1===(n=F[" "+n]).indexOf(":"),u="//"===e.substring(0,2)?t?e:n.replace(q,"$1")+e:"/"===e.charAt(0)?t?e:n.replace(L,"$1")+e:n+e);try{u=encodeURI(u).replace(/%25/g,"%")}catch(e){return null}return u}var F={},O=/^[^:]+:\/*[^/]*$/,q=/^([^:]+:)[\s\S]*$/,L=/^([^:]+:\/*[^/]*)[\s\S]*$/;var A={exec:function(){}};function d(e){for(var t,u,n=1;nt)u.splice(t);else for(;u.length>=1,e+=e;return u+e}function b(e,t,u,n){var r=t.href,t=t.title?D(t.title):null,i=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?(n.state.inLink=!0,e={type:"link",raw:u,href:r,title:t,text:i,tokens:n.inlineTokens(i)},n.state.inLink=!1,e):{type:"image",raw:u,href:r,title:t,text:D(i)}}var w=function(){function e(e){this.options=e||r.defaults}var t=e.prototype;return t.space=function(e){e=this.rules.block.newline.exec(e);if(e&&0=r.length?e.slice(r.length):e}).join("\n")),{type:"code",raw:t,lang:e[2]&&e[2].trim(),text:u}},t.heading=function(e){var t,u,e=this.rules.block.heading.exec(e);if(e)return t=e[2].trim(),/#$/.test(t)&&(u=k(t,"#"),!this.options.pedantic&&u&&!/ $/.test(u)||(t=u.trim())),{type:"heading",raw:e[0],depth:e[1].length,text:t,tokens:this.lexer.inline(t)}},t.hr=function(e){e=this.rules.block.hr.exec(e);if(e)return{type:"hr",raw:e[0]}},t.blockquote=function(e){var t,e=this.rules.block.blockquote.exec(e);if(e)return t=e[0].replace(/^ *>[ \t]?/gm,""),{type:"blockquote",raw:e[0],tokens:this.lexer.blockTokens(t,[]),text:t}},t.list=function(e){var t=this.rules.block.list.exec(e);if(t){var u,n,r,i,s,l,a,o,D,c,h,p=1<(g=t[1].trim()).length,f={type:"list",raw:"",ordered:p,start:p?+g.slice(0,-1):"",loose:!1,items:[]},g=p?"\\d{1,9}\\"+g.slice(-1):"\\"+g;this.options.pedantic&&(g=p?g:"[*+-]");for(var F=new RegExp("^( {0,3}"+g+")((?:[\t ][^\\n]*)?(?:\\n|$))");e&&(h=!1,t=F.exec(e))&&!this.rules.block.hr.test(e);){if(u=t[0],e=e.substring(u.length),a=t[2].split("\n",1)[0],o=e.split("\n",1)[0],this.options.pedantic?(i=2,c=a.trimLeft()):(i=t[2].search(/[^ ]/),c=a.slice(i=4=i||!a.trim())c+="\n"+a.slice(i);else{if(s)break;c+="\n"+a}s||a.trim()||(s=!0),u+=D+"\n",e=e.substring(D.length+1)}f.loose||(l?f.loose=!0:/\n *\n *$/.test(u)&&(l=!0)),this.options.gfm&&(n=/^\[[ xX]\] /.exec(c))&&(r="[ ] "!==n[0],c=c.replace(/^\[[ xX]\] +/,"")),f.items.push({type:"list_item",raw:u,task:!!n,checked:r,loose:!1,text:c}),f.raw+=u}f.items[f.items.length-1].raw=u.trimRight(),f.items[f.items.length-1].text=c.trimRight(),f.raw=f.raw.trimRight();for(var E=f.items.length,x=0;x/i.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):D(e[0]):e[0]}},t.link=function(e){e=this.rules.inline.link.exec(e);if(e){var t=e[2].trim();if(!this.options.pedantic&&/^$/.test(t))return;var u=k(t.slice(0,-1),"\\");if((t.length-u.length)%2==0)return}else{u=function(e,t){if(-1!==e.indexOf(t[1]))for(var u=e.length,n=0,r=0;r$/.test(t)?u.slice(1):u.slice(1,-1):u)&&u.replace(this.rules.inline._escapes,"$1"),title:r&&r.replace(this.rules.inline._escapes,"$1")},e[0],this.lexer)}},t.reflink=function(e,t){var u;if((u=this.rules.inline.reflink.exec(e))||(u=this.rules.inline.nolink.exec(e)))return(e=t[(e=(u[2]||u[1]).replace(/\s+/g," ")).toLowerCase()])&&e.href?b(u,e,u[0],this.lexer):{type:"text",raw:t=u[0].charAt(0),text:t}},t.emStrong=function(e,t,u){void 0===u&&(u="");var n=this.rules.inline.emStrong.lDelim.exec(e);if(n&&(!n[3]||!u.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var r=n[1]||n[2]||"";if(!r||""===u||this.rules.inline.punctuation.exec(u)){var i=n[0].length-1,s=i,l=0,a="*"===n[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(a.lastIndex=0,t=t.slice(-1*e.length+i);null!=(n=a.exec(t));){var o,D=n[1]||n[2]||n[3]||n[4]||n[5]||n[6];if(D)if(D=D.length,n[3]||n[4])s+=D;else if((n[5]||n[6])&&i%3&&!((i+D)%3))l+=D;else if(!(0<(s-=D)))return D=Math.min(D,D+s+l),Math.min(i,D)%2?(o=e.slice(1,i+n.index+D),{type:"em",raw:e.slice(0,i+n.index+D+1),text:o,tokens:this.lexer.inlineTokens(o)}):(o=e.slice(2,i+n.index+D-1),{type:"strong",raw:e.slice(0,i+n.index+D+1),text:o,tokens:this.lexer.inlineTokens(o)})}}}},t.codespan=function(e){var t,u,n,e=this.rules.inline.code.exec(e);if(e)return n=e[2].replace(/\n/g," "),t=/[^ ]/.test(n),u=/^ /.test(n)&&/ $/.test(n),n=D(n=t&&u?n.substring(1,n.length-1):n,!0),{type:"codespan",raw:e[0],text:n}},t.br=function(e){e=this.rules.inline.br.exec(e);if(e)return{type:"br",raw:e[0]}},t.del=function(e){e=this.rules.inline.del.exec(e);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}},t.autolink=function(e,t){var u,e=this.rules.inline.autolink.exec(e);if(e)return t="@"===e[2]?"mailto:"+(u=D(this.options.mangle?t(e[1]):e[1])):u=D(e[1]),{type:"link",raw:e[0],text:u,href:t,tokens:[{type:"text",raw:u,text:u}]}},t.url=function(e,t){var u,n,r,i;if(u=this.rules.inline.url.exec(e)){if("@"===u[2])r="mailto:"+(n=D(this.options.mangle?t(u[0]):u[0]));else{for(;i=u[0],u[0]=this.rules.inline._backpedal.exec(u[0])[0],i!==u[0];);n=D(u[0]),r="www."===u[1]?"http://"+n:n}return{type:"link",raw:u[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}},t.inlineText=function(e,t){e=this.rules.inline.text.exec(e);if(e)return t=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):D(e[0]):e[0]:D(this.options.smartypants?t(e[0]):e[0]),{type:"text",raw:e[0],text:t}},e}(),y={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:A,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\.|[^\[\]\\])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/},v=(y.def=p(y.def).replace("label",y._label).replace("title",y._title).getRegex(),y.bullet=/(?:[*+-]|\d{1,9}[.)])/,y.listItemStart=p(/^( *)(bull) */).replace("bull",y.bullet).getRegex(),y.list=p(y.list).replace(/bull/g,y.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+y.def.source+")").getRegex(),y._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",y._comment=/|$)/,y.html=p(y.html,"i").replace("comment",y._comment).replace("tag",y._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),y.paragraph=p(y._paragraph).replace("hr",y.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",y._tag).getRegex(),y.blockquote=p(y.blockquote).replace("paragraph",y.paragraph).getRegex(),y.normal=d({},y),y.gfm=d({},y.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),y.gfm.table=p(y.gfm.table).replace("hr",y.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",y._tag).getRegex(),y.gfm.paragraph=p(y._paragraph).replace("hr",y.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",y.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",y._tag).getRegex(),y.pedantic=d({},y.normal,{html:p("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",y._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:A,paragraph:p(y.normal._paragraph).replace("hr",y.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",y.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()}),{escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:A,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:A,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~",v.punctuation=p(v.punctuation).replace(/punctuation/g,v._punctuation).getRegex(),v.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,v.escapedEmSt=/\\\*|\\_/g,v._comment=p(y._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),v.emStrong.lDelim=p(v.emStrong.lDelim).replace(/punct/g,v._punctuation).getRegex(),v.emStrong.rDelimAst=p(v.emStrong.rDelimAst,"g").replace(/punct/g,v._punctuation).getRegex(),v.emStrong.rDelimUnd=p(v.emStrong.rDelimUnd,"g").replace(/punct/g,v._punctuation).getRegex(),v._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,v._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,v._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,v.autolink=p(v.autolink).replace("scheme",v._scheme).replace("email",v._email).getRegex(),v._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,v.tag=p(v.tag).replace("comment",v._comment).replace("attribute",v._attribute).getRegex(),v._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,v._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,v._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,v.link=p(v.link).replace("label",v._label).replace("href",v._href).replace("title",v._title).getRegex(),v.reflink=p(v.reflink).replace("label",v._label).replace("ref",y._label).getRegex(),v.nolink=p(v.nolink).replace("ref",y._label).getRegex(),v.reflinkSearch=p(v.reflinkSearch,"g").replace("reflink",v.reflink).replace("nolink",v.nolink).getRegex(),v.normal=d({},v),v.pedantic=d({},v.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:p(/^!?\[(label)\]\((.*?)\)/).replace("label",v._label).getRegex(),reflink:p(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",v._label).getRegex()}),v.gfm=d({},v.normal,{escape:p(v.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\'+(u?e:D(e,!0))+"\n":"
    "+(u?e:D(e,!0))+"
    \n"},t.blockquote=function(e){return"
    \n"+e+"
    \n"},t.html=function(e){return e},t.heading=function(e,t,u,n){return this.options.headerIds?"'+e+"\n":""+e+"\n"},t.hr=function(){return this.options.xhtml?"
    \n":"
    \n"},t.list=function(e,t,u){var n=t?"ol":"ul";return"<"+n+(t&&1!==u?' start="'+u+'"':"")+">\n"+e+"\n"},t.listitem=function(e){return"
  • "+e+"
  • \n"},t.checkbox=function(e){return" "},t.paragraph=function(e){return"

    "+e+"

    \n"},t.table=function(e,t){return"\n\n"+e+"\n"+(t=t&&""+t+"")+"
    \n"},t.tablerow=function(e){return"\n"+e+"\n"},t.tablecell=function(e,t){var u=t.header?"th":"td";return(t.align?"<"+u+' align="'+t.align+'">':"<"+u+">")+e+"\n"},t.strong=function(e){return""+e+""},t.em=function(e){return""+e+""},t.codespan=function(e){return""+e+""},t.br=function(){return this.options.xhtml?"
    ":"
    "},t.del=function(e){return""+e+""},t.link=function(e,t,u){return null===(e=g(this.options.sanitize,this.options.baseUrl,e))?u:(e='
    "+u+"")},t.image=function(e,t,u){return null===(e=g(this.options.sanitize,this.options.baseUrl,e))?u:(e=''+u+'":">"))},t.text=function(e){return e},e}(),S=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,u){return""+u},t.image=function(e,t,u){return""+u},t.br=function(){return""},e}(),T=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},t.getNextSafeSlug=function(e,t){var u=e,n=0;if(this.seen.hasOwnProperty(u))for(n=this.seen[e];u=e+"-"+ ++n,this.seen.hasOwnProperty(u););return t||(this.seen[e]=n,this.seen[u]=0),u},t.slug=function(e,t){void 0===t&&(t={});e=this.serialize(e);return this.getNextSafeSlug(e,t.dryrun)},e}(),R=function(){function u(e){this.options=e||r.defaults,this.options.renderer=this.options.renderer||new $,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new S,this.slugger=new T}u.parse=function(e,t){return new u(t).parse(e)},u.parseInline=function(e,t){return new u(t).parseInline(e)};var e=u.prototype;return e.parse=function(e,t){void 0===t&&(t=!0);for(var u,n,r,i,s,l,a,o,D,c,h,p,f,g,F,A,d="",C=e.length,k=0;kAn error occurred:

    "+D(e.message+"",!0)+"
    ";throw e}try{var a=z.lex(e,u);if(u.walkTokens){if(u.async)return Promise.all(I.walkTokens(a,u.walkTokens)).then(function(){return R.parse(a,u)}).catch(t);I.walkTokens(a,u.walkTokens)}return R.parse(a,u)}catch(e){t(e)}}I.options=I.setOptions=function(e){return d(I.defaults,e),e=I.defaults,r.defaults=e,I},I.getDefaults=e,I.defaults=r.defaults,I.use=function(){for(var e=arguments.length,t=new Array(e),u=0;uAn error occurred:

    "+D(e.message+"",!0)+"
    ";throw e}},I.Parser=R,I.parser=R.parse,I.Renderer=$,I.TextRenderer=S,I.Lexer=z,I.lexer=z.lex,I.Tokenizer=w,I.Slugger=T;var A=(I.parse=I).options,P=I.setOptions,Q=I.use,U=I.walkTokens,M=I.parseInline,N=I,X=R.parse,G=z.lex;r.Lexer=z,r.Parser=R,r.Renderer=$,r.Slugger=T,r.TextRenderer=S,r.Tokenizer=w,r.getDefaults=e,r.lexer=G,r.marked=I,r.options=A,r.parse=N,r.parseInline=M,r.parser=X,r.setOptions=P,r.use=Q,r.walkTokens=U,Object.defineProperty(r,"__esModule",{value:!0})}); \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/node_modules/.bin/marked b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/node_modules/.bin/marked new file mode 100755 index 0000000..14c5624 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/node_modules/.bin/marked @@ -0,0 +1,17 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -z "$NODE_PATH" ]; then + export NODE_PATH="/run/media/oatmealine/8014a2d1-7458-4ad8-a9bc-fa018042a411/games/MultiMC/instances/Fire Pit 1.19.2/.minecraft/packwiz/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/node_modules" +else + export NODE_PATH="$NODE_PATH:/run/media/oatmealine/8014a2d1-7458-4ad8-a9bc-fa018042a411/games/MultiMC/instances/Fire Pit 1.19.2/.minecraft/packwiz/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/node_modules" +fi +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../../bin/marked.js" "$@" +else + exec node "$basedir/../../bin/marked.js" "$@" +fi diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/package.json b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/package.json new file mode 100644 index 0000000..303316b --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/package.json @@ -0,0 +1,97 @@ +{ + "name": "marked", + "description": "A markdown parser built for speed", + "author": "Christopher Jeffrey", + "version": "4.1.0", + "type": "module", + "main": "./lib/marked.cjs", + "module": "./lib/marked.esm.js", + "browser": "./lib/marked.umd.js", + "bin": { + "marked": "bin/marked.js" + }, + "man": "./man/marked.1", + "files": [ + "bin/", + "lib/", + "src/", + "man/", + "marked.min.js" + ], + "exports": { + ".": { + "import": "./lib/marked.esm.js", + "default": "./lib/marked.cjs" + }, + "./package.json": "./package.json" + }, + "repository": "git://github.com/markedjs/marked.git", + "homepage": "https://marked.js.org", + "bugs": { + "url": "http://github.com/markedjs/marked/issues" + }, + "license": "MIT", + "keywords": [ + "markdown", + "markup", + "html" + ], + "tags": [ + "markdown", + "markup", + "html" + ], + "devDependencies": { + "@babel/core": "^7.18.13", + "@babel/preset-env": "^7.18.10", + "@markedjs/html-differ": "^4.0.2", + "@rollup/plugin-babel": "^5.3.1", + "@rollup/plugin-commonjs": "^22.0.2", + "@semantic-release/commit-analyzer": "^9.0.2", + "@semantic-release/git": "^10.0.1", + "@semantic-release/github": "^8.0.6", + "@semantic-release/npm": "^9.0.1", + "@semantic-release/release-notes-generator": "^10.0.3", + "cheerio": "^1.0.0-rc.12", + "commonmark": "0.30.0", + "eslint": "^8.23.0", + "eslint-config-standard": "^17.0.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-n": "^15.2.5", + "eslint-plugin-promise": "^6.0.1", + "front-matter": "^4.0.2", + "highlight.js": "^11.6.0", + "jasmine": "^4.3.0", + "markdown-it": "13.0.1", + "node-fetch": "^3.2.10", + "rollup": "^2.78.1", + "rollup-plugin-license": "^2.8.1", + "semantic-release": "^19.0.5", + "titleize": "^3.0.0", + "uglify-js": "^3.17.0", + "vuln-regex-detector": "^1.3.0" + }, + "scripts": { + "test": "jasmine --config=jasmine.json", + "test:all": "npm test && npm run test:lint", + "test:unit": "npm test -- test/unit/**/*-spec.js", + "test:specs": "npm test -- test/specs/**/*-spec.js", + "test:lint": "eslint .", + "test:redos": "node test/vuln-regex.js", + "test:update": "node test/update-specs.js", + "rules": "node test/rules.js", + "bench": "npm run rollup && node test/bench.js", + "lint": "eslint --fix .", + "build:reset": "git checkout upstream/master lib/marked.cjs lib/marked.umd.js lib/marked.esm.js marked.min.js", + "build": "npm run rollup && npm run minify", + "build:docs": "node build-docs.js", + "rollup": "npm run rollup:umd && npm run rollup:esm", + "rollup:umd": "rollup -c rollup.config.js", + "rollup:esm": "rollup -c rollup.config.esm.js", + "minify": "uglifyjs lib/marked.umd.js -cm --comments /Copyright/ -o marked.min.js", + "preversion": "npm run build && (git diff --quiet || git commit -am build)" + }, + "engines": { + "node": ">= 12" + } +} diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Lexer.js b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Lexer.js new file mode 100644 index 0000000..c4bbf41 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Lexer.js @@ -0,0 +1,502 @@ +import { Tokenizer } from './Tokenizer.js'; +import { defaults } from './defaults.js'; +import { block, inline } from './rules.js'; +import { repeatString } from './helpers.js'; + +/** + * smartypants text replacement + * @param {string} text + */ +function smartypants(text) { + return text + // em-dashes + .replace(/---/g, '\u2014') + // en-dashes + .replace(/--/g, '\u2013') + // opening singles + .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') + // closing singles & apostrophes + .replace(/'/g, '\u2019') + // opening doubles + .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') + // closing doubles + .replace(/"/g, '\u201d') + // ellipses + .replace(/\.{3}/g, '\u2026'); +} + +/** + * mangle email addresses + * @param {string} text + */ +function mangle(text) { + let out = '', + i, + ch; + + const l = text.length; + for (i = 0; i < l; i++) { + ch = text.charCodeAt(i); + if (Math.random() > 0.5) { + ch = 'x' + ch.toString(16); + } + out += '&#' + ch + ';'; + } + + return out; +} + +/** + * Block Lexer + */ +export class Lexer { + constructor(options) { + this.tokens = []; + this.tokens.links = Object.create(null); + this.options = options || defaults; + this.options.tokenizer = this.options.tokenizer || new Tokenizer(); + this.tokenizer = this.options.tokenizer; + this.tokenizer.options = this.options; + this.tokenizer.lexer = this; + this.inlineQueue = []; + this.state = { + inLink: false, + inRawBlock: false, + top: true + }; + + const rules = { + block: block.normal, + inline: inline.normal + }; + + if (this.options.pedantic) { + rules.block = block.pedantic; + rules.inline = inline.pedantic; + } else if (this.options.gfm) { + rules.block = block.gfm; + if (this.options.breaks) { + rules.inline = inline.breaks; + } else { + rules.inline = inline.gfm; + } + } + this.tokenizer.rules = rules; + } + + /** + * Expose Rules + */ + static get rules() { + return { + block, + inline + }; + } + + /** + * Static Lex Method + */ + static lex(src, options) { + const lexer = new Lexer(options); + return lexer.lex(src); + } + + /** + * Static Lex Inline Method + */ + static lexInline(src, options) { + const lexer = new Lexer(options); + return lexer.inlineTokens(src); + } + + /** + * Preprocessing + */ + lex(src) { + src = src + .replace(/\r\n|\r/g, '\n'); + + this.blockTokens(src, this.tokens); + + let next; + while (next = this.inlineQueue.shift()) { + this.inlineTokens(next.src, next.tokens); + } + + return this.tokens; + } + + /** + * Lexing + */ + blockTokens(src, tokens = []) { + if (this.options.pedantic) { + src = src.replace(/\t/g, ' ').replace(/^ +$/gm, ''); + } else { + src = src.replace(/^( *)(\t+)/gm, (_, leading, tabs) => { + return leading + ' '.repeat(tabs.length); + }); + } + + let token, lastToken, cutSrc, lastParagraphClipped; + + while (src) { + if (this.options.extensions + && this.options.extensions.block + && this.options.extensions.block.some((extTokenizer) => { + if (token = extTokenizer.call({ lexer: this }, src, tokens)) { + src = src.substring(token.raw.length); + tokens.push(token); + return true; + } + return false; + })) { + continue; + } + + // newline + if (token = this.tokenizer.space(src)) { + src = src.substring(token.raw.length); + if (token.raw.length === 1 && tokens.length > 0) { + // if there's a single \n as a spacer, it's terminating the last line, + // so move it there so that we don't get unecessary paragraph tags + tokens[tokens.length - 1].raw += '\n'; + } else { + tokens.push(token); + } + continue; + } + + // code + if (token = this.tokenizer.code(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + // An indented code block cannot interrupt a paragraph. + if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.text; + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else { + tokens.push(token); + } + continue; + } + + // fences + if (token = this.tokenizer.fences(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // heading + if (token = this.tokenizer.heading(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // hr + if (token = this.tokenizer.hr(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // blockquote + if (token = this.tokenizer.blockquote(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // list + if (token = this.tokenizer.list(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // html + if (token = this.tokenizer.html(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // def + if (token = this.tokenizer.def(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.raw; + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else if (!this.tokens.links[token.tag]) { + this.tokens.links[token.tag] = { + href: token.href, + title: token.title + }; + } + continue; + } + + // table (gfm) + if (token = this.tokenizer.table(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // lheading + if (token = this.tokenizer.lheading(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // top-level paragraph + // prevent paragraph consuming extensions by clipping 'src' to extension start + cutSrc = src; + if (this.options.extensions && this.options.extensions.startBlock) { + let startIndex = Infinity; + const tempSrc = src.slice(1); + let tempStart; + this.options.extensions.startBlock.forEach(function(getStartIndex) { + tempStart = getStartIndex.call({ lexer: this }, tempSrc); + if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); } + }); + if (startIndex < Infinity && startIndex >= 0) { + cutSrc = src.substring(0, startIndex + 1); + } + } + if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) { + lastToken = tokens[tokens.length - 1]; + if (lastParagraphClipped && lastToken.type === 'paragraph') { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.text; + this.inlineQueue.pop(); + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else { + tokens.push(token); + } + lastParagraphClipped = (cutSrc.length !== src.length); + src = src.substring(token.raw.length); + continue; + } + + // text + if (token = this.tokenizer.text(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + if (lastToken && lastToken.type === 'text') { + lastToken.raw += '\n' + token.raw; + lastToken.text += '\n' + token.text; + this.inlineQueue.pop(); + this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; + } else { + tokens.push(token); + } + continue; + } + + if (src) { + const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0); + if (this.options.silent) { + console.error(errMsg); + break; + } else { + throw new Error(errMsg); + } + } + } + + this.state.top = true; + return tokens; + } + + inline(src, tokens = []) { + this.inlineQueue.push({ src, tokens }); + return tokens; + } + + /** + * Lexing/Compiling + */ + inlineTokens(src, tokens = []) { + let token, lastToken, cutSrc; + + // String with links masked to avoid interference with em and strong + let maskedSrc = src; + let match; + let keepPrevChar, prevChar; + + // Mask out reflinks + if (this.tokens.links) { + const links = Object.keys(this.tokens.links); + if (links.length > 0) { + while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) { + if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) { + maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex); + } + } + } + } + // Mask out other blocks + while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) { + maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex); + } + + // Mask out escaped em & strong delimiters + while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) { + maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex); + } + + while (src) { + if (!keepPrevChar) { + prevChar = ''; + } + keepPrevChar = false; + + // extensions + if (this.options.extensions + && this.options.extensions.inline + && this.options.extensions.inline.some((extTokenizer) => { + if (token = extTokenizer.call({ lexer: this }, src, tokens)) { + src = src.substring(token.raw.length); + tokens.push(token); + return true; + } + return false; + })) { + continue; + } + + // escape + if (token = this.tokenizer.escape(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // tag + if (token = this.tokenizer.tag(src)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + if (lastToken && token.type === 'text' && lastToken.type === 'text') { + lastToken.raw += token.raw; + lastToken.text += token.text; + } else { + tokens.push(token); + } + continue; + } + + // link + if (token = this.tokenizer.link(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // reflink, nolink + if (token = this.tokenizer.reflink(src, this.tokens.links)) { + src = src.substring(token.raw.length); + lastToken = tokens[tokens.length - 1]; + if (lastToken && token.type === 'text' && lastToken.type === 'text') { + lastToken.raw += token.raw; + lastToken.text += token.text; + } else { + tokens.push(token); + } + continue; + } + + // em & strong + if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // code + if (token = this.tokenizer.codespan(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // br + if (token = this.tokenizer.br(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // del (gfm) + if (token = this.tokenizer.del(src)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // autolink + if (token = this.tokenizer.autolink(src, mangle)) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // url (gfm) + if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) { + src = src.substring(token.raw.length); + tokens.push(token); + continue; + } + + // text + // prevent inlineText consuming extensions by clipping 'src' to extension start + cutSrc = src; + if (this.options.extensions && this.options.extensions.startInline) { + let startIndex = Infinity; + const tempSrc = src.slice(1); + let tempStart; + this.options.extensions.startInline.forEach(function(getStartIndex) { + tempStart = getStartIndex.call({ lexer: this }, tempSrc); + if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); } + }); + if (startIndex < Infinity && startIndex >= 0) { + cutSrc = src.substring(0, startIndex + 1); + } + } + if (token = this.tokenizer.inlineText(cutSrc, smartypants)) { + src = src.substring(token.raw.length); + if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started + prevChar = token.raw.slice(-1); + } + keepPrevChar = true; + lastToken = tokens[tokens.length - 1]; + if (lastToken && lastToken.type === 'text') { + lastToken.raw += token.raw; + lastToken.text += token.text; + } else { + tokens.push(token); + } + continue; + } + + if (src) { + const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0); + if (this.options.silent) { + console.error(errMsg); + break; + } else { + throw new Error(errMsg); + } + } + } + + return tokens; + } +} diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Parser.js b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Parser.js new file mode 100644 index 0000000..a22a2bc --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Parser.js @@ -0,0 +1,286 @@ +import { Renderer } from './Renderer.js'; +import { TextRenderer } from './TextRenderer.js'; +import { Slugger } from './Slugger.js'; +import { defaults } from './defaults.js'; +import { + unescape +} from './helpers.js'; + +/** + * Parsing & Compiling + */ +export class Parser { + constructor(options) { + this.options = options || defaults; + this.options.renderer = this.options.renderer || new Renderer(); + this.renderer = this.options.renderer; + this.renderer.options = this.options; + this.textRenderer = new TextRenderer(); + this.slugger = new Slugger(); + } + + /** + * Static Parse Method + */ + static parse(tokens, options) { + const parser = new Parser(options); + return parser.parse(tokens); + } + + /** + * Static Parse Inline Method + */ + static parseInline(tokens, options) { + const parser = new Parser(options); + return parser.parseInline(tokens); + } + + /** + * Parse Loop + */ + parse(tokens, top = true) { + let out = '', + i, + j, + k, + l2, + l3, + row, + cell, + header, + body, + token, + ordered, + start, + loose, + itemBody, + item, + checked, + task, + checkbox, + ret; + + const l = tokens.length; + for (i = 0; i < l; i++) { + token = tokens[i]; + + // Run any renderer extensions + if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) { + ret = this.options.extensions.renderers[token.type].call({ parser: this }, token); + if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) { + out += ret || ''; + continue; + } + } + + switch (token.type) { + case 'space': { + continue; + } + case 'hr': { + out += this.renderer.hr(); + continue; + } + case 'heading': { + out += this.renderer.heading( + this.parseInline(token.tokens), + token.depth, + unescape(this.parseInline(token.tokens, this.textRenderer)), + this.slugger); + continue; + } + case 'code': { + out += this.renderer.code(token.text, + token.lang, + token.escaped); + continue; + } + case 'table': { + header = ''; + + // header + cell = ''; + l2 = token.header.length; + for (j = 0; j < l2; j++) { + cell += this.renderer.tablecell( + this.parseInline(token.header[j].tokens), + { header: true, align: token.align[j] } + ); + } + header += this.renderer.tablerow(cell); + + body = ''; + l2 = token.rows.length; + for (j = 0; j < l2; j++) { + row = token.rows[j]; + + cell = ''; + l3 = row.length; + for (k = 0; k < l3; k++) { + cell += this.renderer.tablecell( + this.parseInline(row[k].tokens), + { header: false, align: token.align[k] } + ); + } + + body += this.renderer.tablerow(cell); + } + out += this.renderer.table(header, body); + continue; + } + case 'blockquote': { + body = this.parse(token.tokens); + out += this.renderer.blockquote(body); + continue; + } + case 'list': { + ordered = token.ordered; + start = token.start; + loose = token.loose; + l2 = token.items.length; + + body = ''; + for (j = 0; j < l2; j++) { + item = token.items[j]; + checked = item.checked; + task = item.task; + + itemBody = ''; + if (item.task) { + checkbox = this.renderer.checkbox(checked); + if (loose) { + if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') { + item.tokens[0].text = checkbox + ' ' + item.tokens[0].text; + if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') { + item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text; + } + } else { + item.tokens.unshift({ + type: 'text', + text: checkbox + }); + } + } else { + itemBody += checkbox; + } + } + + itemBody += this.parse(item.tokens, loose); + body += this.renderer.listitem(itemBody, task, checked); + } + + out += this.renderer.list(body, ordered, start); + continue; + } + case 'html': { + // TODO parse inline content if parameter markdown=1 + out += this.renderer.html(token.text); + continue; + } + case 'paragraph': { + out += this.renderer.paragraph(this.parseInline(token.tokens)); + continue; + } + case 'text': { + body = token.tokens ? this.parseInline(token.tokens) : token.text; + while (i + 1 < l && tokens[i + 1].type === 'text') { + token = tokens[++i]; + body += '\n' + (token.tokens ? this.parseInline(token.tokens) : token.text); + } + out += top ? this.renderer.paragraph(body) : body; + continue; + } + + default: { + const errMsg = 'Token with "' + token.type + '" type was not found.'; + if (this.options.silent) { + console.error(errMsg); + return; + } else { + throw new Error(errMsg); + } + } + } + } + + return out; + } + + /** + * Parse Inline Tokens + */ + parseInline(tokens, renderer) { + renderer = renderer || this.renderer; + let out = '', + i, + token, + ret; + + const l = tokens.length; + for (i = 0; i < l; i++) { + token = tokens[i]; + + // Run any renderer extensions + if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) { + ret = this.options.extensions.renderers[token.type].call({ parser: this }, token); + if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) { + out += ret || ''; + continue; + } + } + + switch (token.type) { + case 'escape': { + out += renderer.text(token.text); + break; + } + case 'html': { + out += renderer.html(token.text); + break; + } + case 'link': { + out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer)); + break; + } + case 'image': { + out += renderer.image(token.href, token.title, token.text); + break; + } + case 'strong': { + out += renderer.strong(this.parseInline(token.tokens, renderer)); + break; + } + case 'em': { + out += renderer.em(this.parseInline(token.tokens, renderer)); + break; + } + case 'codespan': { + out += renderer.codespan(token.text); + break; + } + case 'br': { + out += renderer.br(); + break; + } + case 'del': { + out += renderer.del(this.parseInline(token.tokens, renderer)); + break; + } + case 'text': { + out += renderer.text(token.text); + break; + } + default: { + const errMsg = 'Token with "' + token.type + '" type was not found.'; + if (this.options.silent) { + console.error(errMsg); + return; + } else { + throw new Error(errMsg); + } + } + } + } + return out; + } +} diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Renderer.js b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Renderer.js new file mode 100644 index 0000000..7c36a75 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Renderer.js @@ -0,0 +1,203 @@ +import { defaults } from './defaults.js'; +import { + cleanUrl, + escape +} from './helpers.js'; + +/** + * Renderer + */ +export class Renderer { + constructor(options) { + this.options = options || defaults; + } + + code(code, infostring, escaped) { + const lang = (infostring || '').match(/\S*/)[0]; + if (this.options.highlight) { + const out = this.options.highlight(code, lang); + if (out != null && out !== code) { + escaped = true; + code = out; + } + } + + code = code.replace(/\n$/, '') + '\n'; + + if (!lang) { + return '
    '
    +        + (escaped ? code : escape(code, true))
    +        + '
    \n'; + } + + return '
    '
    +      + (escaped ? code : escape(code, true))
    +      + '
    \n'; + } + + /** + * @param {string} quote + */ + blockquote(quote) { + return `
    \n${quote}
    \n`; + } + + html(html) { + return html; + } + + /** + * @param {string} text + * @param {string} level + * @param {string} raw + * @param {any} slugger + */ + heading(text, level, raw, slugger) { + if (this.options.headerIds) { + const id = this.options.headerPrefix + slugger.slug(raw); + return `${text}\n`; + } + + // ignore IDs + return `${text}\n`; + } + + hr() { + return this.options.xhtml ? '
    \n' : '
    \n'; + } + + list(body, ordered, start) { + const type = ordered ? 'ol' : 'ul', + startatt = (ordered && start !== 1) ? (' start="' + start + '"') : ''; + return '<' + type + startatt + '>\n' + body + '\n'; + } + + /** + * @param {string} text + */ + listitem(text) { + return `
  • ${text}
  • \n`; + } + + checkbox(checked) { + return ' '; + } + + /** + * @param {string} text + */ + paragraph(text) { + return `

    ${text}

    \n`; + } + + /** + * @param {string} header + * @param {string} body + */ + table(header, body) { + if (body) body = `${body}`; + + return '\n' + + '\n' + + header + + '\n' + + body + + '
    \n'; + } + + /** + * @param {string} content + */ + tablerow(content) { + return `\n${content}\n`; + } + + tablecell(content, flags) { + const type = flags.header ? 'th' : 'td'; + const tag = flags.align + ? `<${type} align="${flags.align}">` + : `<${type}>`; + return tag + content + `\n`; + } + + /** + * span level renderer + * @param {string} text + */ + strong(text) { + return `${text}`; + } + + /** + * @param {string} text + */ + em(text) { + return `${text}`; + } + + /** + * @param {string} text + */ + codespan(text) { + return `${text}`; + } + + br() { + return this.options.xhtml ? '
    ' : '
    '; + } + + /** + * @param {string} text + */ + del(text) { + return `${text}`; + } + + /** + * @param {string} href + * @param {string} title + * @param {string} text + */ + link(href, title, text) { + href = cleanUrl(this.options.sanitize, this.options.baseUrl, href); + if (href === null) { + return text; + } + let out = ''; + return out; + } + + /** + * @param {string} href + * @param {string} title + * @param {string} text + */ + image(href, title, text) { + href = cleanUrl(this.options.sanitize, this.options.baseUrl, href); + if (href === null) { + return text; + } + + let out = `${text}' : '>'; + return out; + } + + text(text) { + return text; + } +} diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Slugger.js b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Slugger.js new file mode 100644 index 0000000..a0b68f5 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Slugger.js @@ -0,0 +1,55 @@ +/** + * Slugger generates header id + */ +export class Slugger { + constructor() { + this.seen = {}; + } + + /** + * @param {string} value + */ + serialize(value) { + return value + .toLowerCase() + .trim() + // remove html tags + .replace(/<[!\/a-z].*?>/ig, '') + // remove unwanted chars + .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '') + .replace(/\s/g, '-'); + } + + /** + * Finds the next safe (unique) slug to use + * @param {string} originalSlug + * @param {boolean} isDryRun + */ + getNextSafeSlug(originalSlug, isDryRun) { + let slug = originalSlug; + let occurenceAccumulator = 0; + if (this.seen.hasOwnProperty(slug)) { + occurenceAccumulator = this.seen[originalSlug]; + do { + occurenceAccumulator++; + slug = originalSlug + '-' + occurenceAccumulator; + } while (this.seen.hasOwnProperty(slug)); + } + if (!isDryRun) { + this.seen[originalSlug] = occurenceAccumulator; + this.seen[slug] = 0; + } + return slug; + } + + /** + * Convert string to unique id + * @param {object} [options] + * @param {boolean} [options.dryrun] Generates the next unique slug without + * updating the internal accumulator. + */ + slug(value, options = {}) { + const slug = this.serialize(value); + return this.getNextSafeSlug(slug, options.dryrun); + } +} diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/TextRenderer.js b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/TextRenderer.js new file mode 100644 index 0000000..4d6e08f --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/TextRenderer.js @@ -0,0 +1,42 @@ +/** + * TextRenderer + * returns only the textual part of the token + */ +export class TextRenderer { + // no need for block level renderers + strong(text) { + return text; + } + + em(text) { + return text; + } + + codespan(text) { + return text; + } + + del(text) { + return text; + } + + html(text) { + return text; + } + + text(text) { + return text; + } + + link(href, title, text) { + return '' + text; + } + + image(href, title, text) { + return '' + text; + } + + br() { + return ''; + } +} diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Tokenizer.js b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Tokenizer.js new file mode 100644 index 0000000..76f26e6 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/Tokenizer.js @@ -0,0 +1,776 @@ +import { defaults } from './defaults.js'; +import { + rtrim, + splitCells, + escape, + findClosingBracket +} from './helpers.js'; + +function outputLink(cap, link, raw, lexer) { + const href = link.href; + const title = link.title ? escape(link.title) : null; + const text = cap[1].replace(/\\([\[\]])/g, '$1'); + + if (cap[0].charAt(0) !== '!') { + lexer.state.inLink = true; + const token = { + type: 'link', + raw, + href, + title, + text, + tokens: lexer.inlineTokens(text) + }; + lexer.state.inLink = false; + return token; + } + return { + type: 'image', + raw, + href, + title, + text: escape(text) + }; +} + +function indentCodeCompensation(raw, text) { + const matchIndentToCode = raw.match(/^(\s+)(?:```)/); + + if (matchIndentToCode === null) { + return text; + } + + const indentToCode = matchIndentToCode[1]; + + return text + .split('\n') + .map(node => { + const matchIndentInNode = node.match(/^\s+/); + if (matchIndentInNode === null) { + return node; + } + + const [indentInNode] = matchIndentInNode; + + if (indentInNode.length >= indentToCode.length) { + return node.slice(indentToCode.length); + } + + return node; + }) + .join('\n'); +} + +/** + * Tokenizer + */ +export class Tokenizer { + constructor(options) { + this.options = options || defaults; + } + + space(src) { + const cap = this.rules.block.newline.exec(src); + if (cap && cap[0].length > 0) { + return { + type: 'space', + raw: cap[0] + }; + } + } + + code(src) { + const cap = this.rules.block.code.exec(src); + if (cap) { + const text = cap[0].replace(/^ {1,4}/gm, ''); + return { + type: 'code', + raw: cap[0], + codeBlockStyle: 'indented', + text: !this.options.pedantic + ? rtrim(text, '\n') + : text + }; + } + } + + fences(src) { + const cap = this.rules.block.fences.exec(src); + if (cap) { + const raw = cap[0]; + const text = indentCodeCompensation(raw, cap[3] || ''); + + return { + type: 'code', + raw, + lang: cap[2] ? cap[2].trim() : cap[2], + text + }; + } + } + + heading(src) { + const cap = this.rules.block.heading.exec(src); + if (cap) { + let text = cap[2].trim(); + + // remove trailing #s + if (/#$/.test(text)) { + const trimmed = rtrim(text, '#'); + if (this.options.pedantic) { + text = trimmed.trim(); + } else if (!trimmed || / $/.test(trimmed)) { + // CommonMark requires space before trailing #s + text = trimmed.trim(); + } + } + + return { + type: 'heading', + raw: cap[0], + depth: cap[1].length, + text, + tokens: this.lexer.inline(text) + }; + } + } + + hr(src) { + const cap = this.rules.block.hr.exec(src); + if (cap) { + return { + type: 'hr', + raw: cap[0] + }; + } + } + + blockquote(src) { + const cap = this.rules.block.blockquote.exec(src); + if (cap) { + const text = cap[0].replace(/^ *>[ \t]?/gm, ''); + + return { + type: 'blockquote', + raw: cap[0], + tokens: this.lexer.blockTokens(text, []), + text + }; + } + } + + list(src) { + let cap = this.rules.block.list.exec(src); + if (cap) { + let raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine, + line, nextLine, rawLine, itemContents, endEarly; + + let bull = cap[1].trim(); + const isordered = bull.length > 1; + + const list = { + type: 'list', + raw: '', + ordered: isordered, + start: isordered ? +bull.slice(0, -1) : '', + loose: false, + items: [] + }; + + bull = isordered ? `\\d{1,9}\\${bull.slice(-1)}` : `\\${bull}`; + + if (this.options.pedantic) { + bull = isordered ? bull : '[*+-]'; + } + + // Get next list item + const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\t ][^\\n]*)?(?:\\n|$))`); + + // Check if current bullet point can start a new List Item + while (src) { + endEarly = false; + if (!(cap = itemRegex.exec(src))) { + break; + } + + if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?) + break; + } + + raw = cap[0]; + src = src.substring(raw.length); + + line = cap[2].split('\n', 1)[0]; + nextLine = src.split('\n', 1)[0]; + + if (this.options.pedantic) { + indent = 2; + itemContents = line.trimLeft(); + } else { + indent = cap[2].search(/[^ ]/); // Find first non-space char + indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent + itemContents = line.slice(indent); + indent += cap[1].length; + } + + blankLine = false; + + if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line + raw += nextLine + '\n'; + src = src.substring(nextLine.length + 1); + endEarly = true; + } + + if (!endEarly) { + const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))`); + const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`); + const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\`\`\`|~~~)`); + const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`); + + // Check if following lines should be included in List Item + while (src) { + rawLine = src.split('\n', 1)[0]; + line = rawLine; + + // Re-align to follow commonmark nesting rules + if (this.options.pedantic) { + line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' '); + } + + // End list item if found code fences + if (fencesBeginRegex.test(line)) { + break; + } + + // End list item if found start of new heading + if (headingBeginRegex.test(line)) { + break; + } + + // End list item if found start of new bullet + if (nextBulletRegex.test(line)) { + break; + } + + // Horizontal rule found + if (hrRegex.test(src)) { + break; + } + + if (line.search(/[^ ]/) >= indent || !line.trim()) { // Dedent if possible + itemContents += '\n' + line.slice(indent); + } else if (!blankLine) { // Until blank line, item doesn't need indentation + itemContents += '\n' + line; + } else { // Otherwise, improper indentation ends this item + break; + } + + if (!blankLine && !line.trim()) { // Check if current line is blank + blankLine = true; + } + + raw += rawLine + '\n'; + src = src.substring(rawLine.length + 1); + } + } + + if (!list.loose) { + // If the previous item ended with a blank line, the list is loose + if (endsWithBlankLine) { + list.loose = true; + } else if (/\n *\n *$/.test(raw)) { + endsWithBlankLine = true; + } + } + + // Check for task list items + if (this.options.gfm) { + istask = /^\[[ xX]\] /.exec(itemContents); + if (istask) { + ischecked = istask[0] !== '[ ] '; + itemContents = itemContents.replace(/^\[[ xX]\] +/, ''); + } + } + + list.items.push({ + type: 'list_item', + raw, + task: !!istask, + checked: ischecked, + loose: false, + text: itemContents + }); + + list.raw += raw; + } + + // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic + list.items[list.items.length - 1].raw = raw.trimRight(); + list.items[list.items.length - 1].text = itemContents.trimRight(); + list.raw = list.raw.trimRight(); + + const l = list.items.length; + + // Item child tokens handled here at end because we needed to have the final item to trim it first + for (i = 0; i < l; i++) { + this.lexer.state.top = false; + list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []); + const spacers = list.items[i].tokens.filter(t => t.type === 'space'); + const hasMultipleLineBreaks = spacers.every(t => { + const chars = t.raw.split(''); + let lineBreaks = 0; + for (const char of chars) { + if (char === '\n') { + lineBreaks += 1; + } + if (lineBreaks > 1) { + return true; + } + } + + return false; + }); + + if (!list.loose && spacers.length && hasMultipleLineBreaks) { + // Having a single line break doesn't mean a list is loose. A single line break is terminating the last list item + list.loose = true; + list.items[i].loose = true; + } + } + + return list; + } + } + + html(src) { + const cap = this.rules.block.html.exec(src); + if (cap) { + const token = { + type: 'html', + raw: cap[0], + pre: !this.options.sanitizer + && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), + text: cap[0] + }; + if (this.options.sanitize) { + const text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]); + token.type = 'paragraph'; + token.text = text; + token.tokens = this.lexer.inline(text); + } + return token; + } + } + + def(src) { + const cap = this.rules.block.def.exec(src); + if (cap) { + if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1); + const tag = cap[1].toLowerCase().replace(/\s+/g, ' '); + return { + type: 'def', + tag, + raw: cap[0], + href: cap[2], + title: cap[3] + }; + } + } + + table(src) { + const cap = this.rules.block.table.exec(src); + if (cap) { + const item = { + type: 'table', + header: splitCells(cap[1]).map(c => { return { text: c }; }), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + rows: cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, '').split('\n') : [] + }; + + if (item.header.length === item.align.length) { + item.raw = cap[0]; + + let l = item.align.length; + let i, j, k, row; + for (i = 0; i < l; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + l = item.rows.length; + for (i = 0; i < l; i++) { + item.rows[i] = splitCells(item.rows[i], item.header.length).map(c => { return { text: c }; }); + } + + // parse child tokens inside headers and cells + + // header child tokens + l = item.header.length; + for (j = 0; j < l; j++) { + item.header[j].tokens = this.lexer.inline(item.header[j].text); + } + + // cell child tokens + l = item.rows.length; + for (j = 0; j < l; j++) { + row = item.rows[j]; + for (k = 0; k < row.length; k++) { + row[k].tokens = this.lexer.inline(row[k].text); + } + } + + return item; + } + } + } + + lheading(src) { + const cap = this.rules.block.lheading.exec(src); + if (cap) { + return { + type: 'heading', + raw: cap[0], + depth: cap[2].charAt(0) === '=' ? 1 : 2, + text: cap[1], + tokens: this.lexer.inline(cap[1]) + }; + } + } + + paragraph(src) { + const cap = this.rules.block.paragraph.exec(src); + if (cap) { + const text = cap[1].charAt(cap[1].length - 1) === '\n' + ? cap[1].slice(0, -1) + : cap[1]; + return { + type: 'paragraph', + raw: cap[0], + text, + tokens: this.lexer.inline(text) + }; + } + } + + text(src) { + const cap = this.rules.block.text.exec(src); + if (cap) { + return { + type: 'text', + raw: cap[0], + text: cap[0], + tokens: this.lexer.inline(cap[0]) + }; + } + } + + escape(src) { + const cap = this.rules.inline.escape.exec(src); + if (cap) { + return { + type: 'escape', + raw: cap[0], + text: escape(cap[1]) + }; + } + } + + tag(src) { + const cap = this.rules.inline.tag.exec(src); + if (cap) { + if (!this.lexer.state.inLink && /^/i.test(cap[0])) { + this.lexer.state.inLink = false; + } + if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { + this.lexer.state.inRawBlock = true; + } else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { + this.lexer.state.inRawBlock = false; + } + + return { + type: this.options.sanitize + ? 'text' + : 'html', + raw: cap[0], + inLink: this.lexer.state.inLink, + inRawBlock: this.lexer.state.inRawBlock, + text: this.options.sanitize + ? (this.options.sanitizer + ? this.options.sanitizer(cap[0]) + : escape(cap[0])) + : cap[0] + }; + } + } + + link(src) { + const cap = this.rules.inline.link.exec(src); + if (cap) { + const trimmedUrl = cap[2].trim(); + if (!this.options.pedantic && /^$/.test(trimmedUrl))) { + return; + } + + // ending angle bracket cannot be escaped + const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\'); + if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) { + return; + } + } else { + // find closing parenthesis + const lastParenIndex = findClosingBracket(cap[2], '()'); + if (lastParenIndex > -1) { + const start = cap[0].indexOf('!') === 0 ? 5 : 4; + const linkLen = start + cap[1].length + lastParenIndex; + cap[2] = cap[2].substring(0, lastParenIndex); + cap[0] = cap[0].substring(0, linkLen).trim(); + cap[3] = ''; + } + } + let href = cap[2]; + let title = ''; + if (this.options.pedantic) { + // split pedantic href and title + const link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href); + + if (link) { + href = link[1]; + title = link[3]; + } + } else { + title = cap[3] ? cap[3].slice(1, -1) : ''; + } + + href = href.trim(); + if (/^$/.test(trimmedUrl))) { + // pedantic allows starting angle bracket without ending angle bracket + href = href.slice(1); + } else { + href = href.slice(1, -1); + } + } + return outputLink(cap, { + href: href ? href.replace(this.rules.inline._escapes, '$1') : href, + title: title ? title.replace(this.rules.inline._escapes, '$1') : title + }, cap[0], this.lexer); + } + } + + reflink(src, links) { + let cap; + if ((cap = this.rules.inline.reflink.exec(src)) + || (cap = this.rules.inline.nolink.exec(src))) { + let link = (cap[2] || cap[1]).replace(/\s+/g, ' '); + link = links[link.toLowerCase()]; + if (!link || !link.href) { + const text = cap[0].charAt(0); + return { + type: 'text', + raw: text, + text + }; + } + return outputLink(cap, link, cap[0], this.lexer); + } + } + + emStrong(src, maskedSrc, prevChar = '') { + let match = this.rules.inline.emStrong.lDelim.exec(src); + if (!match) return; + + // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well + if (match[3] && prevChar.match(/[\p{L}\p{N}]/u)) return; + + const nextChar = match[1] || match[2] || ''; + + if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) { + const lLength = match[0].length - 1; + let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0; + + const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd; + endReg.lastIndex = 0; + + // Clip maskedSrc to same section of string as src (move to lexer?) + maskedSrc = maskedSrc.slice(-1 * src.length + lLength); + + while ((match = endReg.exec(maskedSrc)) != null) { + rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6]; + + if (!rDelim) continue; // skip single * in __abc*abc__ + + rLength = rDelim.length; + + if (match[3] || match[4]) { // found another Left Delim + delimTotal += rLength; + continue; + } else if (match[5] || match[6]) { // either Left or Right Delim + if (lLength % 3 && !((lLength + rLength) % 3)) { + midDelimTotal += rLength; + continue; // CommonMark Emphasis Rules 9-10 + } + } + + delimTotal -= rLength; + + if (delimTotal > 0) continue; // Haven't found enough closing delimiters + + // Remove extra characters. *a*** -> *a* + rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal); + + // Create `em` if smallest delimiter has odd char count. *a*** + if (Math.min(lLength, rLength) % 2) { + const text = src.slice(1, lLength + match.index + rLength); + return { + type: 'em', + raw: src.slice(0, lLength + match.index + rLength + 1), + text, + tokens: this.lexer.inlineTokens(text) + }; + } + + // Create 'strong' if smallest delimiter has even char count. **a*** + const text = src.slice(2, lLength + match.index + rLength - 1); + return { + type: 'strong', + raw: src.slice(0, lLength + match.index + rLength + 1), + text, + tokens: this.lexer.inlineTokens(text) + }; + } + } + } + + codespan(src) { + const cap = this.rules.inline.code.exec(src); + if (cap) { + let text = cap[2].replace(/\n/g, ' '); + const hasNonSpaceChars = /[^ ]/.test(text); + const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text); + if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) { + text = text.substring(1, text.length - 1); + } + text = escape(text, true); + return { + type: 'codespan', + raw: cap[0], + text + }; + } + } + + br(src) { + const cap = this.rules.inline.br.exec(src); + if (cap) { + return { + type: 'br', + raw: cap[0] + }; + } + } + + del(src) { + const cap = this.rules.inline.del.exec(src); + if (cap) { + return { + type: 'del', + raw: cap[0], + text: cap[2], + tokens: this.lexer.inlineTokens(cap[2]) + }; + } + } + + autolink(src, mangle) { + const cap = this.rules.inline.autolink.exec(src); + if (cap) { + let text, href; + if (cap[2] === '@') { + text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]); + href = 'mailto:' + text; + } else { + text = escape(cap[1]); + href = text; + } + + return { + type: 'link', + raw: cap[0], + text, + href, + tokens: [ + { + type: 'text', + raw: text, + text + } + ] + }; + } + } + + url(src, mangle) { + let cap; + if (cap = this.rules.inline.url.exec(src)) { + let text, href; + if (cap[2] === '@') { + text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]); + href = 'mailto:' + text; + } else { + // do extended autolink path validation + let prevCapZero; + do { + prevCapZero = cap[0]; + cap[0] = this.rules.inline._backpedal.exec(cap[0])[0]; + } while (prevCapZero !== cap[0]); + text = escape(cap[0]); + if (cap[1] === 'www.') { + href = 'http://' + text; + } else { + href = text; + } + } + return { + type: 'link', + raw: cap[0], + text, + href, + tokens: [ + { + type: 'text', + raw: text, + text + } + ] + }; + } + } + + inlineText(src, smartypants) { + const cap = this.rules.inline.text.exec(src); + if (cap) { + let text; + if (this.lexer.state.inRawBlock) { + text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0]; + } else { + text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]); + } + return { + type: 'text', + raw: cap[0], + text + }; + } + } +} diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/defaults.js b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/defaults.js new file mode 100644 index 0000000..e295ad2 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/defaults.js @@ -0,0 +1,30 @@ +export function getDefaults() { + return { + async: false, + baseUrl: null, + breaks: false, + extensions: null, + gfm: true, + headerIds: true, + headerPrefix: '', + highlight: null, + langPrefix: 'language-', + mangle: true, + pedantic: false, + renderer: null, + sanitize: false, + sanitizer: null, + silent: false, + smartLists: false, + smartypants: false, + tokenizer: null, + walkTokens: null, + xhtml: false + }; +} + +export let defaults = getDefaults(); + +export function changeDefaults(newDefaults) { + defaults = newDefaults; +} diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/helpers.js b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/helpers.js new file mode 100644 index 0000000..600c95e --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/helpers.js @@ -0,0 +1,276 @@ +/** + * Helpers + */ +const escapeTest = /[&<>"']/; +const escapeReplace = /[&<>"']/g; +const escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/; +const escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g; +const escapeReplacements = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; +const getEscapeReplacement = (ch) => escapeReplacements[ch]; +export function escape(html, encode) { + if (encode) { + if (escapeTest.test(html)) { + return html.replace(escapeReplace, getEscapeReplacement); + } + } else { + if (escapeTestNoEncode.test(html)) { + return html.replace(escapeReplaceNoEncode, getEscapeReplacement); + } + } + + return html; +} + +const unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig; + +/** + * @param {string} html + */ +export function unescape(html) { + // explicitly match decimal, hex, and named HTML entities + return html.replace(unescapeTest, (_, n) => { + n = n.toLowerCase(); + if (n === 'colon') return ':'; + if (n.charAt(0) === '#') { + return n.charAt(1) === 'x' + ? String.fromCharCode(parseInt(n.substring(2), 16)) + : String.fromCharCode(+n.substring(1)); + } + return ''; + }); +} + +const caret = /(^|[^\[])\^/g; + +/** + * @param {string | RegExp} regex + * @param {string} opt + */ +export function edit(regex, opt) { + regex = typeof regex === 'string' ? regex : regex.source; + opt = opt || ''; + const obj = { + replace: (name, val) => { + val = val.source || val; + val = val.replace(caret, '$1'); + regex = regex.replace(name, val); + return obj; + }, + getRegex: () => { + return new RegExp(regex, opt); + } + }; + return obj; +} + +const nonWordAndColonTest = /[^\w:]/g; +const originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i; + +/** + * @param {boolean} sanitize + * @param {string} base + * @param {string} href + */ +export function cleanUrl(sanitize, base, href) { + if (sanitize) { + let prot; + try { + prot = decodeURIComponent(unescape(href)) + .replace(nonWordAndColonTest, '') + .toLowerCase(); + } catch (e) { + return null; + } + if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) { + return null; + } + } + if (base && !originIndependentUrl.test(href)) { + href = resolveUrl(base, href); + } + try { + href = encodeURI(href).replace(/%25/g, '%'); + } catch (e) { + return null; + } + return href; +} + +const baseUrls = {}; +const justDomain = /^[^:]+:\/*[^/]*$/; +const protocol = /^([^:]+:)[\s\S]*$/; +const domain = /^([^:]+:\/*[^/]*)[\s\S]*$/; + +/** + * @param {string} base + * @param {string} href + */ +export function resolveUrl(base, href) { + if (!baseUrls[' ' + base]) { + // we can ignore everything in base after the last slash of its path component, + // but we might need to add _that_ + // https://tools.ietf.org/html/rfc3986#section-3 + if (justDomain.test(base)) { + baseUrls[' ' + base] = base + '/'; + } else { + baseUrls[' ' + base] = rtrim(base, '/', true); + } + } + base = baseUrls[' ' + base]; + const relativeBase = base.indexOf(':') === -1; + + if (href.substring(0, 2) === '//') { + if (relativeBase) { + return href; + } + return base.replace(protocol, '$1') + href; + } else if (href.charAt(0) === '/') { + if (relativeBase) { + return href; + } + return base.replace(domain, '$1') + href; + } else { + return base + href; + } +} + +export const noopTest = { exec: function noopTest() {} }; + +export function merge(obj) { + let i = 1, + target, + key; + + for (; i < arguments.length; i++) { + target = arguments[i]; + for (key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + obj[key] = target[key]; + } + } + } + + return obj; +} + +export function splitCells(tableRow, count) { + // ensure that every cell-delimiting pipe has a space + // before it to distinguish it from an escaped pipe + const row = tableRow.replace(/\|/g, (match, offset, str) => { + let escaped = false, + curr = offset; + while (--curr >= 0 && str[curr] === '\\') escaped = !escaped; + if (escaped) { + // odd number of slashes means | is escaped + // so we leave it alone + return '|'; + } else { + // add space before unescaped | + return ' |'; + } + }), + cells = row.split(/ \|/); + let i = 0; + + // First/last cell in a row cannot be empty if it has no leading/trailing pipe + if (!cells[0].trim()) { cells.shift(); } + if (cells.length > 0 && !cells[cells.length - 1].trim()) { cells.pop(); } + + if (cells.length > count) { + cells.splice(count); + } else { + while (cells.length < count) cells.push(''); + } + + for (; i < cells.length; i++) { + // leading or trailing whitespace is ignored per the gfm spec + cells[i] = cells[i].trim().replace(/\\\|/g, '|'); + } + return cells; +} + +/** + * Remove trailing 'c's. Equivalent to str.replace(/c*$/, ''). + * /c*$/ is vulnerable to REDOS. + * + * @param {string} str + * @param {string} c + * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey. + */ +export function rtrim(str, c, invert) { + const l = str.length; + if (l === 0) { + return ''; + } + + // Length of suffix matching the invert condition. + let suffLen = 0; + + // Step left until we fail to match the invert condition. + while (suffLen < l) { + const currChar = str.charAt(l - suffLen - 1); + if (currChar === c && !invert) { + suffLen++; + } else if (currChar !== c && invert) { + suffLen++; + } else { + break; + } + } + + return str.slice(0, l - suffLen); +} + +export function findClosingBracket(str, b) { + if (str.indexOf(b[1]) === -1) { + return -1; + } + const l = str.length; + let level = 0, + i = 0; + for (; i < l; i++) { + if (str[i] === '\\') { + i++; + } else if (str[i] === b[0]) { + level++; + } else if (str[i] === b[1]) { + level--; + if (level < 0) { + return i; + } + } + } + return -1; +} + +export function checkSanitizeDeprecation(opt) { + if (opt && opt.sanitize && !opt.silent) { + console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options'); + } +} + +// copied from https://stackoverflow.com/a/5450113/806777 +/** + * @param {string} pattern + * @param {number} count + */ +export function repeatString(pattern, count) { + if (count < 1) { + return ''; + } + let result = ''; + while (count > 1) { + if (count & 1) { + result += pattern; + } + count >>= 1; + pattern += pattern; + } + return result + pattern; +} diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/marked.js b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/marked.js new file mode 100644 index 0000000..feb5003 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/marked.js @@ -0,0 +1,366 @@ +import { Lexer } from './Lexer.js'; +import { Parser } from './Parser.js'; +import { Tokenizer } from './Tokenizer.js'; +import { Renderer } from './Renderer.js'; +import { TextRenderer } from './TextRenderer.js'; +import { Slugger } from './Slugger.js'; +import { + merge, + checkSanitizeDeprecation, + escape +} from './helpers.js'; +import { + getDefaults, + changeDefaults, + defaults +} from './defaults.js'; + +/** + * Marked + */ +export function marked(src, opt, callback) { + // throw error in case of non string input + if (typeof src === 'undefined' || src === null) { + throw new Error('marked(): input parameter is undefined or null'); + } + if (typeof src !== 'string') { + throw new Error('marked(): input parameter is of type ' + + Object.prototype.toString.call(src) + ', string expected'); + } + + if (typeof opt === 'function') { + callback = opt; + opt = null; + } + + opt = merge({}, marked.defaults, opt || {}); + checkSanitizeDeprecation(opt); + + if (callback) { + const highlight = opt.highlight; + let tokens; + + try { + tokens = Lexer.lex(src, opt); + } catch (e) { + return callback(e); + } + + const done = function(err) { + let out; + + if (!err) { + try { + if (opt.walkTokens) { + marked.walkTokens(tokens, opt.walkTokens); + } + out = Parser.parse(tokens, opt); + } catch (e) { + err = e; + } + } + + opt.highlight = highlight; + + return err + ? callback(err) + : callback(null, out); + }; + + if (!highlight || highlight.length < 3) { + return done(); + } + + delete opt.highlight; + + if (!tokens.length) return done(); + + let pending = 0; + marked.walkTokens(tokens, function(token) { + if (token.type === 'code') { + pending++; + setTimeout(() => { + highlight(token.text, token.lang, function(err, code) { + if (err) { + return done(err); + } + if (code != null && code !== token.text) { + token.text = code; + token.escaped = true; + } + + pending--; + if (pending === 0) { + done(); + } + }); + }, 0); + } + }); + + if (pending === 0) { + done(); + } + + return; + } + + function onError(e) { + e.message += '\nPlease report this to https://github.com/markedjs/marked.'; + if (opt.silent) { + return '

    An error occurred:

    '
    +        + escape(e.message + '', true)
    +        + '
    '; + } + throw e; + } + + try { + const tokens = Lexer.lex(src, opt); + if (opt.walkTokens) { + if (opt.async) { + return Promise.all(marked.walkTokens(tokens, opt.walkTokens)) + .then(() => { + return Parser.parse(tokens, opt); + }) + .catch(onError); + } + marked.walkTokens(tokens, opt.walkTokens); + } + return Parser.parse(tokens, opt); + } catch (e) { + onError(e); + } +} + +/** + * Options + */ + +marked.options = +marked.setOptions = function(opt) { + merge(marked.defaults, opt); + changeDefaults(marked.defaults); + return marked; +}; + +marked.getDefaults = getDefaults; + +marked.defaults = defaults; + +/** + * Use Extension + */ + +marked.use = function(...args) { + const opts = merge({}, ...args); + const extensions = marked.defaults.extensions || { renderers: {}, childTokens: {} }; + let hasExtensions; + + args.forEach((pack) => { + // ==-- Parse "addon" extensions --== // + if (pack.extensions) { + hasExtensions = true; + pack.extensions.forEach((ext) => { + if (!ext.name) { + throw new Error('extension name required'); + } + if (ext.renderer) { // Renderer extensions + const prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null; + if (prevRenderer) { + // Replace extension with func to run new extension but fall back if false + extensions.renderers[ext.name] = function(...args) { + let ret = ext.renderer.apply(this, args); + if (ret === false) { + ret = prevRenderer.apply(this, args); + } + return ret; + }; + } else { + extensions.renderers[ext.name] = ext.renderer; + } + } + if (ext.tokenizer) { // Tokenizer Extensions + if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) { + throw new Error("extension level must be 'block' or 'inline'"); + } + if (extensions[ext.level]) { + extensions[ext.level].unshift(ext.tokenizer); + } else { + extensions[ext.level] = [ext.tokenizer]; + } + if (ext.start) { // Function to check for start of token + if (ext.level === 'block') { + if (extensions.startBlock) { + extensions.startBlock.push(ext.start); + } else { + extensions.startBlock = [ext.start]; + } + } else if (ext.level === 'inline') { + if (extensions.startInline) { + extensions.startInline.push(ext.start); + } else { + extensions.startInline = [ext.start]; + } + } + } + } + if (ext.childTokens) { // Child tokens to be visited by walkTokens + extensions.childTokens[ext.name] = ext.childTokens; + } + }); + } + + // ==-- Parse "overwrite" extensions --== // + if (pack.renderer) { + const renderer = marked.defaults.renderer || new Renderer(); + for (const prop in pack.renderer) { + const prevRenderer = renderer[prop]; + // Replace renderer with func to run extension, but fall back if false + renderer[prop] = (...args) => { + let ret = pack.renderer[prop].apply(renderer, args); + if (ret === false) { + ret = prevRenderer.apply(renderer, args); + } + return ret; + }; + } + opts.renderer = renderer; + } + if (pack.tokenizer) { + const tokenizer = marked.defaults.tokenizer || new Tokenizer(); + for (const prop in pack.tokenizer) { + const prevTokenizer = tokenizer[prop]; + // Replace tokenizer with func to run extension, but fall back if false + tokenizer[prop] = (...args) => { + let ret = pack.tokenizer[prop].apply(tokenizer, args); + if (ret === false) { + ret = prevTokenizer.apply(tokenizer, args); + } + return ret; + }; + } + opts.tokenizer = tokenizer; + } + + // ==-- Parse WalkTokens extensions --== // + if (pack.walkTokens) { + const walkTokens = marked.defaults.walkTokens; + opts.walkTokens = function(token) { + let values = []; + values.push(pack.walkTokens.call(this, token)); + if (walkTokens) { + values = values.concat(walkTokens.call(this, token)); + } + return values; + }; + } + + if (hasExtensions) { + opts.extensions = extensions; + } + + marked.setOptions(opts); + }); +}; + +/** + * Run callback for every token + */ + +marked.walkTokens = function(tokens, callback) { + let values = []; + for (const token of tokens) { + values = values.concat(callback.call(marked, token)); + switch (token.type) { + case 'table': { + for (const cell of token.header) { + values = values.concat(marked.walkTokens(cell.tokens, callback)); + } + for (const row of token.rows) { + for (const cell of row) { + values = values.concat(marked.walkTokens(cell.tokens, callback)); + } + } + break; + } + case 'list': { + values = values.concat(marked.walkTokens(token.items, callback)); + break; + } + default: { + if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) { // Walk any extensions + marked.defaults.extensions.childTokens[token.type].forEach(function(childTokens) { + values = values.concat(marked.walkTokens(token[childTokens], callback)); + }); + } else if (token.tokens) { + values = values.concat(marked.walkTokens(token.tokens, callback)); + } + } + } + } + return values; +}; + +/** + * Parse Inline + * @param {string} src + */ +marked.parseInline = function(src, opt) { + // throw error in case of non string input + if (typeof src === 'undefined' || src === null) { + throw new Error('marked.parseInline(): input parameter is undefined or null'); + } + if (typeof src !== 'string') { + throw new Error('marked.parseInline(): input parameter is of type ' + + Object.prototype.toString.call(src) + ', string expected'); + } + + opt = merge({}, marked.defaults, opt || {}); + checkSanitizeDeprecation(opt); + + try { + const tokens = Lexer.lexInline(src, opt); + if (opt.walkTokens) { + marked.walkTokens(tokens, opt.walkTokens); + } + return Parser.parseInline(tokens, opt); + } catch (e) { + e.message += '\nPlease report this to https://github.com/markedjs/marked.'; + if (opt.silent) { + return '

    An error occurred:

    '
    +        + escape(e.message + '', true)
    +        + '
    '; + } + throw e; + } +}; + +/** + * Expose + */ +marked.Parser = Parser; +marked.parser = Parser.parse; +marked.Renderer = Renderer; +marked.TextRenderer = TextRenderer; +marked.Lexer = Lexer; +marked.lexer = Lexer.lex; +marked.Tokenizer = Tokenizer; +marked.Slugger = Slugger; +marked.parse = marked; + +export const options = marked.options; +export const setOptions = marked.setOptions; +export const use = marked.use; +export const walkTokens = marked.walkTokens; +export const parseInline = marked.parseInline; +export const parse = marked; +export const parser = Parser.parse; +export const lexer = Lexer.lex; +export { defaults, getDefaults } from './defaults.js'; +export { Lexer } from './Lexer.js'; +export { Parser } from './Parser.js'; +export { Tokenizer } from './Tokenizer.js'; +export { Renderer } from './Renderer.js'; +export { TextRenderer } from './TextRenderer.js'; +export { Slugger } from './Slugger.js'; diff --git a/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/rules.js b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/rules.js new file mode 100644 index 0000000..25d1415 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/node_modules/.pnpm/marked@4.1.0/node_modules/marked/src/rules.js @@ -0,0 +1,302 @@ +import { + noopTest, + edit, + merge +} from './helpers.js'; + +/** + * Block-Level Grammar + */ +export const block = { + newline: /^(?: *(?:\n|$))+/, + code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/, + fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/, + hr: /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/, + heading: /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/, + blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/, + list: /^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/, + html: '^ {0,3}(?:' // optional indentation + + '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)' // (1) + + '|comment[^\\n]*(\\n+|$)' // (2) + + '|<\\?[\\s\\S]*?(?:\\?>\\n*|$)' // (3) + + '|\\n*|$)' // (4) + + '|\\n*|$)' // (5) + + '|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (6) + + '|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) open tag + + '|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) closing tag + + ')', + def: /^ {0,3}\[(label)\]: *(?:\n *)?]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/, + table: noopTest, + lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/, + // regex template, placeholders will be replaced according to different paragraph + // interruption rules of commonmark and the original markdown spec: + _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/, + text: /^[^\n]+/ +}; + +block._label = /(?!\s*\])(?:\\.|[^\[\]\\])+/; +block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/; +block.def = edit(block.def) + .replace('label', block._label) + .replace('title', block._title) + .getRegex(); + +block.bullet = /(?:[*+-]|\d{1,9}[.)])/; +block.listItemStart = edit(/^( *)(bull) */) + .replace('bull', block.bullet) + .getRegex(); + +block.list = edit(block.list) + .replace(/bull/g, block.bullet) + .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))') + .replace('def', '\\n+(?=' + block.def.source + ')') + .getRegex(); + +block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + + '|track|ul'; +block._comment = /|$)/; +block.html = edit(block.html, 'i') + .replace('comment', block._comment) + .replace('tag', block._tag) + .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/) + .getRegex(); + +block.paragraph = edit(block._paragraph) + .replace('hr', block.hr) + .replace('heading', ' {0,3}#{1,6} ') + .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs + .replace('|table', '') + .replace('blockquote', ' {0,3}>') + .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') + .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt + .replace('html', ')|<(?:script|pre|style|textarea|!--)') + .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks + .getRegex(); + +block.blockquote = edit(block.blockquote) + .replace('paragraph', block.paragraph) + .getRegex(); + +/** + * Normal Block Grammar + */ + +block.normal = merge({}, block); + +/** + * GFM Block Grammar + */ + +block.gfm = merge({}, block.normal, { + table: '^ *([^\\n ].*\\|.*)\\n' // Header + + ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?' // Align + + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells +}); + +block.gfm.table = edit(block.gfm.table) + .replace('hr', block.hr) + .replace('heading', ' {0,3}#{1,6} ') + .replace('blockquote', ' {0,3}>') + .replace('code', ' {4}[^\\n]') + .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') + .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt + .replace('html', ')|<(?:script|pre|style|textarea|!--)') + .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks + .getRegex(); + +block.gfm.paragraph = edit(block._paragraph) + .replace('hr', block.hr) + .replace('heading', ' {0,3}#{1,6} ') + .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs + .replace('table', block.gfm.table) // interrupt paragraphs with table + .replace('blockquote', ' {0,3}>') + .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n') + .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt + .replace('html', ')|<(?:script|pre|style|textarea|!--)') + .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks + .getRegex(); +/** + * Pedantic grammar (original John Gruber's loose markdown specification) + */ + +block.pedantic = merge({}, block.normal, { + html: edit( + '^ *(?:comment *(?:\\n|\\s*$)' + + '|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)' // closed tag + + '|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))') + .replace('comment', block._comment) + .replace(/tag/g, '(?!(?:' + + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b') + .getRegex(), + def: /^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, + heading: /^(#{1,6})(.*)(?:\n+|$)/, + fences: noopTest, // fences not supported + paragraph: edit(block.normal._paragraph) + .replace('hr', block.hr) + .replace('heading', ' *#{1,6} *[^\n]') + .replace('lheading', block.lheading) + .replace('blockquote', ' {0,3}>') + .replace('|fences', '') + .replace('|list', '') + .replace('|html', '') + .getRegex() +}); + +/** + * Inline-Level Grammar + */ +export const inline = { + escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, + autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/, + url: noopTest, + tag: '^comment' + + '|^' // self-closing tag + + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag + + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. + + '|^' // declaration, e.g. + + '|^', // CDATA section + link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/, + reflink: /^!?\[(label)\]\[(ref)\]/, + nolink: /^!?\[(ref)\](?:\[\])?/, + reflinkSearch: 'reflink|nolink(?!\\()', + emStrong: { + lDelim: /^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/, + // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right. + // () Skip orphan inside strong () Consume to delim (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a + rDelimAst: /^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/, + rDelimUnd: /^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ // ^- Not allowed for _ + }, + code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/, + br: /^( {2,}|\\)\n(?!\s*$)/, + del: noopTest, + text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~'; +inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex(); + +// sequences em should skip over [title](link), `code`, +inline.blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g; +inline.escapedEmSt = /\\\*|\\_/g; + +inline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex(); + +inline.emStrong.lDelim = edit(inline.emStrong.lDelim) + .replace(/punct/g, inline._punctuation) + .getRegex(); + +inline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g') + .replace(/punct/g, inline._punctuation) + .getRegex(); + +inline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g') + .replace(/punct/g, inline._punctuation) + .getRegex(); + +inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g; + +inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/; +inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/; +inline.autolink = edit(inline.autolink) + .replace('scheme', inline._scheme) + .replace('email', inline._email) + .getRegex(); + +inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/; + +inline.tag = edit(inline.tag) + .replace('comment', inline._comment) + .replace('attribute', inline._attribute) + .getRegex(); + +inline._label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/; +inline._href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/; +inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/; + +inline.link = edit(inline.link) + .replace('label', inline._label) + .replace('href', inline._href) + .replace('title', inline._title) + .getRegex(); + +inline.reflink = edit(inline.reflink) + .replace('label', inline._label) + .replace('ref', block._label) + .getRegex(); + +inline.nolink = edit(inline.nolink) + .replace('ref', block._label) + .getRegex(); + +inline.reflinkSearch = edit(inline.reflinkSearch, 'g') + .replace('reflink', inline.reflink) + .replace('nolink', inline.nolink) + .getRegex(); + +/** + * Normal Inline Grammar + */ + +inline.normal = merge({}, inline); + +/** + * Pedantic Inline Grammar + */ + +inline.pedantic = merge({}, inline.normal, { + strong: { + start: /^__|\*\*/, + middle: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, + endAst: /\*\*(?!\*)/g, + endUnd: /__(?!_)/g + }, + em: { + start: /^_|\*/, + middle: /^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/, + endAst: /\*(?!\*)/g, + endUnd: /_(?!_)/g + }, + link: edit(/^!?\[(label)\]\((.*?)\)/) + .replace('label', inline._label) + .getRegex(), + reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/) + .replace('label', inline._label) + .getRegex() +}); + +/** + * GFM Inline Grammar + */ + +inline.gfm = merge({}, inline.normal, { + escape: edit(inline.escape).replace('])', '~|])').getRegex(), + _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/, + url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, + _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/, + del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/, + text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\= 12'} + hasBin: true + dev: false diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-0.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-0.json index 9b1df18..6e924b6 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-0.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-0.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"mac, you are literally gaslighting him\"\n\"ok and?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"mac, you are literally gaslighting him\"\n\"ok and?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-1.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-1.json index 1e07879..5044bb7 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-1.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-1.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"oh! that's what i could do with the villagers actually! i could put them in the nut room!\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"oh! that's what i could do with the villagers actually! i could put them in the nut room!\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-10.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-10.json index c30d7e6..3ee922c 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-10.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-10.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"benjammin is in the cheese\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"benjammin is in the cheese\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-100.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-100.json index e6d21b1..cc84e05 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-100.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-100.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"there are a lot of similarities between uno games and pedophile rings, now that i think about it\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"there are a lot of similarities between uno games and pedophile rings, now that i think about it\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-101.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-101.json index e96d431..5184b30 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-101.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-101.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i am very glad that clash royale is now associated with 9/11 for you\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i am very glad that clash royale is now associated with 9/11 for you\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-102.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-102.json index 2bdbbc9..d900f3d 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-102.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-102.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"swap the arm and the brain to Achieve.\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"swap the arm and the brain to Achieve.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-103.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-103.json index f13bb51..87a2069 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-103.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-103.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"partial functions are NOT goated with the sauce\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"partial functions are NOT goated with the sauce\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-104.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-104.json index 46896a6..a0b766c 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-104.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-104.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"noisetorch microphone\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"noisetorch microphone\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-105.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-105.json index 64a06c7..ad52813 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-105.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-105.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i think about the fact the liver can regrow itself every day\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i think about the fact the liver can regrow itself every day\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-106.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-106.json index 4afca9d..0dfe7a0 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-106.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-106.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"it is pissing in my ear\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"it is pissing in my ear\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-107.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-107.json index 883e648..0287a1c 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-107.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-107.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"we are all cumming in grandma\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"we are all cumming in grandma\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-108.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-108.json index a0ac106..8f7a2a4 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-108.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-108.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"oh we have bombs? i didn't know we had bombs\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"oh we have bombs? i didn't know we had bombs\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-109.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-109.json index 81bf80e..34c7077 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-109.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-109.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"one thing i do like about using my phone as a microwave,\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"one thing i do like about using my phone as a microwave,\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-11.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-11.json index 1b49a2e..60333f4 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-11.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-11.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"you pissed so hard, you generated antimatter\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"you pissed so hard, you generated antimatter\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-110.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-110.json index eb84d39..8ccc950 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-110.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-110.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"yeah, don't you know the sun constantly pisses on things?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"yeah, don't you know the sun constantly pisses on things?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-111.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-111.json index e64db06..2e48cb6 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-111.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-111.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"im going to harvest you\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"im going to harvest you\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-112.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-112.json index c61e74c..77c6108 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-112.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-112.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"I have managed to get cows into my base. Time to breed.\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I have managed to get cows into my base. Time to breed.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-113.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-113.json index cbf94ba..228d0e2 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-113.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-113.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"spongebob will be the intermediary phase between my transition to aluminium can\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"spongebob will be the intermediary phase between my transition to aluminium can\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-114.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-114.json index d778039..4dc7148 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-114.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-114.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i love the noises the sprout mole makes\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i love the noises the sprout mole makes\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-115.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-115.json index d45d97a..24b8020 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-115.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-115.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"if you die, funny things happen\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"if you die, funny things happen\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-116.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-116.json index 3db2671..6111eb9 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-116.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-116.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"what the std doin?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"what the std doin?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-117.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-117.json index c6f18d7..193db64 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-117.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-117.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"no sorry, i dont have semen cooling\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"no sorry, i dont have semen cooling\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-118.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-118.json index eeb4344..98b2741 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-118.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-118.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"how can i modify myself\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"how can i modify myself\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-119.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-119.json index caf3bb5..0a28a3c 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-119.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-119.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"plethora of penises\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"plethora of penises\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-12.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-12.json index be8ce34..67c87fc 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-12.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-12.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"what do you think thanos' balls taste like?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"what do you think thanos' balls taste like?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-120.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-120.json index 2fc72d9..46d2f95 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-120.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-120.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"everything female-related is breaking\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"everything female-related is breaking\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-121.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-121.json index e290722..14adec2 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-121.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-121.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i would subject you [to watersports] if i could\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i would subject you [to watersports] if i could\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-122.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-122.json index fd18c8c..d5c2857 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-122.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-122.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i would be surprised if you managed to put a pipebomb up my ass\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i would be surprised if you managed to put a pipebomb up my ass\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-123.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-123.json index 5b6c765..37d2086 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-123.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-123.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i have a new toy. i must use it.\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i have a new toy. i must use it.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-124.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-124.json index 19ce38a..dd3c970 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-124.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-124.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"portable minors?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"portable minors?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-125.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-125.json new file mode 100644 index 0000000..cf5ac19 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-125.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"you can enter Freddy\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-126.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-126.json new file mode 100644 index 0000000..19c1e5d --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-126.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"search up pool of blood but awesome\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-127.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-127.json new file mode 100644 index 0000000..044a026 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-127.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Woah, I like the way this song pounds my asshole.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-128.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-128.json new file mode 100644 index 0000000..4b8ce7e --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-128.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"What is this fucking.. Wii Store music?\"\n...\n\"Murder spree????\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-129.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-129.json new file mode 100644 index 0000000..4e3ef8b --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-129.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i don't want more children\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-13.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-13.json index 60c3b6e..27515dc 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-13.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-13.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"it looks like it is in pain, perfect\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"it looks like it is in pain, perfect\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-130.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-130.json new file mode 100644 index 0000000..617d4da --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-130.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"What the fuck? My tits are gone\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-131.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-131.json new file mode 100644 index 0000000..81e9d67 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-131.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Let me turn on My Uncle.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-132.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-132.json new file mode 100644 index 0000000..d902850 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-132.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Love is in the air? No. Shit on my floor.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-133.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-133.json new file mode 100644 index 0000000..55dee03 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-133.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"can I fit a few arms in there?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-134.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-134.json new file mode 100644 index 0000000..bfbfd61 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-134.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"my mouth is gone\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-135.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-135.json new file mode 100644 index 0000000..5d086fb --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-135.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"how many times have I orgasmed?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-136.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-136.json new file mode 100644 index 0000000..d9df429 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-136.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"oh! industrial chainsaw!\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-137.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-137.json new file mode 100644 index 0000000..89992fc --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-137.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"the balls have gotten quite rusty. they might need to be oiled\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-138.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-138.json new file mode 100644 index 0000000..47471fd --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-138.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"better to get off crack cocaine sooner, than later\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-139.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-139.json new file mode 100644 index 0000000..4e3ed77 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-139.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"What is happening? Why am i pissing everywhere?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-14.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-14.json index 87221be..0ec59d8 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-14.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-14.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"large simpson. discuss\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"large simpson. discuss\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-140.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-140.json new file mode 100644 index 0000000..4636d7e --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-140.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I've tried to shove that down my mouth multiple times\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-141.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-141.json new file mode 100644 index 0000000..ab35b56 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-141.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"no way!! does he shoot them too??\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-142.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-142.json new file mode 100644 index 0000000..e80368f --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-142.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"apple? hey apple? strap on\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-143.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-143.json new file mode 100644 index 0000000..62645bc --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-143.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"im concerned that im slowly giving mac a lactation fetish\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-144.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-144.json new file mode 100644 index 0000000..4ad80a9 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-144.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"There are so many balls in this dungeon\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-145.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-145.json new file mode 100644 index 0000000..e23d742 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-145.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"it is at least "},[{"text":"banger","italic":true}],{"text":" bowel movements\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-146.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-146.json new file mode 100644 index 0000000..ad4135e --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-146.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"its not boner but it SOUNDS like boner\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-147.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-147.json new file mode 100644 index 0000000..e65d10c --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-147.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"kidney bite\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-148.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-148.json new file mode 100644 index 0000000..14380ab --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-148.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"the babies are multiplying with eachother\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-149.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-149.json new file mode 100644 index 0000000..15a25b6 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-149.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"what is it with germans and plutonium?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-15.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-15.json index 671459b..ef4e68f 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-15.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-15.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"what if Apple made cheese?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"what if Apple made cheese?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-150.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-150.json new file mode 100644 index 0000000..bd74f0e --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-150.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I am covering my little hole\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-151.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-151.json new file mode 100644 index 0000000..d8a7c37 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-151.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"are all furries gaster\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-152.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-152.json new file mode 100644 index 0000000..08de84e --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-152.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i want to punch this child\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-153.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-153.json new file mode 100644 index 0000000..6d512ce --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-153.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i love abusing women\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-154.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-154.json new file mode 100644 index 0000000..b49e0c4 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-154.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"why is misogyny funny??????\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-155.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-155.json new file mode 100644 index 0000000..0f27ae5 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-155.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"It's okay, i have a............. bomb\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-156.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-156.json new file mode 100644 index 0000000..2c69b2a --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-156.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"youre so sussy i know you took my liver\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-157.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-157.json new file mode 100644 index 0000000..32fef01 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-157.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"organ theft\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-158.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-158.json new file mode 100644 index 0000000..d14d420 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-158.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I offer quite a few liquids.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-159.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-159.json new file mode 100644 index 0000000..29cb282 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-159.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Come here, vore lady\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-16.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-16.json index 42b0df7..abed6d9 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-16.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-16.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"click frenzy... *intense orgasm*\" x2"}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"click frenzy... "},[{"text":"intense orgasm","italic":true}],{"text":"\" x2"}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-160.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-160.json new file mode 100644 index 0000000..75b5cdb --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-160.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"What are you doing to my feet??\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-161.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-161.json new file mode 100644 index 0000000..d033784 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-161.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i want to kick the elephant's foot\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-162.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-162.json new file mode 100644 index 0000000..dfbd9b1 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-162.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"sand amogus\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-163.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-163.json new file mode 100644 index 0000000..d800f6c --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-163.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"cries cutely while scanning your massive daddy muscles\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-164.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-164.json new file mode 100644 index 0000000..fb8d613 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-164.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"our base is emitting speedcore\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-165.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-165.json new file mode 100644 index 0000000..043d60f --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-165.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"worm??? please dont impregnate me???\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-166.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-166.json new file mode 100644 index 0000000..085e82f --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-166.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"please do not put your eggs in me\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-167.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-167.json new file mode 100644 index 0000000..09e54cc --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-167.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i need to take out all my rage on a human body. and you are the "},[{"text":"closest","bold":true}],{"text":" one to my current location.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-168.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-168.json new file mode 100644 index 0000000..a6fae7c --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-168.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\""},[{"text":"oh","italic":true}],{"text":" when i launch fl studio i die\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-169.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-169.json new file mode 100644 index 0000000..a32e79f --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-169.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"why is it so large?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-17.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-17.json index 5e36432..686484e 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-17.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-17.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"noooooo! dont get eaten... hahah, youre so sexy~ ...\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"noooooo! dont get eaten... hahah, youre so sexy~ ...\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-170.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-170.json new file mode 100644 index 0000000..49fa1ef --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-170.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Can i drown the child in cyanide?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-171.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-171.json new file mode 100644 index 0000000..0e13a95 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-171.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"there it is. i found the region. now i just gotta go at it\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-172.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-172.json new file mode 100644 index 0000000..acba32b --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-172.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"jill doing asmr would be great\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-173.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-173.json new file mode 100644 index 0000000..53e5812 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-173.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i have "},[{"text":"2","bold":true}],{"text":" cursed images of children\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-174.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-174.json new file mode 100644 index 0000000..3a6ff3b --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-174.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"isnt that just called projectile diarrhoea?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-175.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-175.json new file mode 100644 index 0000000..a577a14 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-175.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"(Just [Token \"cummy\",Token \"wummies\",Token \"and\",Token \"pissy\",Token \"wissies\"],\"\")"}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-176.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-176.json new file mode 100644 index 0000000..471c7de --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-176.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i'm getting paid by Putin to cough on people\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-177.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-177.json new file mode 100644 index 0000000..7481c06 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-177.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"so let's just say you have- and i promise this has nothing to do with vore,\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-178.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-178.json new file mode 100644 index 0000000..4f61985 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-178.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I'm sorry but cock rings are funny\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-179.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-179.json new file mode 100644 index 0000000..52c7091 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-179.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I can see myself masturbating to this\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-18.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-18.json index 13c8005..363d03b 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-18.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-18.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i am currently hitting the power grid for the uk\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i am currently hitting the power grid for the uk\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-180.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-180.json new file mode 100644 index 0000000..fc373d3 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-180.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I wonder what kind of condom flavors there are\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-181.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-181.json new file mode 100644 index 0000000..613f3d6 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-181.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Isn't cock meant to be sucked?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-182.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-182.json new file mode 100644 index 0000000..c56b8c5 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-182.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Having a stalker is the funniest thing ever\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-183.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-183.json new file mode 100644 index 0000000..7aca587 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-183.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Imagine punching a child\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-184.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-184.json new file mode 100644 index 0000000..ed16540 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-184.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"what sort of current can pass through children?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-185.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-185.json new file mode 100644 index 0000000..ec652c9 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-185.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"what's wrong? are you lost, "},[{"text":"bitch","bold":true}],{"text":"?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-186.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-186.json new file mode 100644 index 0000000..c512279 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-186.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"fun fact: i once got killed\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-187.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-187.json new file mode 100644 index 0000000..08f708d --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-187.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"russia\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-188.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-188.json new file mode 100644 index 0000000..c686c78 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-188.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Chicken sandwich just sounds like a sex move\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-189.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-189.json new file mode 100644 index 0000000..20d92e1 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-189.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"everytime i speak i start undressing\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-19.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-19.json index 83045c9..03cae74 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-19.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-19.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"do i wanna sell my nuts?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"do i wanna sell my nuts?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-190.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-190.json new file mode 100644 index 0000000..97a5d95 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-190.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"the phrase 'you have a pipe bomb in your mailbox' is so funny to me\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-191.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-191.json new file mode 100644 index 0000000..0336eb7 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-191.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Sorry, i have a fetish for doing my mom\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-192.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-192.json new file mode 100644 index 0000000..a1935c5 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-192.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"what the fuck? how do you even cum to that?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-193.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-193.json new file mode 100644 index 0000000..8ad9ad7 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-193.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"industry baby circles extreme demon\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-194.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-194.json new file mode 100644 index 0000000..f9e8e61 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-194.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"as long as there is a war, mario is happy\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-195.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-195.json new file mode 100644 index 0000000..23f7f44 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-195.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"yay! famine!\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-196.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-196.json new file mode 100644 index 0000000..e26dfc1 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-196.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i can be your toilet uwu\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-197.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-197.json new file mode 100644 index 0000000..4fb53f1 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-197.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i feel like it went in my nose\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-198.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-198.json new file mode 100644 index 0000000..d204278 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-198.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"mohammed raid raided by i forgor iphone\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-199.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-199.json new file mode 100644 index 0000000..887b17c --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-199.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"a family trying to fuck a clone of their wife\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-2.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-2.json index c91cc7d..44e965d 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-2.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-2.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i get the tummy wummies at day time...\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i get the tummy wummies at day time...\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-20.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-20.json index 8565368..e8554d6 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-20.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-20.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"cooking companions if it took place in mcdonalds\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"cooking companions if it took place in mcdonalds\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-200.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-200.json new file mode 100644 index 0000000..f8cafe9 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-200.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i want my foreskin back\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-201.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-201.json new file mode 100644 index 0000000..645891c --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-201.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"where are the bodies? where did i fuckin...\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-202.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-202.json new file mode 100644 index 0000000..2ba866f --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-202.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"get numb children\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-203.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-203.json new file mode 100644 index 0000000..c8e985e --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-203.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"its heavily implied that jon has a vibrator up his ass\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-204.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-204.json new file mode 100644 index 0000000..bc4b350 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-204.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I have hot glue on my ass\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-205.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-205.json new file mode 100644 index 0000000..7816cab --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-205.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"mhm, penis\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-206.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-206.json new file mode 100644 index 0000000..f7a1d4a --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-206.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"He wants to be able to throw girls\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-207.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-207.json new file mode 100644 index 0000000..fb399b3 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-207.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"big big milkies prints just fine\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-208.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-208.json new file mode 100644 index 0000000..41f87a3 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-208.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"whats my battery at... wait dont ping e621.net\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-209.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-209.json new file mode 100644 index 0000000..b07f4bf --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-209.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I don't remember ass vore in undertale\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-21.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-21.json index ae0ea22..240a0e6 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-21.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-21.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"*repeated breathing* pee!\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\""},[{"text":"repeated breathing","italic":true}],{"text":" pee!\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-210.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-210.json new file mode 100644 index 0000000..7fccdfe --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-210.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Have you considered?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-211.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-211.json new file mode 100644 index 0000000..721866a --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-211.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Personally i'm more of a Piss Enema kinda guy.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-212.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-212.json new file mode 100644 index 0000000..a90fe74 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-212.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Come here Mr. English, i'm gonna fucking kill you\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-213.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-213.json new file mode 100644 index 0000000..b76f639 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-213.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I want to fuck a golf ball\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-214.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-214.json new file mode 100644 index 0000000..6aebee4 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-214.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"vacuum sealed human\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-215.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-215.json new file mode 100644 index 0000000..532c0c1 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-215.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"it was a very prompted moan\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-216.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-216.json new file mode 100644 index 0000000..ade4985 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-216.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I mean... I removed 69420...\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-217.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-217.json new file mode 100644 index 0000000..2b93654 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-217.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"pride flag inflation\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-218.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-218.json new file mode 100644 index 0000000..30d4483 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-218.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"nice pissing, slut\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-219.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-219.json new file mode 100644 index 0000000..18bc631 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-219.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i like your mom done medium rare\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-22.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-22.json index 05c18da..c46c593 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-22.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-22.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"okay, but we have to talk semantics now: what is piss?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"okay, but we have to talk semantics now: what is piss?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-220.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-220.json new file mode 100644 index 0000000..918d08a --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-220.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"cummus\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-221.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-221.json new file mode 100644 index 0000000..a4701dd --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-221.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"you can enter mom\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-222.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-222.json new file mode 100644 index 0000000..74b3fe3 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-222.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"yes daddy take me out of bounds and impregnate me~\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-223.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-223.json new file mode 100644 index 0000000..2ad6027 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-223.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i have no idea what this is. i have on intention of knowing what this is. but i want to run a reverse proxy on it.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-224.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-224.json new file mode 100644 index 0000000..27af42b --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-224.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"horse\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-225.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-225.json new file mode 100644 index 0000000..479504f --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-225.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i consider myself normal\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-226.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-226.json new file mode 100644 index 0000000..6f21ff8 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-226.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i feel like an a4 is enough to strangle someone\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-227.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-227.json new file mode 100644 index 0000000..d86f939 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-227.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"my fingers are clipping into my leg\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-228.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-228.json new file mode 100644 index 0000000..7802446 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-228.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I am now in girl cock\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-229.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-229.json new file mode 100644 index 0000000..135dfc2 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-229.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"why did you make the cat so thicc\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-23.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-23.json index 382f698..73d55bb 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-23.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-23.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"is there an equivalent of fingerprints for piss?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"is there an equivalent of fingerprints for piss?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-230.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-230.json new file mode 100644 index 0000000..1e0a426 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-230.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"the allah fandom\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-231.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-231.json new file mode 100644 index 0000000..e89cec8 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-231.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"judas apology video\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-232.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-232.json new file mode 100644 index 0000000..f424c1b --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-232.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"the lunatic cultist had an intimate relationship with the eater of worlds\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-233.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-233.json new file mode 100644 index 0000000..9c6a123 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-233.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"anything's a dildo if youre brave enough\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-234.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-234.json new file mode 100644 index 0000000..91c19b7 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-234.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"bussy up\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-235.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-235.json new file mode 100644 index 0000000..14de892 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-235.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"babies are equivalent to rats\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-236.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-236.json new file mode 100644 index 0000000..9e99f5a --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-236.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Putting the “D” in “Daycare.”\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-237.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-237.json new file mode 100644 index 0000000..efed661 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-237.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"oh daddy please make me feel unsafe~ "},[{"text":"nghh!","italic":true}],{"text":"\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-238.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-238.json new file mode 100644 index 0000000..e9bf5f1 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-238.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I'm fairly sure i've put it in my mouth more times than skye has\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-239.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-239.json new file mode 100644 index 0000000..b2a8a8a --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-239.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"femboys are like vampires\"\n\"instead of biting the neck, they bite the dick\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-24.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-24.json index aed2a01..b5a702b 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-24.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-24.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i love setting dogs on fire\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i love setting dogs on fire\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-240.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-240.json new file mode 100644 index 0000000..dcaf20b --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-240.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Novichok mukbang?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-241.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-241.json new file mode 100644 index 0000000..8b6b0d0 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-241.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"When launched, the Baby deals 3x more damage\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-242.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-242.json new file mode 100644 index 0000000..379d021 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-242.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"what gender is the american civil war\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-243.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-243.json new file mode 100644 index 0000000..3acd88f --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-243.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"no? that's the wrong hole\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-244.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-244.json new file mode 100644 index 0000000..c6a2fe2 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-244.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"you got that chungus weewee\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-245.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-245.json new file mode 100644 index 0000000..87728c5 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-245.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"yessss. i can print penis at will\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-246.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-246.json new file mode 100644 index 0000000..382a603 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-246.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"what seasonings do you like to put on your children\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-247.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-247.json new file mode 100644 index 0000000..c436e91 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-247.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"vore me michael uwu\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-248.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-248.json new file mode 100644 index 0000000..d55e7f2 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-248.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I hope I don't have to whip out the ol' latex\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-249.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-249.json new file mode 100644 index 0000000..af6f21e --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-249.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"pp? what is pp? OH. THAT IS PP\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-25.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-25.json index 72fb7f6..a3b2b0e 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-25.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-25.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i didnt know my toilet was a friction battery\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i didnt know my toilet was a friction battery\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-250.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-250.json new file mode 100644 index 0000000..34647d6 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-250.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"mom, canonically, has used a dildo\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-251.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-251.json new file mode 100644 index 0000000..bdec897 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-251.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"an angel wants to give me a sinus infection!\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-252.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-252.json new file mode 100644 index 0000000..d56345a --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-252.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"the tip of his dick is also like, at the very bottom\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-253.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-253.json new file mode 100644 index 0000000..9231a33 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-253.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"please shoot my bussy\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-254.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-254.json new file mode 100644 index 0000000..6ab4850 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-254.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I love petting my cat and just getting an erection\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-255.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-255.json new file mode 100644 index 0000000..6fabe38 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-255.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"steal my bussy uwu\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-256.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-256.json new file mode 100644 index 0000000..adbf419 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-256.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"shove a cigarette up my ass\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-257.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-257.json new file mode 100644 index 0000000..a254579 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-257.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Ultimately, the person becomes comatose and suffocates in a series of convulsive spasms.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-258.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-258.json new file mode 100644 index 0000000..0ce606d --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-258.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"dont care if its a human bitch or an anthropomorphic bitch\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-259.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-259.json new file mode 100644 index 0000000..4560c9d --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-259.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I left the voice channel because I was inactive for too long. If you are a Premium member, you can disable this by typing /247.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-26.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-26.json index b2855a0..482a39e 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-26.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-26.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"piranha solution enema\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"piranha solution enema\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-260.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-260.json new file mode 100644 index 0000000..0bb2759 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-260.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"there are at least 5 dead bodies in here\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-261.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-261.json new file mode 100644 index 0000000..905ab01 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-261.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"im a sink\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-262.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-262.json new file mode 100644 index 0000000..bca0a6a --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-262.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"im going to punch everyone in the dick until im the only one in the world with balls\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-263.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-263.json new file mode 100644 index 0000000..96bf85f --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-263.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"You can potentially make a fleshlight out of shit.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-264.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-264.json new file mode 100644 index 0000000..3f6c88c --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-264.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"ooh! theres an arcade in my mother's corpse! thats nice\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-265.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-265.json new file mode 100644 index 0000000..08617cc --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-265.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"my asshole is big enough to swallow a child\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-266.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-266.json new file mode 100644 index 0000000..d99bafe --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-266.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I mean he's black, it's fine its not racist\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-267.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-267.json new file mode 100644 index 0000000..839edea --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-267.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"are you having rough intercourse with isaac\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-268.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-268.json new file mode 100644 index 0000000..f558aca --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-268.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I can ink everywhere now... mmm yes...\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-269.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-269.json new file mode 100644 index 0000000..477c19b --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-269.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"So what is the point in being able to piss everywhere?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-27.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-27.json index b13c03c..84063f7 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-27.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-27.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"girlboss, gas leak, matchstick\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"girlboss, gas leak, matchstick\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-270.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-270.json new file mode 100644 index 0000000..a246e48 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-270.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I'm gonna blow these children\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-271.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-271.json new file mode 100644 index 0000000..2728d57 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-271.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I love watching children piss\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-272.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-272.json new file mode 100644 index 0000000..052f100 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-272.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\""},[{"text":"inflates the shit, making it big and round","italic":true}],{"text":"\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-273.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-273.json new file mode 100644 index 0000000..dd60662 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-273.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"oh hey! my cum turned into shit!\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-274.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-274.json new file mode 100644 index 0000000..808d978 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-274.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Used diapers are great. Me and my wife wear one.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-275.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-275.json new file mode 100644 index 0000000..4eba586 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-275.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"you have to kill the others first, then the white dudes die\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-276.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-276.json new file mode 100644 index 0000000..4b967b2 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-276.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"kill the black dudes first\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-277.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-277.json new file mode 100644 index 0000000..59de10f --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-277.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Drink boner.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-278.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-278.json new file mode 100644 index 0000000..126bd48 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-278.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"My only way of attacking is shit, which is uncontrollable\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-279.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-279.json new file mode 100644 index 0000000..3079e08 --- /dev/null +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-279.json @@ -0,0 +1 @@ +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"My objective is to kill mom\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-28.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-28.json index 61893df..d070539 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-28.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-28.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i find the idea of jill over the course of 3 months transforming into a lead pipe really funny\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i find the idea of jill over the course of 3 months transforming into a lead pipe really funny\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-29.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-29.json index 70e6dd0..fd62880 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-29.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-29.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"oh yeah! forgot im bombing you\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"oh yeah! forgot im bombing you\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-3.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-3.json index 9f72984..dfe79fb 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-3.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-3.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"there are exactly two songs\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"there are exactly two songs\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-30.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-30.json index 0dec687..883a33f 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-30.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-30.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"this is fine dining porn\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"this is fine dining porn\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-31.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-31.json index ef51806..d6f9a58 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-31.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-31.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"im thinking about the suck parrot\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"im thinking about the suck parrot\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-32.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-32.json index 69394a7..fa87d8e 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-32.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-32.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"get a recording of my anal cavity\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"get a recording of my anal cavity\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-33.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-33.json index c6510d1..c44e03f 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-33.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-33.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"Why does the toddler have a gigantic ass?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Why does the toddler have a gigantic ass?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-34.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-34.json index 5ee5033..f29b86e 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-34.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-34.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"Damn... I'm going to crush your head with my thighs\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Damn... I'm going to crush your head with my thighs\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-35.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-35.json index 82d9d39..49ab667 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-35.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-35.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i'm actually not sure if i prefer google or yandex! hold on, i have to add another contender... [typing noises] bing... dot com...\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i'm actually not sure if i prefer google or yandex! hold on, i have to add another contender... [typing noises] bing... dot com...\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-36.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-36.json index 5ddf4d8..8e448ee 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-36.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-36.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i'm growing kinda fond of yandex! however, there is one thing i have to try... [typing noises] gay... furry porn...\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i'm growing kinda fond of yandex! however, there is one thing i have to try... [typing noises] gay... furry porn...\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-37.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-37.json index e6f9e48..45eb37a 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-37.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-37.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i just.. [holding back laughter] blow into your urethra..\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i just.. [holding back laughter] blow into your urethra..\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-38.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-38.json index 6dd046d..d4c7372 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-38.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-38.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"#teamgovernmentlease\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"#teamgovernmentlease\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-39.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-39.json index d3cebac..c5da0e7 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-39.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-39.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"plants vs mrbeast\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"plants vs mrbeast\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-4.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-4.json index e507722..9c1e296 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-4.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-4.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"should cottage cheese do solar damage?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"should cottage cheese do solar damage?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-40.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-40.json index b97858e..52a0282 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-40.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-40.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"did you know 63 + 33 is equal to 99? its because both numbers\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"did you know 63 + 33 is equal to 99? its because both numbers\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-41.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-41.json index 58a6384..1ce7fc9 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-41.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-41.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i never would fuck my sisters... O-OR MY BROTHERS!\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i never would fuck my sisters... O-OR MY BROTHERS!\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-42.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-42.json index 1c4a322..19b31d2 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-42.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-42.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"im sorry mario, but your pussy stinks\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"im sorry mario, but your pussy stinks\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-43.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-43.json index 41e0164..ac7df21 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-43.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-43.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"wet concrete and asshole. trust me on this, it is sooo good\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"wet concrete and asshole. trust me on this, it is sooo good\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-44.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-44.json index 6c8608e..bf9bff4 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-44.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-44.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"the entire morbius movie was an anti-burger sympathizer\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"the entire morbius movie was an anti-burger sympathizer\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-45.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-45.json index 538a4a7..c054caa 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-45.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-45.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i would have thought bowser, but obama?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i would have thought bowser, but obama?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-46.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-46.json index 8627a34..0175be8 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-46.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-46.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"can i wish about who's cum i get? in which case i would wish for obama's cum\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"can i wish about who's cum i get? in which case i would wish for obama's cum\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-47.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-47.json index 9d6ff24..6f1cfb1 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-47.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-47.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"[typing noises] \"nilered... piss\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"[typing noises] \"nilered... piss\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-48.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-48.json index 846aea8..3ec53ec 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-48.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-48.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"I thought you were going to put glue in her pussy\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I thought you were going to put glue in her pussy\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-49.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-49.json index 3f6fd6d..bc09f7b 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-49.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-49.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"he said he jacked off too much and his ball hurts\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"he said he jacked off too much and his ball hurts\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-5.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-5.json index 3748b3c..8ead677 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-5.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-5.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"fart with extra cheese...\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"fart with extra cheese...\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-50.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-50.json index e922888..bbe0f2a 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-50.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-50.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"I would not get much of a profit from selling my Nut\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I would not get much of a profit from selling my Nut\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-51.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-51.json index c4433c0..538cb4e 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-51.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-51.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i kinda wanna make sexfuck with you...\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i kinda wanna make sexfuck with you...\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-52.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-52.json index f9e607d..fdd1c4b 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-52.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-52.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"I'm not like the other girls, my heart doesn't work\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I'm not like the other girls, my heart doesn't work\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-53.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-53.json index 6ec7cb6..801b644 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-53.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-53.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i'm not even homophobia\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i'm not even homophobia\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-54.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-54.json index f367361..14fb6fb 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-54.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-54.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"you and a cute girl are test subjects\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"you and a cute girl are test subjects\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-55.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-55.json index 6d57c76..2c64e45 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-55.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-55.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"marco, your torment is so enjoyable\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"marco, your torment is so enjoyable\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-56.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-56.json index 9e0ad97..e8457f0 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-56.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-56.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"grandpa do be lookin kinda thicc today\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"grandpa do be lookin kinda thicc today\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-57.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-57.json index b28e696..7bbc3c3 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-57.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-57.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"Good result! Highly corrosive.\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Good result! Highly corrosive.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-58.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-58.json index c8d92bd..89825b3 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-58.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-58.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"that is a new level of pedophilia that i never knew existed\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"that is a new level of pedophilia that i never knew existed\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-59.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-59.json index 03d3cc5..68239de 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-59.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-59.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"the idea of marco making out with ben is not a good one\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"the idea of marco making out with ben is not a good one\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-6.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-6.json index c2fe164..48b8419 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-6.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-6.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"pissing on it does a lot of damage, because the piss goes through its entire body\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"pissing on it does a lot of damage, because the piss goes through its entire body\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-60.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-60.json index 7964dde..2260b97 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-60.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-60.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"cat is gaming with my arm\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"cat is gaming with my arm\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-61.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-61.json index fd21958..da7c2b0 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-61.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-61.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"oh. that is a lot of propane tanks\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"oh. that is a lot of propane tanks\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-62.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-62.json index 08b85f5..f2ed2bf 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-62.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-62.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"this parkour is racist\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"this parkour is racist\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-63.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-63.json index defbb13..3177a9d 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-63.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-63.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"the pilk jenkem\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"the pilk jenkem\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-64.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-64.json index 0d10b82..e34123a 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-64.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-64.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"Imagine you get waterboarded and you just start hearing music\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Imagine you get waterboarded and you just start hearing music\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-65.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-65.json index daed9c2..d0037ca 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-65.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-65.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"the gamer sweat from the shirts lubed it up\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"the gamer sweat from the shirts lubed it up\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-66.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-66.json index 7533732..726d362 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-66.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-66.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i sure hope he didn't piss on his brother\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i sure hope he didn't piss on his brother\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-67.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-67.json index 27af0fd..4daf8ce 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-67.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-67.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i will not free you. i will let you leak\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i will not free you. i will let you leak\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-68.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-68.json index 0908c65..f8cb8cf 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-68.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-68.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"belgium is now gone\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"belgium is now gone\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-69.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-69.json index e6189c2..3df79d0 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-69.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-69.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"dont bend your dick. thats not healthy\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"dont bend your dick. thats not healthy\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-7.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-7.json index 6b6fd56..a00341c 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-7.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-7.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"the forbidden buttplug...\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"the forbidden buttplug...\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-70.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-70.json index 8e47682..26ab096 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-70.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-70.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"oh no. what is happening outside\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"oh no. what is happening outside\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-71.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-71.json index 144a38d..b1d1a89 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-71.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-71.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"every interest has a penis and you have to circumsize it.\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"every interest has a penis and you have to circumsize it.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-72.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-72.json index 0710f96..bd13379 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-72.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-72.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"im gonna put some catholics in my mouth\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"im gonna put some catholics in my mouth\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-73.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-73.json index 1ff66c0..eeb1d50 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-73.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-73.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"Looooll, You're disabled??\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"Looooll, You're disabled??\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-74.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-74.json index b1e1976..9e19132 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-74.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-74.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"the balls are getting stick\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"the balls are getting stick\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-75.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-75.json index e09bee5..dd068b1 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-75.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-75.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"those are very very large feet\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"those are very very large feet\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-76.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-76.json index 8196a49..f42b7c3 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-76.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-76.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i wish that was me\"\n\"so go on e6 and-\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i wish that was me\"\n\"so go on e6 and-\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-77.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-77.json index 23998b6..efc9c5c 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-77.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-77.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"right now im trying to figure out why it doesnt like head\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"right now im trying to figure out why it doesnt like head\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-78.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-78.json index 32e2108..1b0bb0e 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-78.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-78.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i believe, in scientific terms, i shit myself\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i believe, in scientific terms, i shit myself\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-79.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-79.json index 9799e3a..9d6d6e9 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-79.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-79.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"doesn't pack as much of a punch as 9/11\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"doesn't pack as much of a punch as 9/11\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-8.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-8.json index 30ac3e1..1a4d831 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-8.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-8.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"if you stand in Siberia for too long you fall through the ground and just fall\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"if you stand in Siberia for too long you fall through the ground and just fall\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-80.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-80.json index c190907..95f9622 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-80.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-80.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i'm kinda getting beyblade vibes listening to him\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i'm kinda getting beyblade vibes listening to him\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-81.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-81.json index a8ec005..f9111e2 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-81.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-81.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"anthony padilla aka the grim reaper\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"anthony padilla aka the grim reaper\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-82.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-82.json index 95af69d..7fc05fb 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-82.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-82.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i am deforming tyler\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i am deforming tyler\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-83.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-83.json index 92ea55f..8c20eae 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-83.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-83.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"what about non-binary bussy yogurt people?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"what about non-binary bussy yogurt people?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-84.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-84.json index c2ae5c9..14454fe 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-84.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-84.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"his battle scars are his circumcision\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"his battle scars are his circumcision\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-85.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-85.json index 8c6ebfe..7f6c17d 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-85.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-85.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i cat cum\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i cat cum\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-86.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-86.json index 39e144f..8468594 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-86.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-86.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"That is a lot of parents. I need to kill them all so that the child can be left unsupervised.\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"That is a lot of parents. I need to kill them all so that the child can be left unsupervised.\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-87.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-87.json index 7058eef..4cf43c2 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-87.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-87.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"I think i made big daddy really angry\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"I think i made big daddy really angry\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-88.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-88.json index d561c63..556fedb 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-88.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-88.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"They should've let me penetrate his ass (with bullets)\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"They should've let me penetrate his ass (with bullets)\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-89.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-89.json index 6ada953..ff29bb8 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-89.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-89.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i dont know if i want to eat, or if i want to puke, so im just going to say i want to eat puke\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i dont know if i want to eat, or if i want to puke, so im just going to say i want to eat puke\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-9.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-9.json index fe41fd7..23d7be1 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-9.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-9.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"if you go far enough east into Russia you end up in the farlands\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"if you go far enough east into Russia you end up in the farlands\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-90.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-90.json index 14f90f1..7b10976 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-90.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-90.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"no.. no vore. of _course_ its furaffinity...\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"no.. no vore. of "},[{"text":"course","italic":true}],{"text":" its furaffinity...\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-91.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-91.json index 15899b7..a9d74d3 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-91.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-91.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"my entire pc is currently comprised by geometry dash\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"my entire pc is currently comprised by geometry dash\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-92.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-92.json index b585d8a..decddf6 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-92.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-92.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"making the 5 year old pregnant\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"making the 5 year old pregnant\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-93.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-93.json index fa1bb1a..fd22536 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-93.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-93.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"imagine one of these children on their own...\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"imagine one of these children on their own...\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-94.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-94.json index 72ffd4b..347a19c 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-94.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-94.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"i love shitting\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"i love shitting\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-95.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-95.json index 9343708..9a651c4 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-95.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-95.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"piss isn't a body part\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"piss isn't a body part\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-96.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-96.json index 7554699..833663b 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-96.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-96.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"do you remember me comtemplating whether i should eat paint?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"do you remember me comtemplating whether i should eat paint?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-97.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-97.json index db92cec..7394fe9 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-97.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-97.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"on my end, my ass is pertruding so much\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"on my end, my ass is pertruding so much\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-98.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-98.json index 6c2a5de..45e8904 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-98.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-98.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"uwu *explodes*\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"uwu "},[{"text":"explodes","italic":true}],{"text":"\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quote-99.json b/config/openloader/resources/firepit/assets/firepit/tips/quote-99.json index 3c018e1..a68d89e 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quote-99.json +++ b/config/openloader/resources/firepit/assets/firepit/tips/quote-99.json @@ -1 +1 @@ -{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":{"text":"\"why are old men adding you on Facebook?\""}} \ No newline at end of file +{"title":{"text":"Random #evidence quote","underlined":true,"color":"gold"},"tip":[{"text":"\"why are old men adding you on Facebook?\""}]} \ No newline at end of file diff --git a/config/openloader/resources/firepit/assets/firepit/tips/quotes.txt b/config/openloader/resources/firepit/assets/firepit/tips/quotes.txt index 1c1b8d4..b5f1c7b 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/quotes.txt +++ b/config/openloader/resources/firepit/assets/firepit/tips/quotes.txt @@ -249,3 +249,316 @@ "i have a new toy. i must use it." % "portable minors?" +% +"you can enter Freddy" +% +"search up pool of blood but awesome" +% +"Woah, I like the way this song pounds my asshole." +% +"What is this fucking.. Wii Store music?" +... +"Murder spree????" +% +"i don't want more children" +% +"What the fuck? My tits are gone" +% +"Let me turn on My Uncle." +% +"Love is in the air? No. Shit on my floor." +% +"can I fit a few arms in there?" +% +"my mouth is gone" +% +"how many times have I orgasmed?" +% +"oh! industrial chainsaw!" +% +"the balls have gotten quite rusty. they might need to be oiled" +% +"better to get off crack cocaine sooner, than later" +% +"What is happening? Why am i pissing everywhere?" +% +"I've tried to shove that down my mouth multiple times" +% +"no way!! does he shoot them too??" +% +"apple? hey apple? strap on" +% +"im concerned that im slowly giving mac a lactation fetish" +% +"There are so many balls in this dungeon" +% +"it is at least _banger_ bowel movements" +% +"its not boner but it SOUNDS like boner" +% +"kidney bite" +% +"the babies are multiplying with eachother" +% +"what is it with germans and plutonium?" +% +"I am covering my little hole" +% +"are all furries gaster" +% +"i want to punch this child" +% +"i love abusing women" +% +"why is misogyny funny??????" +% +"It's okay, i have a............. bomb" +% +"youre so sussy i know you took my liver" +% +"organ theft" +% +"I offer quite a few liquids." +% +"Come here, vore lady" +% +"What are you doing to my feet??" +% +"i want to kick the elephant's foot" +% +"sand amogus" +% +"cries cutely while scanning your massive daddy muscles" +% +"our base is emitting speedcore" +% +"worm??? please dont impregnate me???" +% +"please do not put your eggs in me" +% +"i need to take out all my rage on a human body. and you are the **closest** one to my current location." +% +"*oh* when i launch fl studio i die" +% +"why is it so large?" +% +"Can i drown the child in cyanide?" +% +"there it is. i found the region. now i just gotta go at it" +% +"jill doing asmr would be great" +% +"i have **2** cursed images of children" +% +"isnt that just called projectile diarrhoea?" +% +(Just [Token "cummy",Token "wummies",Token "and",Token "pissy",Token "wissies"],"") +% +"i'm getting paid by Putin to cough on people" +% +"so let's just say you have- and i promise this has nothing to do with vore," +% +"I'm sorry but cock rings are funny" +% +"I can see myself masturbating to this" +% +"I wonder what kind of condom flavors there are" +% +"Isn't cock meant to be sucked?" +% +"Having a stalker is the funniest thing ever" +% +"Imagine punching a child" +% +"what sort of current can pass through children?" +% +"what's wrong? are you lost, **bitch**?" +% +"fun fact: i once got killed" +% +"russia" +% +"Chicken sandwich just sounds like a sex move" +% +"everytime i speak i start undressing" +% +"the phrase 'you have a pipe bomb in your mailbox' is so funny to me" +% +"Sorry, i have a fetish for doing my mom" +% +"what the fuck? how do you even cum to that?" +% +"industry baby circles extreme demon" +% +"as long as there is a war, mario is happy" +% +"yay! famine!" +% +"i can be your toilet uwu" +% +"i feel like it went in my nose" +% +"mohammed raid raided by i forgor iphone" +% +"a family trying to fuck a clone of their wife" +% +"i want my foreskin back" +% +"where are the bodies? where did i fuckin..." +% +"get numb children" +% +"its heavily implied that jon has a vibrator up his ass" +% +"I have hot glue on my ass" +% +"mhm, penis" +% +"He wants to be able to throw girls" +% +"big big milkies prints just fine" +% +"whats my battery at... wait dont ping e621.net" +% +"I don't remember ass vore in undertale" +% +"Have you considered?" +% +"Personally i'm more of a Piss Enema kinda guy." +% +"Come here Mr. English, i'm gonna fucking kill you" +% +"I want to fuck a golf ball" +% +"vacuum sealed human" +% +"it was a very prompted moan" +% +"I mean... I removed 69420..." +% +"pride flag inflation" +% +"nice pissing, slut" +% +"i like your mom done medium rare" +% +"cummus" +% +"you can enter mom" +% +"yes daddy take me out of bounds and impregnate me~" +% +"i have no idea what this is. i have on intention of knowing what this is. but i want to run a reverse proxy on it." +% +"horse" +% +"i consider myself normal" +% +"i feel like an a4 is enough to strangle someone" +% +"my fingers are clipping into my leg" +% +"I am now in girl cock" +% +"why did you make the cat so thicc" +% +"the allah fandom" +% +"judas apology video" +% +"the lunatic cultist had an intimate relationship with the eater of worlds" +% +"anything's a dildo if youre brave enough" +% +"bussy up" +% +"babies are equivalent to rats" +% +"Putting the “D” in “Daycare.”" +% +"oh daddy please make me feel unsafe~ *nghh!*" +% +"I'm fairly sure i've put it in my mouth more times than skye has" +% +"femboys are like vampires" +"instead of biting the neck, they bite the dick" +% +"Novichok mukbang?" +% +"When launched, the Baby deals 3x more damage" +% +"what gender is the american civil war" +% +"no? that's the wrong hole" +% +"you got that chungus weewee" +% +"yessss. i can print penis at will" +% +"what seasonings do you like to put on your children" +% +"vore me michael uwu" +% +"I hope I don't have to whip out the ol' latex" +% +"pp? what is pp? OH. THAT IS PP" +% +"mom, canonically, has used a dildo" +% +"an angel wants to give me a sinus infection!" +% +"the tip of his dick is also like, at the very bottom" +% +"please shoot my bussy" +% +"I love petting my cat and just getting an erection" +% +"steal my bussy uwu" +% +"shove a cigarette up my ass" +% +"Ultimately, the person becomes comatose and suffocates in a series of convulsive spasms." +% +"dont care if its a human bitch or an anthropomorphic bitch" +% +"I left the voice channel because I was inactive for too long. If you are a Premium member, you can disable this by typing /247." +% +"there are at least 5 dead bodies in here" +% +"im a sink" +% +"im going to punch everyone in the dick until im the only one in the world with balls" +% +"You can potentially make a fleshlight out of shit." +% +"ooh! theres an arcade in my mother's corpse! thats nice" +% +"my asshole is big enough to swallow a child" +% +"I mean he's black, it's fine its not racist" +% +"are you having rough intercourse with isaac" +% +"I can ink everywhere now... mmm yes..." +% +"So what is the point in being able to piss everywhere?" +% +"I'm gonna blow these children" +% +"I love watching children piss" +% +"*inflates the shit, making it big and round*" +% +"oh hey! my cum turned into shit!" +% +"Used diapers are great. Me and my wife wear one." +% +"you have to kill the others first, then the white dudes die" +% +"kill the black dudes first" +% +"Drink boner." +% +"My only way of attacking is shit, which is uncontrollable" +% +"My objective is to kill mom" diff --git a/config/openloader/resources/firepit/assets/firepit/tips/tojson.js b/config/openloader/resources/firepit/assets/firepit/tips/tojson.js index 2e85a2e..391541f 100644 --- a/config/openloader/resources/firepit/assets/firepit/tips/tojson.js +++ b/config/openloader/resources/firepit/assets/firepit/tips/tojson.js @@ -1,5 +1,56 @@ const fs = require('fs'); const f = fs.readFileSync('quotes.txt', 'utf8'); +const { marked, lexer } = require('marked'); +const { inspect } = require('util'); + +function resolveLexerData(data) { + switch (data.type) { + case 'em': + return [{ + text: data.tokens.map(t => resolveLexerData(t)), + italic: true + }]; + case 'strong': + return [{ + text: data.tokens.map(t => resolveLexerData(t)), + bold: true + }] + case 'del': + return [{ + text: data.tokens.map(t => resolveLexerData(t)), + strikethrough: true + }] + case 'text': + return {text: data.raw}; + default: + if (data.tokens) { + return data.tokens.map(t => resolveLexerData(t)); + } + throw new Error('don\'t know what to do: ' + JSON.stringify(data)); + } +} + +function flattenData(data, italic, bold, strikethrough) { + //console.log(data); + if (data.length) return data.flatMap(l => flattenData(l, italic, bold, strikethrough)); + if (typeof data.text === 'string') { + return { + text: data.text, + italic: italic, + bold: bold, + strikethrough: strikethrough + }; + } + + return flattenData(data.text, italic || data.italic, bold || data.bold, strikethrough || data.strikethrough); +} + +function toMCString(text) { + const parsed = lexer(text); + const resolved = resolveLexerData(parsed[0]); + const flattened = resolved.map(l => flattenData(l)); + return flattened; +} f .split('%') @@ -10,9 +61,7 @@ f "underlined": true, "color": "gold" }, - "tip": { - "text": q - } + "tip": toMCString(q) })) .map(json => JSON.stringify(json)) .forEach((content, i) => { diff --git a/index.toml b/index.toml index 1128fb7..b54ea62 100644 --- a/index.toml +++ b/index.toml @@ -4,10 +4,6 @@ hash-format = "sha256" file = "LICENSE" hash = "a562564b299a564bb9ed7d7e7ef6a10c6b35074e4fd30ce7c9896471d0913ccd" -[[files]] -file = "README.md" -hash = "bf3205760530909a311c3dc232032ff21a88bc24718aee65b3d2cc3bde4323ae" - [[files]] file = "config/Adorn.json5" hash = "6c90f63175a0d64b53d763b490b9929d734730d2fef7b215cccf104c6a8d8dd2" @@ -90,511 +86,1123 @@ hash = "58dc4e76a923b892715b164deed1d6c71cce9d84f5f7ffbf3c30b288c7d51a8c" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-0.json" -hash = "bada39f635baa8cfd5d35dc2972c009a70089753ddeeb8436ed6cd48ec10895a" +hash = "5ea12cb99e18f6a114ddb30e68c1e1853bf9162754307d7ce7a42d88cf6f95e5" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-1.json" -hash = "a546de4f89123519b642809bf9b2a21827173fed167604efa821a96f30ebe2d0" +hash = "ba84cf797b9112b051603add0ba465cfc68e4c6ef85a0327cc331f30b986bc50" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-10.json" -hash = "a0a78c58f1e676335e87beb53714149ea62f1169ab0a497f67e9f52b25b8ae7f" +hash = "144a678bb64bc857fc8bc08b8b0bc499ca98acc2515531761bedf5330780b5cb" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-100.json" -hash = "5f1b5d55079c3dae2fcadc918487f59752014c887c377e322777383a19addd9e" +hash = "ca4c414d45714cd70673d51172f6cabc660dd6cc8b1b3b036c32fd0011196170" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-101.json" -hash = "d26a0664da00a7419ac2b9382c9bbaee7945892c1f7aa2d7e5d6fb1ddda84eb0" +hash = "acd811ad425aded7b925a0e0aa6381178e33ab70a11038627f087139699b3634" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-102.json" -hash = "557a3ea44216a7bfa89856a9cd92668a2948ce4a45127828e0a9c63b666bdb1c" +hash = "566aabb26fc1bf6cd4035bede8057311fbc4b5d72de9e752b6d7ca625c3ace62" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-103.json" -hash = "f6a679bd6f5b3dd6b23d372f13f349bbd2602992495575a8f5f4670378f966b8" +hash = "19bd03c5de5024731a0abb19be65339c013783402f1e37a7014d561642021822" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-104.json" -hash = "e2164084d2c415341d840430a757ee51ba43962c2ea7a4c3d5645b744496b3f3" +hash = "72fc7d964f117d89168b4f1128f93ffdcb87c821db90a6e50db2bcf5b0be5f1e" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-105.json" -hash = "53be4e103822da5f7910639d7b3f7df3f314da17137c435b24614861392a413b" +hash = "826832c2bd156cff120387b5480a1aef556b4ef4437cd4d595882b696c15ed05" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-106.json" -hash = "3495aee2519441ae3ce4b86dec00f278e0d6381e7f802845386906610c04b8c1" +hash = "ef20d56937351d69950ee9825604e2043c6ac2b97f93e297056c1ddc5ca34691" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-107.json" -hash = "f01d73eb8b94b26e303817ff322d690f0e0ab061797adbbe9a6150844b330b45" +hash = "05716f6dd5bf47fe20ec94556949f5ab0e665b64c3ba073363c4ab18f87fb93d" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-108.json" -hash = "ac0cdb0bf93de4b07558a0df3d84db9280edc42ed50b76df93dd3b88af4f8a35" +hash = "8affd8a41f5dc381789cb91f238e38957f3c3b182ca54f8f47f19c5ed9afc55a" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-109.json" -hash = "cfb154b4a45a10de4361f66719a37cd2b2c5f759293031d0a55808f1380d2132" +hash = "a7c18fba2a89622a6dac25e6530fddcdf9a9ce9ba6ab419c74b9cff5383aa56e" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-11.json" -hash = "9dcc3fd65a67d769e138dca61adc6c90007f8a123e6c5108c0917dd06382dbdd" +hash = "70957792f4da00a682e58e029062d24d964749dce29b11f6d70d28f92351a282" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-110.json" -hash = "1bdcd7ed2bbe8f72c8efb21711ebeceae8c62ff75244c243467a0a637f93b245" +hash = "dbb5ac74ec3d1228b2189b9a5525f7ef37e9835acc76f00a226b9f3856d44a81" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-111.json" -hash = "9a4c50d32c27463877f33c7ee6930ad6f3d93a4cad480802bba932156e39a66e" +hash = "ad5d504f846dd732234c64919c89f5c0852ee228cc13fdfd2ea9e5aef6b65b97" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-112.json" -hash = "09c858d3a552fc79fd26b32af42f8e416759d1b1c03b85318ea3765f055f9470" +hash = "1b19660b4471bbd735ce695e8dcbe995dfff335e80b4866cec79c5c7c5dab50d" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-113.json" -hash = "ed5f66a90a6674a7431772dd11160140ec85f2c9331cb06a214748f48fd6162f" +hash = "5f2df7d6a78ca9a9c50c6f56fe72e50075a3b3a5f4e88ba6157aa2af6b64a64b" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-114.json" -hash = "75b6620dd5a54c2d40a133b5424ffbf211c0da57a83bac64ff9046b953226fb2" +hash = "7de6445450620daba3a247ee0f7c624e6282fb37856e88c83235d08de92d95c3" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-115.json" -hash = "4cec3a91024d70497659a64ece7de10673e222138297c6b12ca375c1d59aa54d" +hash = "24130ba1a24b6049c9534e3d330fb2ba476aab7a034484b372088ddd17510d20" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-116.json" -hash = "a7fcfc9a91ac147c8adf8038985c85bb6bc86f3a98d40c8dafe6e606d63c85a6" +hash = "850cfb8ba5a74540db4c2644d18de09966d63dd0ca35c8f7d058dca6ec827a3b" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-117.json" -hash = "c79f6668294edcadc1b37c1fa83ac7d90b3c8fcd6504a2b73ad21be5f2f6c506" +hash = "5d4ee3066844216023020fec42ed47aba0f34d71c16a91d369ea77c5533449fe" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-118.json" -hash = "f799dfb13e9025dfec79669ccc76248a33f5cff4c2d93a3dcedea6be165876d7" +hash = "7fce4b0f31d4725994aa3775d6fab1a19e1a29e87528c0f71af346ce93a460bb" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-119.json" -hash = "9684a6152550f3b903b4e8c1036177cda711219839ce02eaea0c82f1618b9444" +hash = "4567d915e986ca1bb1a16039d65ff8a7fa8740cbe05bcb375747e90b209408cb" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-12.json" -hash = "a0a4134e34681159c2298b58285f4af6c6eae6ae6a8fb1ed4f3c9b5b8d78ad3f" +hash = "d125d9bc5800c5f717b2cbaba43deff9aa2e6e934c54e43b8f0e18c94398d78a" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-120.json" -hash = "fc1a59df76fbae2b45056400584c6976db2bc05a768af940940967627839d2e7" +hash = "a56d018ff4e347015fe407b9d301babfe56ed77b0dd5e07f78ac17e7bb6bd5d5" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-121.json" -hash = "16a016d84ba75b6bbb10b761a58cf4443fd5fbd8dfab6e6e6c7aa884a0cc7df8" +hash = "aa0f22f6d31180b2133173937af6469c9ee716c5f2de7e2b096922d5ff80917e" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-122.json" -hash = "1b053b166944a30a04936de968c81331b217a5dea55bf7ab57a1279be66438e1" +hash = "12dbdada2cc5e1376ff95c222d9b153541a441e1716ee96f3718dd2cfba1b1b6" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-123.json" -hash = "ccecb044b9422af67f4f315e00f025b0118b1cd5160ba7858f18ebb182007657" +hash = "a586b100a02d5e3f21630a96b323dae5af6c304662c08a2d3c20804ebd3a384f" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-124.json" -hash = "6310c3c0df21dc2125f4569b4979b5ea4742cd4212418a5dea1d31c5530320a0" +hash = "b5989e8a7de56f9019283667c3e3108019b7d7d4a0af8fc46fa77667c9a2b0ce" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-125.json" +hash = "74e5c6bbffad96cd91cbbd9e34cb517bd173368ebee87b306aa7cb84d7000d09" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-126.json" +hash = "2629cdf6423b7ae11be6c252491cd9853031ff8b208d313b412e1f21cc4590b0" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-127.json" +hash = "63813e9cbd1f2c6b1608b84bf5d6d5e550b79f976bb10ce5add6e657a87c83cf" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-128.json" +hash = "ca5daf32e1008b01485f80e3286916d121167cc716d3535bddb13cdb0391b0c2" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-129.json" +hash = "36d73ed2b34f26656d362031b6e4fabab176bb59be3ce55cefaa53bbe49e404a" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-13.json" -hash = "bbf37900564716d630464db61d96b2efeb07d7097d120f70c5e338fc67b70e78" +hash = "dbfee3c08d54cdff87a441dca603840666e069d897bb57b4acf492e9dbce4b99" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-130.json" +hash = "c0a8d5b18df05b8ca18d65b8598a155d4f6d394b619c7b6adda11e59c8126c35" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-131.json" +hash = "3f9b2d22e065c4e90ebdf46d1441fa3e972b265c3e9fd86cf91dc7fa6743181b" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-132.json" +hash = "dc306c29d722614fadf34709250fb8f0f87d093e8e131ce25419f9bc4561e9d1" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-133.json" +hash = "026df5338802466fc49585c3042c48a826f06599a1e50402c22922ff8f641925" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-134.json" +hash = "5fa9fac58790d212ab9bf1d0443cac4fbc4a5a0c857a2cf6fd501ff958a6dd86" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-135.json" +hash = "0c77eee00c33e89c898287b1c08cb95aea7893738f1a0c8206787ff5d5810b17" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-136.json" +hash = "6bb785504b0f3f93fd2d020ab4ae2a827c947bea8ee0c6c3d58fa31600145963" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-137.json" +hash = "d9f232ebfc13dbfb07f63be8c5a2ffcf3f4cea9d913096cc4302b97804ace32b" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-138.json" +hash = "06fffc637b66f124a1765c511f9bd41287d5fc1e1fbbcc21ff61f3c4360d20df" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-139.json" +hash = "f7a59e8fc10d56524fa246dbf3d49835314bfdb9baf83368c00a1ea172db02d2" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-14.json" -hash = "0ef04121c01c7f2a4925875259ea5ec9bfa7e3581850e5d701e1177eb5f51c89" +hash = "bfb1312d4224d9a14ff622b846e21cd150c29661d2a4a8807fcd5450899a3431" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-140.json" +hash = "7d3b7f33eb302cd1a443f1a70e0a3a8a81dc3b7e758722b0e6da7716f16499e4" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-141.json" +hash = "077c36ef54258b5a458f1167e9970c1f8d676adb2145f3ab7bb592642f25cff4" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-142.json" +hash = "edcbe85cab83606a8a8497f6b7a5cace0d6c691d45a0ebeb7db1670987054539" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-143.json" +hash = "6182973b9f708489f2185b07b392214324bd3420be9ce6b216c901f5354674cb" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-144.json" +hash = "dd026e0bc3a2cdd9901b9fdcf7ffd31967ad1e42f6594629530218b6de382ffa" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-145.json" +hash = "b553cde198e98850ae34296f3d4d63c29dd525f0987e48aa1d71442852987344" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-146.json" +hash = "ae8fd9feeef17854cb508b3aeaaa49eaec08b7aca6673e82b80d74f79e88bd18" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-147.json" +hash = "4d4bd759122a033a244d91e97ad3fd0b73bd4b5e6328c2cd4a9a4d3ad3fad206" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-148.json" +hash = "015ed1fe225aa757637917872debd216c765a6b6c75edd05e929f23776231725" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-149.json" +hash = "8b4bcd37bced781fb636c4abbcf13056e1dd3576d50342abb1ebf73dff71ccc0" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-15.json" -hash = "a84483acf4aa76e7698016056098c67c699628ecbf5b9361f97a3bf0f5f8e43e" +hash = "2261e4c28ff4c4f1cf9f9d65f0df81428865adf00140f081e3c346d7e0dd6200" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-150.json" +hash = "3f46334d91304a1793ddaccaa584ce98ef14ab11bf30ad2be5d68c8a57406490" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-151.json" +hash = "0310fdbc3abb3d9f3ef26e6d1d2540154c442a1885c341f87dcd69f582eca111" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-152.json" +hash = "ab953f97056e60da0687b44990b720650e5e1dc8e2b37e8b7ba6f0bfa3c40c47" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-153.json" +hash = "6367170b95382fb9f729c71b7c42f8cab5262d4d1f5ac03458b25da3063c6ddf" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-154.json" +hash = "de0aab4ddf7cd3b2bfc3722850a57d7ffe47b72a61817dd87e991d25a442bd9a" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-155.json" +hash = "574181ce1a6952face0a8808f3dee4f8d61f9dbf700e8aedf151906005b2533c" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-156.json" +hash = "2f1642d9f349b6014e77cac1760ca323f45b7d3426b5e0230991fbaefc42864d" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-157.json" +hash = "144ad545f4d07e398bab41c29edc419fd737a02e13ee717d5e9f609bbae93600" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-158.json" +hash = "a332ad2ba77dbcf313db967e763de01c423c403b2860633876c5619862c9759b" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-159.json" +hash = "cc9f36c95df4bd5ed03ad4f5f245533375afa5cdf3e304c80fe231db7acb0400" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-16.json" -hash = "e49fa1bef6e3bd29cf643159a562fff8d03f8ae0af04857780e9862ea87a0d3b" +hash = "1599ac4dc8b9cd6a0e1c886479ddba982f3da9bdacc07fcd061ff38006144a97" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-160.json" +hash = "650dd5c655957a859240bdd7ec81e80d9c6f539609292c2d9711c400f772128f" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-161.json" +hash = "cb160caa56978117f2357564b3948a1e42acc2b763d330053ce3671b37106617" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-162.json" +hash = "7bf05a49c1dee010ca027c001d56c22f9301d7080d01c2874ee0b06aabc8f9c0" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-163.json" +hash = "0494816d3f961005703935ff0dff3b6a8a3cdd27c32ad186aef503ea528ac52e" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-164.json" +hash = "cacb14030b2162e9a1d87e9a1e62825c64a8590e16d64b31ee3a676cf1f7ba7b" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-165.json" +hash = "188e5573d4303013880f805feb897d2c8fd752fd46e5e01cbc713556f5a2983b" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-166.json" +hash = "2b73cb4dbb7efe62cc203592eac54adccabb2fbfbe7eb0e4679a43c5ebddf6ef" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-167.json" +hash = "c3503b12c5c423c17b85b89905ef6c8412d8792f32bf1218a8d3342a847ba044" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-168.json" +hash = "e1694c13a4a53f098ec99c5ec853a447a124f625012558030d96b07da0f0c930" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-169.json" +hash = "8f996c9e6b8eb343414c55287ea09c3d7aa09bb91077124c3dfbfd0b74757f8f" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-17.json" -hash = "49d5581483334dc27327372a8eeeed4ea3c5f3a937c6c18e0fa4158602027e25" +hash = "6a364670defce1842fe31404cd4780a05be533a0fc207db042b5eb04e2583fb4" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-170.json" +hash = "b23a1e37001b0e95600f2e9c1e7d2dc243328287fed68f97f0e6cd8b4e81ceae" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-171.json" +hash = "583f72d704f0ec2906c2e1645c47f1c44c8a156d8fc06db71f0af0aa4b62ce42" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-172.json" +hash = "7189053a2d7b5e9ea4806bd0c4dc37ce6b1bb9eb88b283591e752df97d0d14de" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-173.json" +hash = "7883552d2e65f4daec38273b2c8b1e106fed5d1f17b3facfb76a9004d1a1f6d4" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-174.json" +hash = "332d9cd7e9b3e7f324e95c78a5be4a01e802b07ca9444f19937a75cef645d613" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-175.json" +hash = "02b4b453f6ec618eb0863a8b5bf063741afa79465d2122956a097370d30b810c" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-176.json" +hash = "914ea2facc708c8441b0065c501b27fd637ff366cd0569d4318b90e8581c2705" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-177.json" +hash = "f167f68b6e680c30eef71fd4922d666be6f1f3225d87ec90bcac1f176d0c66ae" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-178.json" +hash = "f44b609a4e4eddb90fd015597ea20fa9b45e5933d8e7f031dcef34845625e6f0" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-179.json" +hash = "b1c784558962e95091420400d377e8e6ce66a4876d25cade00128b02ece20082" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-18.json" -hash = "4a8e7cd8508eaa39ae5118cd420ed4026d5e06b3b562c04d88116080676c4802" +hash = "c684e5ca2d58766cdaff92828bc7a291d08cfa86ddd301cac83f65ce9ed8dcf2" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-180.json" +hash = "12bb1b766a628db244800a75fb51ef280fe7ab024a8d54292c1b00ffd5eb8e6c" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-181.json" +hash = "477680140acd9162a335b44fb5430bb449da37f98bb7d6065d461a2306e5ddb5" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-182.json" +hash = "916c4922843eb4e55752e81896e32ae1cd3bdc66d4ec4941bc01209078b2c5ec" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-183.json" +hash = "2052c885fc51aae9f9bb1ade392735f1a8852a0a827a47f4d8c32918cea096c5" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-184.json" +hash = "b7420c9388e47e466c9bd2e5afeefe3a098a6fc104891309e7a19eed32410168" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-185.json" +hash = "606e5fca51008d5bb250e9959d8d209b63ac3b085fa90d85c5bb208518067335" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-186.json" +hash = "56f03ec853266ab887fca7c6cb82cf52b6fe09d0b15e45662c7ec1b266a98855" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-187.json" +hash = "ffd53c1213364e5105a797e7f7c59988913dc958b336087258e0986367c6c9f6" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-188.json" +hash = "1ae7c2704cf9d5ad3688653776aa67635814fc8d64ee0baa8cc83307d72f5a56" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-189.json" +hash = "8131c02b0d3e968b388782271851e8cad3d98e7f38747270190d8ce25b658551" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-19.json" -hash = "8cb609f0727c2dc016145b1dd4dd5c4cd219db29d06fb3c9442b8976f2f402bb" +hash = "c35f5caeb9d26a1b2068b39bb377b7704e5ccf2c4f762cfed578fa8006579c80" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-190.json" +hash = "cd4533e474c90f672855f7c46a6f3b48e07bd59036e5a8f6e64d2a6952d3dd91" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-191.json" +hash = "e25a21cd8f4e72cc03f74af22a93f4f4d350157bc088c8dca3c27eb701d72ea8" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-192.json" +hash = "e37a2cb7701d3e0047d77b4447dfd820f010f535c79576db8e953c68343cff38" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-193.json" +hash = "3eec2698eb60206d8bc627672985124d335b2e0a8c51298aa7c1870a53038d2a" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-194.json" +hash = "ece6befc9642905c10ab2698cbcee66e3a553a4ebe1056493798995c30e4b90e" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-195.json" +hash = "7d80269c8cf230b1059e0b82119d6fbf7ec343ba7e2d923b382261029dbdfd26" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-196.json" +hash = "78411e00c21c002814a8ffac7d6e45bf029f912fe7c7af29cf674cf4e9b23154" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-197.json" +hash = "5c21a499b63d513d0156bd3065a62c57aadcc44973e0b692f2e5f33c9de69a4e" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-198.json" +hash = "63e183af6840bb52b04d4e1f7c3be93554f1452b518692ab0d6699fd422af7f8" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-199.json" +hash = "c2fcfb2c9bd3630bcc8ab4f7589e39568e35d8eef4b0886762fc0668195fd173" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-2.json" -hash = "d1916b829c24d7f848192d06cbde1cced4cfbf8253de29628b897e75eb3cbd50" +hash = "92ca6c94b1ad620b54f98a364665078a7a760501127d3a26139e84c93352ea03" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-20.json" -hash = "35472da9ad06ff1bc0f0a130c9f0a0f3ab2f1622035c034d8a5f48ff8fe9d708" +hash = "0f4d8b425b40186d4f252eb6e130ee3da88f4cc39bcaf0758f31c3940c2b80b9" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-200.json" +hash = "1dc65b85c3742c30179507b9c815e3ef1b40c7943aa7035c38aaf7b29b9d77ff" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-201.json" +hash = "f14c5b3aeee6e92156ca18585eda18882acbcde5288197042a9188d895a6b1b1" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-202.json" +hash = "91409f6411d15449261b393b28ba80f224bd3b0a229ad220027ee1c6e2e6c4e7" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-203.json" +hash = "6bc9168522101319d494f1e705b03375b9e3cd76019895f808501e4ebb1b8776" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-204.json" +hash = "281cc79eb977d46e560e971ee7a9eadde519a00ecfed1cf094f02512600aa3db" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-205.json" +hash = "bdfbdd8d87516fe07b09946b5487e8f03328407e2ec775004c2a20c9fa44a3f5" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-206.json" +hash = "62435122c8db88cc44cb5280e2d8a3cfff9b593df490b4b47387bf4aef1f2578" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-207.json" +hash = "edea2d6828acb15107afbeae0c93371d41e48acba94632643a88410c3edbd0d8" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-208.json" +hash = "3e08ea2586445bdd79f363c9b27c4ef94f4d80b64ea550628584598732d19705" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-209.json" +hash = "a6ee61f9ce9d0c17b93724a0fa07144f9c9f717570053e716032b2b85275176e" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-21.json" -hash = "2d021012643f22df30286de8bfe5ef7ba08d1c7c58e36dbf35c1981129a9a0f8" +hash = "23eeffc587530af135e8d2df80473c06cd4db288dd0f93a55c983f6a24135900" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-210.json" +hash = "3cfea47143ce8ba4a3c1f4b1cf453dda436184ad34f9d247f5d726a9addd87aa" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-211.json" +hash = "ead83cdba362a392a008932f2a8a26ffedcff301727597fb7262742ce19ef6dc" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-212.json" +hash = "4b0846c18fbced4e79a74d217c7d7e6f464ea7548c7d6f17e1ed80dd21ae872c" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-213.json" +hash = "1bbd13adf32825828cc87426435a6b7e0c9371b50a28d901ea4b99c2e99ec59f" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-214.json" +hash = "ff8dcfc67d54e195c04eea3f7453bad68840ad1e34438cba14b1ea8f1d82f7df" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-215.json" +hash = "4e6e5f7887a7aaf7dcf2ebe45f588f677a182b70baa59bc6ecf4c1a470772c82" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-216.json" +hash = "32d129db09d5635921dff2191c708035d00fdd9f383ade7ab87db75297fba1c6" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-217.json" +hash = "4eef893fd638a05da7b3a37f3fea7b5b97dcc8422a44a9a1ee30f1e11856056d" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-218.json" +hash = "9ed12cb02bfb6625ffacf3d60442c38a62ff5b3b31c4c531791a4b851bc6ae07" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-219.json" +hash = "4e5a687e7225bdc78812f39859eabe37cd11bec11fc2e9e3a67b6a21fb56458f" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-22.json" -hash = "915582b553a45967f3f82e5d8414b5ee2e5e2f04c2f657016b57aa579a1009aa" +hash = "a0f63492e421b2363e752fbe431c2fefe2cd61bcb96e514a5acd6237dca8dac4" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-220.json" +hash = "f976dea1619e4a38ca82318658c99691db9a0e99b8e7d18dde03c359a7f11e48" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-221.json" +hash = "4231338bcf9f34b97dd282b2e457668f15aa89a1efa2aec3310faabf97e1e6eb" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-222.json" +hash = "d3c4ea90673538df91ed20e304cb786b5aea81951eb8494852ff2935e04954a4" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-223.json" +hash = "cbded3d1b89fda6aed5384d3b4bab00206f8b6416bb8254ba781d0d46d15eda9" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-224.json" +hash = "24ceb33ee519ab1d82d5599af515ced296c50187ffd7b9732ff177d4c35b7164" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-225.json" +hash = "d84a23fab025d494d2369260a3530a6d82968c2fcc2c200c058e616a2d24926f" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-226.json" +hash = "9d580202fbf93dd38ee07ce8ca887f8816841cf9d97e25e396f76f49bea1631e" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-227.json" +hash = "253142f4b1824e00c8713333e9ce9619242af729edd5560182447e423d7fe84f" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-228.json" +hash = "7f3fb3d2c2e68aa2a95d878367b9b6fb6393cfbbef2114dbae7d8f1853b07d2b" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-229.json" +hash = "2af506cbc5fbeca58a3b575b0a613b0cc9baf22d2476a9b022d521e4d50518dd" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-23.json" -hash = "182409c7839a3024d35e821dffd2aeaae3f0275802854a880676a02d3a00ece4" +hash = "cfc1c0bcb9680c60033def3192e4125e6f3f1441e943aa3c8f05d77d7adcb958" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-230.json" +hash = "7d4119c0d7dd9a31027d2025c5dca6b935125edf20935796b2234c2d58f87770" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-231.json" +hash = "f93f2ea6b0f0adf78f38cc34fcbe7c210d8fa1909186c812726f156ca4772ac1" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-232.json" +hash = "21ca94e23c3b6b036a849832bc2ec3a8a25ff8124e325dd069e7b8b2312b5023" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-233.json" +hash = "ce383c90b1dd74a3b0a67874ccc4e1a4713ebf9c8c369baf54b7a89c2c1aa164" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-234.json" +hash = "e5fe8473dd6b5c357d14d88e014f8fb829b65e761905063b5f50b539ef932442" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-235.json" +hash = "13c4c00ab7986525d1f91d1360a2fe76329512fe7fdd6415cd7ad61a67baa491" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-236.json" +hash = "fe1460fe4c605837760599c9143290cca7d43383c02471391715ac351102c7a1" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-237.json" +hash = "be71201a85bfcc70d1190efbe7186ea866c4f8153804790933e5b20be4bd58dd" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-238.json" +hash = "76e06ead8245687dade1d0ca4dd516f46aeebf9fb42589263934d975ef8ab3da" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-239.json" +hash = "032c85dd2d3b3ec350d13207211e84b8c9e4c664809e5f0cf298689cda55b375" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-24.json" -hash = "404695d94dfe6acdb96df45e5eb6ee69d30f8b2cab15c3bfcac46c9ccae19558" +hash = "64ff97fcddd4aa42279f1eb20bfbd80ef2eb0b287d631326adb6f02864c02aa8" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-240.json" +hash = "f6e0d4bdd13ed41278da2a1c95248ef340f5367eb3e027e779c0866de36ebba8" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-241.json" +hash = "7e5c0d5dddbcb92dc94b62a2fa402545dbf8ea97021aef179f4663a413a8acf7" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-242.json" +hash = "1438c366da5b698df0cb8f7e097023d2c27af116d16b7d667718f32a46d55949" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-243.json" +hash = "a5f8630180c2034ba56f0e8be3b015e1391be13e291137725b7e1253f175dc4f" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-244.json" +hash = "c29919e38f370f3dbbe6eab776777ce0a352df00688061b47bac57b3e32981c6" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-245.json" +hash = "61beaf04bf0def6e91f114c61a2225e101277d1bc193832fbeb8e340c7ffbac9" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-246.json" +hash = "5a4c26e0b55317b0cd6342dd0fa744902e93ee11879fddf4e4485528f271719b" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-247.json" +hash = "5a4e34b04227f1b99cedfb8e31ffef835e10ae708c5a1f59252e8f989a1b460f" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-248.json" +hash = "34c9cdef4441a86b9464e79fcd68581f0f0832afcc3dbe7404164a1453457d0b" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-249.json" +hash = "4a94108735169b80c1fd28ee75a540f6172c7e9120c847de42029793c866e5b7" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-25.json" -hash = "a94a06033cb014e0e9bcc231237cd121cf200dbb53eb7307781fbffe8d917519" +hash = "340096a1d3ed30160dd067c8ff01f4f546bbc15101b225d2c46f20f69a97746e" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-250.json" +hash = "157a42a90607f85872f89443c5313ad8550f0ab397b4853c0eef4585368f06f1" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-251.json" +hash = "cd4492281306eefcfe17080032a92970cdb6bf5b8149dd5422953b56772fda05" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-252.json" +hash = "481e72716db9a9e8bf73bcb6906f6bd578856773b7bf33be3e99938c803191c7" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-253.json" +hash = "fcd53e7904eee3eddf8de33a4d052c327c88f0bede0d8e15b8677da5ad66da29" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-254.json" +hash = "bf232d541c2e385b757ff72468eab4e7f7d21b17232357fc48e1ac398177e9bc" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-255.json" +hash = "fcc4ce0d90e60a61cde940fd430b6b9db7355fb5b575a4914c5bc73fea3e595f" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-256.json" +hash = "8b7e7789ae017608154b431f60792eaf0b50207f3ba016b779a9166bcf912597" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-257.json" +hash = "4da696d45c0742aaa3155f40d4ffd3658d4fbe6398fcc7e6300fba2326b20064" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-258.json" +hash = "e735c664578cecf1c4e1fe393e6847efddff723884f617278af87b170d56bec0" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-259.json" +hash = "cd5c1f5c6d492b1932bb2be099fad991b2002fd60f1c17c03a5a669a67682b80" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-26.json" -hash = "178a2753567a3dc588bda4c0826d367ebedf5e2d191a3fa0606c710a8b0c3902" +hash = "e1da60326660724bbb1a7417833e1b3dcf9ecb65eb59f6af3704d2f7ab443e23" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-260.json" +hash = "bbcfd1390354675f1a58298d7c72f443a1718c2fe47643a3389fba687f4a058d" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-261.json" +hash = "22861c44ab7647e74bac276f6ec296c2da687938a86f7756687c4c92713e7761" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-262.json" +hash = "bab09d80db235285324c6e9d7d66ec7d69609429b232fb82fb49c3826e852e7b" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-263.json" +hash = "52b866a5b2707683330836b36b176f4315e2b5e0750aaa615ed28a8790479997" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-264.json" +hash = "89049a08b6ddac751a15a75f8999479bca546d5debe50ee39b17255dc90d95af" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-265.json" +hash = "3f219689a21129b37f72c632f1dba3d344d4ea48260d28044e5a7c38495cbe50" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-266.json" +hash = "f24781af68787e7ab70d72092b636694d8263f51eae70781eae92731d95a2366" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-267.json" +hash = "c48b9ea0f772f1ff6faa7d6e5ce12a898bd9c2ab6236c7b968d85b65c727ca19" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-268.json" +hash = "01da3f375407547572faeaf112466835f900389d08d5ae5069ece9e839a37b9a" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-269.json" +hash = "50e9c7aee7a9b4eec9ab23d6e683400840b68fd3f930728cc4d2c97f053a68c2" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-27.json" -hash = "7b2cd1372414abe3790fe4be4daf2223a32fa867e5a58a83b0e12b60511d893e" +hash = "f2a04b04c014233118f886ca3084720c73e909ba8b1d09ce9040bdeaf64f509d" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-270.json" +hash = "c363c5056b9932c189904d2125c30c4023c022744cc113e732019c2ff7793246" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-271.json" +hash = "3e1b9f08c269bd158ebb9c1ec9d8b42865f9dad977b874560a0583a676aa21aa" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-272.json" +hash = "355336b796614ff2a6526ca4d8f1800980d8c782d11dede39a642d7d648a700c" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-273.json" +hash = "392b1693ae9b102cef099a4e2933998d862b2119e540c0ce7344e281df26a2b3" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-274.json" +hash = "595d094f2f2275b6f22d2a14a0a76f5e7f81868783a5afe95788fc4276deeddb" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-275.json" +hash = "1b22252e7ff8f1e036c8483e3d8dc472e7bb3f745dd6b1c315bfa820b817fb09" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-276.json" +hash = "464d3c3a3885fcd4b9b666927fd4f881fae161cbbddf00d95d7f476b84954124" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-277.json" +hash = "f85c626619737004950186b0da0ca252b6fd4e5db851e9bb5a0d6dde3db1a7fa" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-278.json" +hash = "02927073e39c2520f1e0a3acc851d82d14c587013130084aae67cfd0010bf2e6" + +[[files]] +file = "config/openloader/resources/firepit/assets/firepit/tips/quote-279.json" +hash = "26f89509f237e56fcac950a63f9c9bd4798846a516dfbb6eee9967a3ec0bb001" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-28.json" -hash = "df07834d33e0fb8e03f65522be1aa7a9ce057e63dd9e2c4c0d5b3cb131f7b483" +hash = "4404133c328b56a17bafeaa1aeea66c6fda914525dd83c424af76d69f340447f" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-29.json" -hash = "1545295569cd85c670e01f5a866a196550b81ff9ead133ec8860fa515e298af4" +hash = "f80f91139f6bc878060f48413dd61dc93e58649420b2a0098e5774e520d8150a" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-3.json" -hash = "99a1d63e989a3593719d073712fd419c4acfbcbc22f76c75850b052e3fa587bb" +hash = "01ca95c31819451bb94c20a9ac8da53260b66b5ee6ab8939b6638bc3654a5ec1" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-30.json" -hash = "b10c71a5ff3fb6335eadbfe40baedf0b0ed65e87e40b1b010788d5372afb4eb5" +hash = "d0e780d257b2ba9c7094513613e467a20dbfd34092ead10c9fa5f40d5a2793a7" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-31.json" -hash = "b7ea649a4bcd904fa50858411b75733076bf1688d5051e3c739fcb8c3d4aeeec" +hash = "64e9f8868aee04ee090b06b561df41bcb78994e24a73291853d00427d6412f11" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-32.json" -hash = "23631a7329892c65f1298876bef7b8e71549e1432da3f5d38dc0c39be9b8f6ab" +hash = "0b85a45c6c88cd1ab7b81b34cffffd95894376435f205e1d088a8861f30aa5ae" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-33.json" -hash = "3fd22dfe93df23e6cd1b0e9bad11795fcac4bd063434c34ac77f08a2900f6166" +hash = "59a0a40ce5a06511772a289f8c0cf006b460051d17ea2eeace653c5c527739dc" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-34.json" -hash = "276ff9c54a7be41d917e322b85c938da2cd2796480e35a32d73558457f49e1a9" +hash = "c697d59001bde76d627cf86560baba183492b84d6b148bc012f2b7c5c7aaafd0" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-35.json" -hash = "98becb4f0ade17b5addcbe485c887e909e9b4ade4a580569efb5e3fb29ac9dd1" +hash = "3aa3d8d4f65e52ba28cfca39fdc8f624f9653396b2c497769707981fbd08ff87" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-36.json" -hash = "1d2505922ac481572a8b778046ed4e4448d4e03f2e5ea5462238e27b4f2fd093" +hash = "020844dd1e599cf713bfb4f5f70e0e6d57964efc24363fa1212a59c79292fcb1" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-37.json" -hash = "2697618a3774b030fb14175faa0cc029da178f2efceed39fb75012eaeeee2f76" +hash = "57680fdf981453fbe4dac24a047e2b5905080f6977dab478f0ec858f91ae1901" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-38.json" -hash = "66bdfbbba22badad1a37546edb7e69ebbb0afd81504e9820ff78bbfd75509c89" +hash = "3a093a80062c81afa0f4c5850a4d751303e0e3f09c22a42bbba38703449db401" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-39.json" -hash = "a94e1127c30cd85a0f57b2fe15719708dcc7bd4a92e59fedd2d465304a8afc1b" +hash = "83f3fababd490b7115788f1823ce1c84bcebeb2b53f603069b899bb4570bf3cb" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-4.json" -hash = "b09ba254e665068e59cb8536b0776ca514aaf86167c6101ccc3a48cd12e185d5" +hash = "0beffc29bd650da8bc4adc2a6672d5465d75192fda112c7364f6055dbdf8500f" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-40.json" -hash = "bc1d6cc7c0cd8892c40de3aff3da2a77ba504753f55434afb8c69ab2847e1f37" +hash = "c61f308011cf9490021f80d8055000398697985e86367e1b283da9a3fb8254be" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-41.json" -hash = "ee22697b723a9235eeda8a723435bd3a62a8c298e707c4d5d0852270f598a47a" +hash = "00c998d4abd0a8d89a08f280978073c773069e11b1081f657f203f8c922b7454" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-42.json" -hash = "840f8edb9b6115a91c8d614d187b3d58e9c64dacfde7d9bf573b91945bcb9250" +hash = "1971f7ec2311421bb443999910be032ece5230658ea39a111b324bca998c00db" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-43.json" -hash = "8dc5e293cf0facd05f81ceceff27600838769569a4865d0d5fb39254a9a9b651" +hash = "309d5e9ab91c197cfe44de504e337e28d641a8ec3c0381a002a736a786c910be" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-44.json" -hash = "5dc8ead58ed17c8a71760ac7eb8a128f35d9fccab5b56c18ed77b62029b138d6" +hash = "62d56cce5bd04ccece87eaf989b0cc815acd0d79e68c9d5ecb36e3906aae24b9" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-45.json" -hash = "9157ecaf3223b55d881fbe9bee338e555a7d7d871520b4650930ab7a7366ec56" +hash = "60cbc4812792d3f24955848221b4f99ee285edba2da735ed8af46ec4aca52245" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-46.json" -hash = "9fa004d73464d5d8097e11fc64f296c3d1aca18c8cf7e11ecbf6c8b6802295a9" +hash = "e38345cf50954c8cd011099078b49b9be6825359e2be02b84bb7c8c4938637f1" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-47.json" -hash = "3741e6df656b6947d72eb98de0a67caf873d25cda186fda0afe0968338cad3de" +hash = "f0f69786438a5207013e4dbbc6a124eb0eb6ff96cdf834a171c45e2d09b5b6bd" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-48.json" -hash = "93c9daaac41ba540a67e770dd695aaaa2552f0f4f2bf14fd8135ce1a4a224b68" +hash = "cbbb53f327d0981b40109f33efa9a31e3e12c712d37759f5824511682a5d9e16" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-49.json" -hash = "982a6c9ee1be7ff1e564ea849aa52b1068d04d7bbaa72aeadd661c44b5a162ac" +hash = "19f12f7ec5cc3a11c30ab809d2161a738bbf338180355183942f9877f6f3ff3a" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-5.json" -hash = "8b50cd35ae705226d578e2b990cb124030f49cbff6bd0202df265e8d28fcf022" +hash = "2777fa596bda4b0d2e6aa0f337bb82a757315971777d5da2bf2efd426192bc91" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-50.json" -hash = "56df9c507ab5d6b81ab6a0cabc9b9501f2baff9eafdea7228494ca00e285aa46" +hash = "77596ceb2f817a23706791e1d5107fa4f3df9098676a5bc14c219c06ed3a8904" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-51.json" -hash = "e2ba630f014c2d9dee1340745c25f35de8be688485dc78189e1bc3a3c5fe4439" +hash = "a5fc9eae7c07da542ba66631f6d1a2b0de4cc0cf961cf7b18b1995a57c8cbe89" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-52.json" -hash = "1ed7a0afbe1b06d6865bd0b2f1ae14b6209d027f8aca736121e0ee8126f64cc2" +hash = "8f89557911d7916be6c91ed3c5ebb34e8d64ae559994f4b41aaa2dcb49ffee64" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-53.json" -hash = "d060664274dcc6363629f34925288f487bc696a67ce87b97ccc9bf5a9ab21f6d" +hash = "738775d348227ace5c958cdbacd8dee8755234302943f4a74489319f4814c7cf" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-54.json" -hash = "d791eb35a3da7901fa468dde5deb0f6e2fb88c1fa005cf484bf7360e431b4bbb" +hash = "5c818d50afd521168f352976515bbb1c0006623363b43846cd5eb528fa79868a" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-55.json" -hash = "71fd7dce5fee7fd1367eca468349414ac3427c77f8a077353bf1a0cf4af0faa6" +hash = "efcee756407fef058f4869c54b2647cd37902664e63ca384ab261d9d1148ebff" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-56.json" -hash = "fd7702a0dbb8856fdc2a063edd0f2869d9ffd8cd148466949f53795070f460b2" +hash = "4e546dc3c118e3debfd91392d954bde760d152687f692af705c2bfe690a7c993" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-57.json" -hash = "8492d50c64ff72d78d36f4320cb60f3a5b5b99ae245fa3b1d855589922936639" +hash = "d96c413f9ef5fcbee268a2efe78d94b5b2c09d65d6a4e8296ddf9c23c550ed25" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-58.json" -hash = "f548d6d0c1b4f0ddf10cddf40c857530979e335ba0e91d50844c57428b6dc4cb" +hash = "58d6bfeaede20369e90657b99ed8a6e80ce9b598920e5b56fad6ad86aaeeabda" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-59.json" -hash = "0a807de0570cc92e2a9a19c543c995dc1f651ceb495b19003c887ee47e818fea" +hash = "d5b93a8adde99cf518c23675dfe3b2dd54d4a14da99b3953c96ca027cd4946d2" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-6.json" -hash = "fdaafb185431edf3934d2f052bd64e47f136df228cc05282689e5c80760faa57" +hash = "ab1cea1af6896d13061d280a92e598d07af7ca684776eee218cd9ce6bc146a40" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-60.json" -hash = "7b1973bd5f74fead38f2a8e37548c27a3ed30d5beb84ad462130b99610c57d41" +hash = "fad283f44538294a8e20b0d3b8d2c2ad5fb405be4a23396bc56ab6fecc87768d" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-61.json" -hash = "ddc03476541ab563e81598e39619aaed9bed21febd1fa9a38b498bdc87f49967" +hash = "87da4ecbda14fbbd3c04bb631e10eaede4262c03b038f22e33d39582fe49d789" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-62.json" -hash = "60a0ceff0f4bef0d41c8f2e41d05343cb6501738485ecde77661a3b2c81ea2ab" +hash = "65c010c07c43951a62fafc545f76e8d79281db8be6ebc558e811832804eaae4b" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-63.json" -hash = "a388f7ca06c0b148882ea030996886aba3357969fd8491e05ee62a1b104d3b6d" +hash = "46915bc0aade364b367af1b8598d5c82e420cb8871a0daa10a5d5e4309e25011" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-64.json" -hash = "26ed89c0363e22c474be771c15572554c024581560084a0477a2a2eced205020" +hash = "7abfa96e1603f88ae02fceacfb51961f103b814a48f45f1f289866dbd0717949" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-65.json" -hash = "5371a3f235101be24164042246a2db6dd38b60faf1637968e96600d7b3052e33" +hash = "c3bbd13f1be78d6e687177c8e6b92d73756ad7921ba5794940d43a23c8efcc27" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-66.json" -hash = "d355891e3ab6a212632951e9bbb0d9c15280166e9fc94dc3fe43c9be423bb7d5" +hash = "d55c5e93d077294d5c73e3e794784536de2fe133ae72acaddb81f635a8c41dbb" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-67.json" -hash = "52391a48c4880709bc7a01e88ebb98b40195c5dc1d548a815eccee4013f60a76" +hash = "970b268a2fca46251ceabb4acae672b4fc1c07e30740a7a3e9b8985d51c4f3af" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-68.json" -hash = "3d09ed118903776717e01d21237e4d56057ba23df29cef160b0931c621d436f1" +hash = "cb1a23b9ed8173def89e52c8030e07719358bfed1e1a867a0e3f1e719b6cea05" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-69.json" -hash = "db1ec4c83365be9305899b7cb1f5341789cebd7190e9f9fc479f3341c5b74e68" +hash = "44a5bac444197360156023906e54a1b443058bc84826cb26d8a911360219ef46" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-7.json" -hash = "e22ffa27fc21523e6996a97aafe41340875f14cac80ac26887668301b43887f8" +hash = "92dd6ca28345ff1527d7e6513ae8a8469deab9457ae568078f7b2d83e4ee7d3e" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-70.json" -hash = "d6a46065f65ecef5c387d18d2270ff5c1ee51724e68864640f2b0151addbbbd4" +hash = "804adb615efea0b849b64d86f1f9d64e20f7d3730e51dbd6269c61f244d8f74d" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-71.json" -hash = "17ea01d374ceb37bf8dac425bd1f0154740198c851b44eeec771501afc2c30e5" +hash = "828dd747cda97112320861f5dcccebfd3454ca606d40ac1047a5e4ca8c2989be" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-72.json" -hash = "69dd84172e340d08d58ae304c31e744033b5fefeac2d5136d1eef26f0320d743" +hash = "db0286d9cf929de29b461a8970b588bb2dacac3dcb31fc3f2370e19a1a13b781" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-73.json" -hash = "6bc45c3dfbf9d46da7686ed8f249e7f2b477931acc9f72dcd36c66e5b016ca3d" +hash = "a370669fdfb774d17ca1808e8e16a45a17b2edc2fd63a986b88fb1b3d4249190" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-74.json" -hash = "ec38e8b7100ebb511a46e66f7c4ff8dcb9e4ae27d3dc14f689587db88d144081" +hash = "c2955345c67050d08e2e6219809d143f5391f543819ad3e4f5d666e7c05b1093" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-75.json" -hash = "9e90826aa43a39d1e7e6b4fc1f9c563aee7747b25643f4ddf142a8ca9ad6f83a" +hash = "876c6725ef5c8fae78eacd3ea49cdbaefe633472f48ea1783c6de0ce5739ae36" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-76.json" -hash = "062ad5bb10a02ece447f35c0140391d89758f1d475b35688f0abc0ec4cd73e2e" +hash = "56b7106fa537386a6e023e620cafdd44e6bc679d9bc2e9907206a6b8f3c59ece" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-77.json" -hash = "e0483e54137d7a34d6ff80ecb35d28f305de1a4d8c2d591391de550d94d96e21" +hash = "4af84d766dc2fa5b2ecb0fc3f437fc60240512fb17920c1f0dc8ba3df7b97a0f" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-78.json" -hash = "c19bddc1af97fe4f9c7614ef55fc9e4611e33a260ada2c554dcfecd9c085fec4" +hash = "9e3082fe6408ec1ff533a881014b0f0039d755e47135c8ccd2529ac880e192e8" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-79.json" -hash = "ae294f967661901d3762f9d91fc2e2da1ed559428530f2b96402810c9104c931" +hash = "2cf1eba3c0316d4fdd9303c6df1edf809679422ead7016b9854daa267b5a11f9" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-8.json" -hash = "64055f2b639d7b5a33008722c24b85ece808b5ec75ea86dbb5dc9d8bda779070" +hash = "27791072dbdc504110cf987556b8f82d53690b1b91cf55ed967b5c7a4ee698b9" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-80.json" -hash = "3feb5a7e3c3e210f70cefd6aea16d2a353fa2ea515811d68cdd2d76dc893522b" +hash = "845101ab5226aff38bd0452a5a15b1cf5bcca014d6100bae1d647e32242befd0" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-81.json" -hash = "458e680d65ded149ad30e80807a6d2707c0b9578d692357f078bf01eef8577d9" +hash = "b7f9e116f769f34a76f436407ac24d2aa0d5121b6e2978532f591cd112e7e6f3" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-82.json" -hash = "d397582b49892ce96a537df3f4b31bad14d765547fb71e439c616b8ce1918916" +hash = "2bb5fea5111cae811fc49c1a8cee5069483b8ee84d2408d9f8f910433e8264d2" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-83.json" -hash = "6154b7a0b7ae1410aaaa574dfa231c93095ecd38a6b7c0da590fdf367f8a723f" +hash = "324959467cdf6cc464c160990c8b0f1d680ffad6809e6afe26c3548f63553c90" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-84.json" -hash = "f3770dabd19ed97b964d1e122178016e4c82781ee717e946e44dcb6f42ec9f5c" +hash = "23b9889470bc70c38a245c8c1526567f18546c69d29c11c76f50655c933a095d" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-85.json" -hash = "03117d57855861a6c55b77c66aed1dd6dfeb68371a49c7272332cd38f63c2fa2" +hash = "8fd602d36eb554615cb11542269b71c57f11be93050a84cefc5f8f1f1b207064" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-86.json" -hash = "360fb74313915f833d34ee64e9e4c1aaf04db5a541e13dadb54d180605d15110" +hash = "4462245c0a1d8f2c2fc70b4d01a70a81fe12d896e45b2d0d969b3d7b306e8472" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-87.json" -hash = "9e577051e428298cef12bf605a28dd13c6bcc36c637456680c2da9e245434a3f" +hash = "16e8f5968fd532a8bd42c0f6e81dfb4e1038e5f60fb5b9f70277c7a576ff8e0c" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-88.json" -hash = "6366683a39b30a9a313b8e033c7633df85e2bab574f5b33682bcd582c02c0dfd" +hash = "031eba5241cb629dd686f3dbde57fff73f717a69e8410618367e27cd97f08194" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-89.json" -hash = "2008b84a6587b90003c71f5ca587cdc8ecb472d0174a3b1f17284f7ffd718d85" +hash = "de7de8e000cd6c2a9e552526fdec14bae9ac67f85f1826458d533aa9a9e56c55" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-9.json" -hash = "4a407680a4275c163a8c14bc6fc0506f7b1fe3be2c7b7b49cafb8b6632b4c115" +hash = "f41ebba1419b2feb75259b2d4c180b06ed39810a5de1ce5f78eecac380ebed28" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-90.json" -hash = "d8e78393185e93e202afa4c0df69b66b2c444a14295681fafc8d1c51066e33a9" +hash = "ca66ef0f56070c942d5dacf53accbae45578e9b97cf5762e6faf8a1d47e92c6b" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-91.json" -hash = "d775440ecf61fd3d7f07cde3ef1534cf6b8bc9b1a356ec551ce538c1a142f89c" +hash = "272882778e0523b30b7c1bc780a3a8c99b37eb163010292daa5483d0ad91fd60" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-92.json" -hash = "edf44e6f6a6ec316e790623cd3b73759192f9baca15b9e28a6ba8ceb620aa0a9" +hash = "07e09644440f8f176e1297043ccc557de07a1d2f05d2bec42aa8699957d5be1b" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-93.json" -hash = "012e87fed270749686d8e10bbe986f1eaf149b4838104ec39b8b98aca6c01a28" +hash = "21fa7c9f7c4e3719099562fc693dd6485105a9a87ec1929fbd8010b5cedde8a5" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-94.json" -hash = "749d19d2a2d9384f78efb8d59ca7629e0fea0e2abbc4ac83ff005f1c98f630b4" +hash = "f4f7e2a8a932cfbec943822318ac2d11eb8d5510696e4fa0eb2385a01e655136" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-95.json" -hash = "c0183a6f96b7151eab67839d26acd05b59f11ce73ee59efcf70f48fc2f70eb73" +hash = "a21c132c0fd6eda7a9734d461b234fb4a473f307049245c6198116cf0dfa4f21" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-96.json" -hash = "bc82a2ceffdaddc26e9816e35dded844c6b0f98bc65fc6f41d3e7082ec623d3f" +hash = "a2651f42c6c9eeed618136426cb5e53e92b49783bb69843343f38ef87d4fd907" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-97.json" -hash = "5b909dfbbdd86b9f64083461093cf9df89814b15e6e242ea72825aa08d1209ad" +hash = "394c6ce8e0ae8403e4db149f41a3aa6e0088ea680fbd08b3866344ecbe9d32a7" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-98.json" -hash = "47af6c2cb94fad84ef6971970da6b54a3c9752b777816c472c047c6e9ddf225d" +hash = "df7be7d9d28ea5f8ac69a28544eba4cf0b66d3a8ceabd327f800e09c3542f7b4" [[files]] file = "config/openloader/resources/firepit/assets/firepit/tips/quote-99.json" -hash = "e11f58bfc93882e99720727444f4a5a9758ebcfd8435313c481b63455655b20b" - -[[files]] -file = "config/openloader/resources/firepit/assets/firepit/tips/quotes.txt" -hash = "66572cf754dec0e553bdca544fe94cb7da331ea1782727b930b25b4e4eb4ddec" - -[[files]] -file = "config/openloader/resources/firepit/assets/firepit/tips/tojson.js" -hash = "3809980e693f4e68a7d40235c623dc89d825ff3976a00f38a07f32e4a66ac6ad" +hash = "f45a092bfa4e3f36d8a758d9c1be9a87ce66b4dd772a631c5a12123bd7d9d4ba" [[files]] file = "config/openloader/resources/firepit/assets/minecraft/sounds.json" @@ -1553,7 +2161,3 @@ hash = "cffe6d81cd9c726661d3ccafb2903152cd93f002038d284f4c8fb0cc1ef7ac01" [[files]] file = "resourcepacks/FoxThighHighs/pack.png" hash = "e8d316d362ec3f7b7d72ec0ec286a344560da7bb80cf47c7cc7d6235a673d218" - -[[files]] -file = "update.sh" -hash = "f25cbf2fb32c3f56b5c72008e570c25259dd820103ba036232f1f7101d1d382b" diff --git a/pack.toml b/pack.toml index 61741d2..6f1de63 100644 --- a/pack.toml +++ b/pack.toml @@ -6,7 +6,7 @@ pack-format = "packwiz:1.1.0" [index] file = "index.toml" hash-format = "sha256" -hash = "2f74de339ce70729a59854e68a7eaabad440722800bea8fa0d1fc63718272abb" +hash = "57c1e7abe64b6623299639ad66b02f2506d50d5274fdaa7ed1842656d09329a4" [versions] fabric = "0.14.9"