{"version":3,"sources":["../src/constant/constant.ts","../src/delay/delay.ts","../src/generate/index.ts","../src/is/is.ts","../src/array/index.ts","../src/number/index.ts","../src/object/index.ts","../src/string/index.ts","../src/time/index.ts","../src/fromvector/fromVector.ts","../src/gacha/index.ts","../src/generate/generate.ts","../src/kmeans/kMeans.ts","../src/genetic/genetic.ts","../src/logger/index.ts","../src/obfuscator/obfuscator.ts","../src/sha256/constants.ts","../src/sha256/sha256.ts","../src/validator/locales/en.ts","../src/validator/locales/ja.ts","../src/validator/index.ts"],"sourcesContent":["\nconst gemStones = [\n    \"Alexandrite\",\n    \"Alexandrite Cats Eye\",\n    \"Almandine Garnet\",\n    \"Amber\",\n    \"Amethyst\",\n    \"Amethyst Cabochon\",\n    \"Ametrine\",\n    \"Ammolite\",\n    \"Andalusite\",\n    \"Andesine\",\n    \"Andesine Labradorite\",\n    \"Angel Skin Coral\",\n    \"Apatite\",\n    \"Apatite Cat's Eye\",\n    \"Aquamarine\",\n    \"Australian Opal\",\n    \"Aventurine\",\n    \"Azurite\",\n    \"Basra Pearls\",\n    \"Beryl\",\n    \"Bicolor Sapphire\",\n    \"Bixbite\",\n    \"Black Onyx\",\n    \"Black Opal\",\n    \"Black Pearls\",\n    \"Black Spinel\",\n    \"Black Tourmaline\",\n    \"Blizzard Stone\",\n    \"Bloodstone\",\n    \"Blue Fluorite\",\n    \"Blue Moonstone\",\n    \"Blue Opal\",\n    \"Blue Sapphire\",\n    \"Blue Spinel\",\n    \"Blue Topaz\",\n    \"Blue Tourmaline/Indicolite Tourmaline\",\n    \"Blue Zircon\",\n    \"Boulder Opal\",\n    \"Brazilian Emerald\",\n    \"Brown Moonstone\",\n    \"Brown Zircon\",\n    \"Burmese Ruby\",\n    \"Burmese Sapphire\",\n    \"Carnelian\",\n    \"Cats Eye\",\n    \"Cats Eye Moonstone\",\n    \"Cats Eye Opal\",\n    \"Cats Eye Quartz\",\n    \"Ceylon Blue Sapphire \",\n    \"Chrome Diopside\",\n    \"Chrome Tourmaline\",\n    \"Chrysoberyl\",\n    \"Chrysoberyl Cat’s Eye\",\n    \"Chrysocolla\",\n    \"Citrine (Sunela)\",\n    \"Clinohumite\",\n    \"Colombian Emerald\",\n    \"Color Change Fluorite\",\n    \"Color Change Sapphire\",\n    \"Cornflower Blue Sapphire\",\n    \"Cubic Zirconia\",\n    \"Cultured Pearls\",\n    \"Danburite\",\n    \"Demantoid Garnet\",\n    \"Diopside\",\n    \"Emerald (Panna)\",\n    \"Ethiopian Emerald\",\n    \"Ethiopian Opal\",\n    \"Fire Agate\",\n    \"Fire Opal\",\n    \"Fluorite\",\n    \"Freshwater Pearls\",\n    \"Garnet\",\n    \"Glass Filled Ruby\",\n    \"Golden Sapphire\",\n    \"Golden Topaz\",\n    \"Goshenite\",\n    \"Grandidierite\",\n    \"Green Amethyst\",\n    \"Green Apatite\",\n    \"Green Garnet\",\n    \"Green Kyanite\",\n    \"Green Sapphire\",\n    \"Green Tanzanite\",\n    \"Green Tourmaline\",\n    \"Grey Sapphire\",\n    \"Heliodor\",\n    \"Hessonite\",\n    \"Imperial Topaz\",\n    \"Indian Emerald\",\n    \"Indian Ruby\",\n    \"Indraneelam\",\n    \"Insignificant Oil Emerald\",\n    \"Iolite\",\n    \"Iranian Turquoise\",\n    \"Jade\",\n    \"Jade Nephrite\",\n    \"Jadeite\",\n    \"Japanese Red Coral\",\n    \"Jasper\",\n    \"Kashmir Blue Sapphire\",\n    \"Keshi Pearls\",\n    \"Khooni Neelam\",\n    \"Kunzite\",\n    \"Kyanite\",\n    \"Labradorite \",\n    \"Lapis Lazuli\",\n    \"Lavender Quartz\",\n    \"Lemon Quartz\",\n    \"London Blue Topaz\",\n    \"Malachite\",\n    \"Mandarin Garnet\",\n    \"Mexican Fire Opal\",\n    \"Mocha Scapolite\",\n    \"Mogok Ruby \",\n    \"Moldavite\",\n    \"Monazite\",\n    \"Moonstone\",\n    \"Morganite\",\n    \"Moss Agate\",\n    \"Mozambique Ruby\",\n    \"Natural Pearls\",\n    \"Navratna\",\n    \"Neon Apatite\",\n    \"No Oil Emerald\",\n    \"Obsidian\",\n    \"Onyx\",\n    \"Opal\",\n    \"Opal Doublet\",\n    \"Orange Kyanite\",\n    \"Orange Sapphire\",\n    \"Orthoclase\",\n    \"Padparadscha Sapphire\",\n    \"Pakistan Emerald/Swat Emerald\",\n    \"Panjshir Emerald\",\n    \"Paraiba Tourmaline\",\n    \"Peach Morganite\",\n    \"Peach Sapphire\",\n    \"Peacock Tanzanite\",\n    \"Pearl\",\n    \"Peridot\",\n    \"Persian Turquoise\",\n    \"Petalite\",\n    \"Petrified Wood\",\n    \"Pigeon Blood Ruby\",\n    \"Pink Coral\",\n    \"Pink Fluorite\",\n    \"Pink Morganite\",\n    \"Pink Opal\",\n    \"Pink Sapphire\",\n    \"Pink Spinel\",\n    \"Pink Topaz\",\n    \"Pink Tourmaline\",\n    \"Pitambari Neelam\",\n    \"Prehnite\",\n    \"Purple Garnet\",\n    \"Purple Sapphire\",\n    \"Rainbow Fluorite\",\n    \"Rainbow Moonstone\",\n    \"Red Coral\",\n    \"Red Spinel\",\n    \"Red Tourmaline\",\n    \"Red Zircon\",\n    \"Rhodochrosite\",\n    \"Rhodonite \",\n    \"Rose Quartz\",\n    \"Royal Blue Sapphire\",\n    \"Rubellite\",\n    \"Ruby (Manik)\",\n    \"Ruby Cabochon\",\n    \"Russian Alexandrite\",\n    \"Russian Emerald\",\n    \"Rutilated Quartz\",\n    \"Sang-E-Maryam\",\n    \"Sapphire\",\n    \"Schorl Tourmaline\",\n    \"Serpentine\",\n    \"Sillimanite Cats Eye\",\n    \"Sky Blue Topaz\",\n    \"Smoky Quartz\",\n    \"Sodalite\",\n    \"South Sea Pearls\",\n    \"Spectrolite\",\n    \"Spessartite\",\n    \"Sphalerite\",\n    \"Spinel\",\n    \"Sri Lanka Moonstone\",\n    \"Star Garnet\",\n    \"Star Ruby\",\n    \"Star Sapphire\",\n    \"Sunstone\",\n    \"Swiss Blue Topaz\",\n    \"Taaffeite\",\n    \"Tahitian Pearls\",\n    \"Tanzania Ruby\",\n    \"Tanzanite\",\n    \"Teal Sapphire\",\n    \"Tibetian Turquoise \",\n    \"Tiger Eye\",\n    \"Titanite\",\n    \"Topaz\",\n    \"Tourmaline\",\n    \"Trapiche Emerald\",\n    \"Tsavorite\",\n    \"Turquoise\",\n    \"Violet Sapphire\",\n    \"Vivid Green Emerald\",\n    \"Watermelon Tourmaline\",\n    \"White Coral\",\n    \"White Opal\",\n    \"White Sapphire\",\n    \"White Topaz\",\n    \"White Zircon\",\n    \"Yellow Beryl\",\n    \"Yellow Fluorite\",\n    \"Yellow Sapphire\",\n    \"Yellow Topaz\",\n    \"Yellow Zircon\",\n    \"Zambian Emerald\",\n    \"Zircon\",\n    \"Zultanite\",\n]\n\nconst colors = [\n    \"Baker-Miller pink\",\n    \"Bright yellow\",\n    \"Amber\",\n    \"Atomic tangerine\",\n    \"Bisque\",\n    \"Candy apple red\",\n    \"Baby powder\",\n    \"Coquelicot\",\n    \"Blanched almond\",\n    \"Brilliant rose\",\n    \"Bittersweet\",\n    \"Cadmium yellow\",\n    \"Canary yellow\",\n    \"Carnation pink\",\n    \"Canary\",\n    \"Cherry blossom pink\",\n    \"Coral\",\n    \"Chinese yellow\",\n    \"Chrome yellow\",\n    \"Cyber yellow\",\n    \"Deep pink\",\n    \"Aureolin\",\n    \"Banana Mania\",\n    \"Cotton candy\",\n    \"Cream\",\n    \"Cosmic latte\",\n    \"Cornsilk\",\n    \"Dark orange\",\n    \"Deep saffron\",\n    \"Floral white\",\n    \"Fiery rose\",\n    \"French pink\",\n    \"Fuchsia\",\n    \"French fuchsia\",\n    \"Antique white\",\n    \"Blond\",\n    \"Brink pink\",\n    \"Apricot\",\n    \"Corn\",\n    \"Coral pink\",\n    \"Cultured\",\n    \"Cameo pink\",\n    \"Champagne\",\n    \"Flickr Pink\",\n    \"Deep champagne\",\n    \"Congo pink\",\n    \"Champagne pink\",\n    \"Baby pink\",\n    \"Beige\",\n    \"French rose\",\n    \"Cyclamen\",\n    \"Azure\",\n    \"Alice blue\",\n    \"Fashion fuchsia\",\n    \"Almond\",\n    \"Eggshell\",\n    \"Dutch white\",\n    \"Amaranth pink\",\n    \"Buff\",\n    \"Desert sand\",\n    \"Cadmium orange\",\n    \"Arylide yellow\",\n    \"Fire opal\",\n    \"Alabaster\",\n    \"Carrot orange\",\n    \"Flax\",\n    \"Burnt sienna\",\n    \"Cadmium red\",\n    \"Dark salmon\",\n    \"Flame\",\n    \"Bone\",\n    \"Amaranth\",\n    \"Frostbite\",\n    \"Fulvous\",\n    \"Charm pink\",\n    \"Candy pink\",\n    \"Fawn\",\n    \"Citrine\",\n    \"Cinnabar\",\n    \"CG red\",\n    \"Crimson\",\n    \"Earth yellow\",\n    \"China pink\",\n    \"Blush\",\n    \"Chartreuse\",\n    \"Burlywood\",\n    \"Cerise\",\n    \"Barbie Pink\",\n    \"Fandango pink\",\n    \"Deep cerise\",\n    \"Chocolate\",\n    \"Bright lilac\",\n    \"Dogwood rose\",\n    \"Carmine\",\n    \"Copper\",\n    \"Amaranth red\",\n    \"French mauve\",\n    \"Cocoa brown\",\n    \"Arctic lime\",\n    \"Fire engine red\",\n    \"Cedar Chest\",\n    \"Camel\",\n    \"Burnt orange\",\n    \"French raspberry\",\n    \"Aero blue\",\n    \"Bitter lemon\",\n    \"Cinnamon Satin\",\n    \"Bright maroon\",\n    \"Desert\",\n    \"Fuchsia purple\",\n    \"English vermillion\",\n    \"Antique brass\",\n    \"Bronze\",\n    \"Electric lime\",\n    \"Fuchsia rose\",\n    \"Brick red\",\n    \"Alloy orange\",\n    \"Copper red\",\n    \"Cardinal\",\n    \"Bitter lime\",\n    \"English lavender\",\n    \"Celeste\",\n    \"Dark khaki\",\n    \"Fallow\",\n    \"Ecru\",\n    \"Bittersweet shimmer\",\n    \"Beau blue\",\n    \"Black Shadows\",\n    \"Electric purple\",\n    \"Byzantine\",\n    \"Columbia Blue\",\n    \"Dark goldenrod\",\n    \"Deep chestnut\",\n    \"Carnelian\",\n    \"African violet\",\n    \"Fandango\",\n    \"Ash gray\",\n    \"Copper penny\",\n    \"Auburn\",\n    \"Celadon\",\n    \"Acid green\",\n    \"Amaranth purple\",\n    \"Brown sugar\",\n    \"Blue bell\",\n    \"Firebrick\",\n    \"Chinese red\",\n    \"English red\",\n    \"Café au lait\",\n    \"Cadet blue\",\n    \"Blizzard blue\",\n    \"China rose\",\n    \"French beige\",\n    \"Blast-off bronze\",\n    \"Flirt\",\n    \"Android green\",\n    \"Cambridge blue\",\n    \"Baby blue eyes\",\n    \"Cinereous\",\n    \"Drab\",\n    \"Citron\",\n    \"Beaver\",\n    \"Cadet grey\",\n    \"Burnished brown\",\n    \"Big dip o’ruby\",\n    \"French lime\",\n    \"Amethyst\",\n    \"Copper rose\",\n    \"Eton blue\",\n    \"Bistre brown\",\n    \"Dark orchid\",\n    \"Dark violet\",\n    \"Artichoke\",\n    \"Chestnut\",\n    \"Antique fuchsia\",\n    \"Dark sea green\",\n    \"Baby blue\",\n    \"Cool grey\",\n    \"Dark magenta\",\n    \"Cordovan\",\n    \"Dark sky blue\",\n    \"Apple green\",\n    \"Brown\",\n    \"Asparagus\",\n    \"Brandy\",\n    \"Electric violet\",\n    \"Blue-violet\",\n    \"Burnt umber\",\n    \"Dark red\",\n    \"French violet\",\n    \"French lilac\",\n    \"Fuzzy Wuzzy\",\n    \"Antique ruby\",\n    \"Battleship grey\",\n    \"Chinese violet\",\n    \"Aero\",\n    \"Coyote brown\",\n    \"Byzantium\",\n    \"Aquamarine\",\n    \"French bistre\",\n    \"Burgundy\",\n    \"Deep taupe\",\n    \"Falu red\",\n    \"Barn red\",\n    \"Claret\",\n    \"French sky blue\",\n    \"Electric blue\",\n    \"Bole\",\n    \"Coffee\",\n    \"Air superiority blue\",\n    \"Bud green\",\n    \"Catawba\",\n    \"Cornflower blue\",\n    \"Electric indigo\",\n    \"Eminence\",\n    \"Blue-gray\",\n    \"Field drab\",\n    \"Blood red\",\n    \"Cerulean frost\",\n    \"Dim gray\",\n    \"Bright green\",\n    \"Dark blue-gray\",\n    \"Cyber grape\",\n    \"Caput mortuum\",\n    \"Eggplant\",\n    \"Dark byzantium\",\n    \"Antique bronze\",\n    \"Forest green\",\n    \"Dark brown\",\n    \"Avocado\",\n    \"Blue jeans\",\n    \"Dark electric blue\",\n    \"Dark liver\",\n    \"Café noir\",\n    \"Emerald\",\n    \"Carolina blue\",\n    \"Cadet\",\n    \"English violet\",\n    \"Dark olive green\",\n    \"Black coral\",\n    \"Blue yonder\",\n    \"Ebony\",\n    \"Davy's grey\",\n    \"Army green\",\n    \"Feldgrau\",\n    \"Fern green\",\n    \"Dark moss green\",\n    \"Dark lava\",\n    \"Deep Space Sparkle\",\n    \"Dark slate blue\",\n    \"Black bean\",\n    \"Bistre\",\n    \"Black olive\",\n    \"Bluetiful\",\n    \"B'dazzled blue\",\n    \"Charcoal\",\n    \"Cerulean blue\",\n    \"Cosmic cobalt\",\n    \"Celadon green\",\n    \"Black coffee\",\n    \"Amazon\",\n    \"Dark sienna\",\n    \"Blue\",\n    \"Dark slate gray\",\n    \"Dark cornflower blue\",\n    \"Bleu de France\",\n    \"Dark purple\",\n    \"Celtic blue\",\n    \"Charleston green\",\n    \"Dodger blue\",\n    \"Blue-green\",\n    \"Denim\",\n    \"Eerie black\",\n    \"Denim blue\",\n    \"Flickr Blue\",\n    \"Black chocolate\",\n    \"English green\",\n    \"Brunswick green\",\n    \"Cerulean\",\n    \"Fluorescent blue\",\n    \"Bright navy blue\",\n    \"Dark jungle green\",\n    \"Dark spring green\",\n    \"Egyptian blue\",\n    \"Blue sapphire\",\n    \"Dark pastel green\",\n    \"Absolute Zero\",\n    \"Black\",\n    \"Cadmium green\",\n    \"British racing green\",\n    \"Cobalt blue\",\n    \"Bottle green\",\n    \"Castleton green\",\n    \"Aqua\",\n    \"Ao\",\n    \"Capri\",\n    \"Caribbean green\",\n    \"CG blue\",\n    \"Celadon blue\",\n    \"Cyan\",\n    \"Dark green\",\n    \"Dark cyan\",\n    \"Gamboge\",\n    \"Dark turquoise\",\n    \"Gainsboro\",\n    \"Deep jungle green\",\n    \"French blue\",\n    \"Duke blue\",\n    \"Deep sky blue\",\n    \"Dartmouth green\",\n    \"Erin\",\n    \"Electric green\",\n    \"Glossy grape\",\n    \"Glaucous\",\n    \"Ghost white\",\n    \"Generic viridian\",\n    \"GO green\",\n    \"Gold Fusion\",\n    \"Gold\",\n    \"Green\",\n    \"Golden poppy\",\n    \"Gray\",\n    \"Goldenrod\",\n    \"Granite gray\",\n    \"Golden yellow\",\n    \"Golden brown\",\n    \"Granny Smith apple\",\n    \"Green-cyan\",\n    \"Green-blue\",\n    \"Grullo\",\n    \"Green Sheen\",\n    \"Green-yellow\",\n    \"Green Lizard\",\n    \"Harlequin\",\n    \"Hansa yellow\",\n    \"Han purple\",\n    \"Han blue\",\n    \"Gunmetal\",\n    \"Heliotrope\",\n    \"Heliotrope gray\",\n    \"Harvest gold\",\n    \"Hollywood cerise\",\n    \"Heat Wave\",\n    \"Hot pink\",\n    \"Hot magenta\",\n    \"Honeydew\",\n    \"Honolulu blue\",\n    \"Hooker's green\",\n    \"Iceberg\",\n    \"Illuminating emerald\",\n    \"Icterine\",\n    \"Imperial red\",\n    \"Hunter green\",\n    \"Independence\",\n    \"Indian yellow\",\n    \"India green\",\n    \"Inchworm\",\n    \"Indian red\",\n    \"Indigo dye\",\n    \"Indigo\",\n    \"International orange\",\n    \"International Klein Blue\",\n    \"International orange (Golden Gate\",\n    \"Iris\",\n    \"Ivory\",\n    \"Jade\",\n    \"Keppel\",\n    \"Jungle green\",\n    \"Jasmine\",\n    \"Kelly green\",\n    \"Jet\",\n    \"Irresistible\",\n    \"Italian sky blue\",\n    \"Isabelline\",\n    \"Jazzberry jam\",\n    \"June bud\",\n    \"Jonquil\",\n    \"Key lime\",\n    \"Khaki (X11)\",\n    \"Kobe\",\n    \"Khaki\",\n    \"Kobi\",\n    \"Lapis lazuli\",\n    \"Laurel green\",\n    \"Lavender blush\",\n    \"KSU purple\",\n    \"Kobicha\",\n    \"Languid lavender\",\n    \"Lemon curry\",\n    \"Kombu green\",\n    \"Lava\",\n    \"Lavender\",\n    \"Laser lemon\",\n    \"Lemon\",\n    \"Lavender blue\",\n    \"Lavender gray\",\n    \"Lawn green\",\n    \"Lemon chiffon\",\n    \"Lemon yellow\",\n    \"Lemon glacier\",\n    \"Lemon meringue\",\n    \"Light cornflower blue\",\n    \"Light gray\",\n    \"Light salmon\",\n    \"Liberty\",\n    \"Light coral\",\n    \"Light blue\",\n    \"Light yellow\",\n    \"Light French beige\",\n    \"Light goldenrod yellow\",\n    \"Light cyan\",\n    \"Light green\",\n    \"Light sea green\",\n    \"Light orange\",\n    \"Light pink\",\n    \"Light periwinkle\",\n    \"Light steel blue\",\n    \"Light sky blue\",\n    \"Light slate gray\",\n    \"Lilac\",\n    \"Lilac Luster\",\n    \"Little boy blue\",\n    \"Linen\",\n    \"Lime\",\n    \"Lincoln green\",\n    \"Liver\",\n    \"Liseran purple\",\n    \"Lion\",\n    \"Lime green\",\n    \"Lime (web)\",\n    \"Liver chestnut\",\n    \"Livid\",\n    \"Macaroni and Cheese\",\n    \"Madder Lake\",\n    \"Magenta\",\n    \"Mahogany\",\n    \"Magenta haze\",\n    \"Magic mint\",\n    \"Magnolia\",\n    \"Malachite\",\n    \"Maize\",\n    \"Majorelle blue\",\n    \"Manatee\",\n    \"Maroon\",\n    \"Mardi Gras\",\n    \"Mantis\",\n    \"Mango\",\n    \"Mandarin\",\n    \"Mango Tango\",\n    \"Mauve\",\n    \"Marigold\",\n    \"Maximum blue purple\",\n    \"Medium aquamarine\",\n    \"Maximum red purple\",\n    \"Maximum blue\",\n    \"Maximum blue green\",\n    \"Medium orchid\",\n    \"Mauve taupe\",\n    \"Mauvelous\",\n    \"Maximum red\",\n    \"Maximum green\",\n    \"Maximum purple\",\n    \"Maximum green yellow\",\n    \"Maximum yellow\",\n    \"Maya blue\",\n    \"May green\",\n    \"Maximum yellow red\",\n    \"Medium candy apple red\",\n    \"Medium carmine\",\n    \"Medium blue\",\n    \"Medium champagne\",\n    \"Medium slate blue\",\n    \"Medium sea green\",\n    \"Medium purple\",\n    \"Medium spring green\",\n    \"Medium turquoise\",\n    \"Mellow apricot\",\n    \"Mellow yellow\",\n    \"Melon\",\n    \"Medium violet-red\",\n    \"Metallic gold\",\n    \"Metallic Seaweed\",\n    \"Metallic Sunburst\",\n    \"Middle blue\",\n    \"Middle blue green\",\n    \"Mexican pink\",\n    \"Middle blue purple\",\n    \"Middle green\",\n    \"Middle grey\",\n    \"Middle purple\",\n    \"Middle green yellow\",\n    \"Middle yellow\",\n    \"Middle red purple\",\n    \"Middle red\",\n    \"Midnight\",\n    \"Middle yellow red\",\n    \"Midnight blue\",\n    \"Mimi pink\",\n    \"Mindaro\",\n    \"Mikado yellow\",\n    \"Midnight green\",\n    \"Mint cream\",\n    \"Mint green\",\n    \"Mint\",\n    \"Minion yellow\",\n    \"Ming\",\n    \"Morning blue\",\n    \"Mode beige\",\n    \"Misty moss\",\n    \"Moss green\",\n    \"Misty rose\",\n    \"Mountain Meadow\",\n    \"Mountbatten pink\",\n    \"Mulberry\",\n    \"MSU green\",\n    \"Mystic maroon\",\n    \"Mystic\",\n    \"Mustard\",\n    \"Nadeshiko pink\",\n    \"Myrtle green\",\n    \"Navajo white\",\n    \"Navy blue\",\n    \"Naples yellow\",\n    \"Neon blue\",\n    \"Neon green\",\n    \"Non-photo blue\",\n    \"New York pink\",\n    \"Nyanza\",\n    \"Nickel\",\n    \"Ocean Blue\",\n    \"Ochre\",\n    \"Ocean green\",\n    \"Old gold\",\n    \"Old burgundy\",\n    \"Old lace\",\n    \"Old silver\",\n    \"Old rose\",\n    \"Old lavender\",\n    \"Olive\",\n    \"Old mauve\",\n    \"Olive Drab\",\n    \"Olive green\",\n    \"Olivine\",\n    \"Orange\",\n    \"Olive Drab #7\",\n    \"Onyx\",\n    \"Opal\",\n    \"Opera mauve\",\n    \"Orange-red\",\n    \"Orange peel\",\n    \"Orange-yellow\",\n    \"Orchid pink\",\n    \"Orange soda\",\n    \"Orchid\",\n    \"Oxford blue\",\n    \"Outrageous Orange\",\n    \"Outer space\",\n    \"Oxblood\",\n    \"Pale aqua\",\n    \"Pacific blue\",\n    \"Pakistan green\",\n    \"OU Crimson red\",\n    \"Palatinate purple\",\n    \"Pale spring bud\",\n    \"Pale pink\",\n    \"Pale silver\",\n    \"Pale purple\",\n    \"Pale cerulean\",\n    \"Paolo Veronese green\",\n    \"Pansy purple\",\n    \"Paradise pink\",\n    \"Paris Green\",\n    \"Papaya whip\",\n    \"Pastel pink\",\n    \"Peach\",\n    \"Payne's grey\",\n    \"Patriarch\",\n    \"Peach puff\",\n    \"Pear\",\n    \"Pearly purple\",\n    \"Periwinkle\",\n    \"Permanent Geranium Lake\",\n    \"Persian green\",\n    \"Persian orange\",\n    \"Persian indigo\",\n    \"Persian blue\",\n    \"Pine green\",\n    \"Persian plum\",\n    \"Persian rose\",\n    \"Persian red\",\n    \"Pewter Blue\",\n    \"Persian pink\",\n    \"Phlox\",\n    \"Persimmon\",\n    \"Phthalo green\",\n    \"Picotee blue\",\n    \"Pink\",\n    \"Phthalo blue\",\n    \"Pictorial carmine\",\n    \"Piggy pink\",\n    \"Pine tree\",\n    \"Pistachio\",\n    \"Prussian blue\",\n    \"Pink Sherbet\",\n    \"Pink flamingo\",\n    \"Powder blue\",\n    \"Pink lavender\",\n    \"Pink lace\",\n    \"Platinum\",\n    \"Plum\",\n    \"Polished Pine\",\n    \"Plump Purple\",\n    \"Prune\",\n    \"Portland Orange\",\n    \"Psychedelic purple\",\n    \"Princeton orange\",\n    \"Pomp and Power\",\n    \"Popstar\",\n    \"Puce\",\n    \"Pullman Brown\",\n    \"Pumpkin\",\n    \"Purple pizzazz\",\n    \"Purple navy\",\n    \"Purple\",\n    \"Purple Plum\",\n    \"Purpureus\",\n    \"Purple mountain majesty\",\n    \"Queen pink\",\n    \"Raspberry glace\",\n    \"Raisin black\",\n    \"Quick Silver\",\n    \"Quinacridone magenta\",\n    \"Queen blue\",\n    \"Radical Red\",\n    \"Raspberry\",\n    \"Rajah\",\n    \"Razzle dazzle rose\",\n    \"Raspberry rose\",\n    \"Rebecca Purple\",\n    \"Raw Sienna\",\n    \"Red\",\n    \"Raw umber\",\n    \"Razzmatazz\",\n    \"Razzmic Berry\",\n    \"Red-orange\",\n    \"Red-violet\",\n    \"Red Salsa\",\n    \"Red-purple\",\n    \"Redwood\",\n    \"Resolution blue\",\n    \"Rhythm\",\n    \"Rich black\",\n    \"Rose pink\",\n    \"Rose bonbon\",\n    \"Rose\",\n    \"Rose ebony\",\n    \"Roman silver\",\n    \"Robin egg blue\",\n    \"Rose Dust\",\n    \"Rifle green\",\n    \"Rocket metallic\",\n    \"Rose quartz\",\n    \"Rose madder\",\n    \"Rose red\",\n    \"Rose taupe\",\n    \"Russet\",\n    \"Rubine red\",\n    \"Ruber\",\n    \"Royal yellow\",\n    \"Russian green\",\n    \"Royal blue\",\n    \"Rufous\",\n    \"Rosso corsa\",\n    \"Rose vale\",\n    \"Rosewood\",\n    \"Rosy brown\",\n    \"Royal purple\",\n    \"Ruby\",\n    \"Ruby red\",\n    \"Rusty red\",\n    \"Sacramento State green\",\n    \"Russian violet\",\n    \"Rust\",\n    \"Saddle brown\",\n    \"Saffron\",\n    \"Sage\",\n    \"Safety yellow\",\n    \"Safety orange\",\n    \"Sand dune\",\n    \"Sapphire\",\n    \"Salmon pink\",\n    \"Salmon\",\n    \"Salmon Magistrate\",\n    \"St. Patrick's blue\",\n    \"Sand\",\n    \"Sap green\",\n    \"Sapphire blue\",\n    \"Scarlet\",\n    \"Schauss pink\",\n    \"Sandy brown\",\n    \"Satin sheen gold\",\n    \"School bus yellow\",\n    \"Shocking pink\",\n    \"Sea green\",\n    \"Shadow blue\",\n    \"Seashell\",\n    \"Silver\",\n    \"Screamin' Green\",\n    \"Seal brown\",\n    \"Shamrock green\",\n    \"Shadow\",\n    \"Sepia\",\n    \"Selective yellow\",\n    \"Shiny Shamrock\",\n    \"Shimmering Blush\",\n    \"Sheen green\",\n    \"Sienna\",\n    \"Sinopia\",\n    \"Sizzling Red\",\n    \"Silver chalice\",\n    \"Silver sand\",\n    \"Silver pink\",\n    \"Sky magenta\",\n    \"Skobeloff\",\n    \"Sizzling Sunrise\",\n    \"Sky blue\",\n    \"Smoky black\",\n    \"Slimy green\",\n    \"Slate gray\",\n    \"Slate blue\",\n    \"Smitten\",\n    \"Spanish bistre\",\n    \"Solid pink\",\n    \"Sonic silver\",\n    \"Space cadet\",\n    \"Snow\",\n    \"Spanish orange\",\n    \"Spanish blue\",\n    \"Spanish carmine\",\n    \"Spanish gray\",\n    \"Spanish green\",\n    \"Spanish pink\",\n    \"Spanish sky blue\",\n    \"Spring green\",\n    \"Steel pink\",\n    \"Steel Teal\",\n    \"Straw\",\n    \"Spanish red\",\n    \"Spring bud\",\n    \"Spring Frost\",\n    \"Spanish viridian\",\n    \"Spanish violet\",\n    \"Steel blue\",\n    \"Star command blue\",\n    \"Stil de grain yellow\",\n    \"Sunglow\",\n    \"Sunray\",\n    \"Sugar Plum\",\n    \"Super pink\",\n    \"Sunset\",\n    \"Tango pink\",\n    \"Tan\",\n    \"Tangerine\",\n    \"Taupe\",\n    \"Tart Orange\",\n    \"Tea rose\",\n    \"Sweet Brown\",\n    \"Taupe gray\",\n    \"Tea green\",\n    \"Tenné\",\n    \"Telemagenta\",\n    \"Teal\",\n    \"Teal blue\",\n    \"Tiffany Blue\",\n    \"Tomato\",\n    \"Tuscan\",\n    \"Tumbleweed\",\n    \"Thistle\",\n    \"Tickle Me Pink\",\n    \"Thulian pink\",\n    \"Terra cotta\",\n    \"Timberwolf\",\n    \"Tropical rain forest\",\n    \"Titanium yellow\",\n    \"True Blue\",\n    \"Turquoise\",\n    \"Trypan Blue\",\n    \"Tufts blue\",\n    \"Turquoise blue\",\n    \"Tuscan brown\",\n    \"Turtle green\",\n    \"Tuscan red\",\n    \"Turquoise green\",\n    \"Tuscany\",\n    \"Ultra pink\",\n    \"Unmellow yellow\",\n    \"USAFA blue\",\n    \"UA blue\",\n    \"Twilight lavender\",\n    \"Tuscan tan\",\n    \"Tyrian purple\",\n    \"Ultramarine\",\n    \"UA red\",\n    \"Ultramarine blue\",\n    \"Ultra red\",\n    \"Van Dyke brown\",\n    \"Unbleached silk\",\n    \"Umber\",\n    \"United Nations blue\",\n    \"Upsdell red\",\n    \"UP Forest green\",\n    \"Uranian blue\",\n    \"UP maroon\",\n    \"Vanilla\",\n    \"Venetian red\",\n    \"Violet\",\n    \"Vanilla ice\",\n    \"Verdigris\",\n    \"Vermilion\",\n    \"Veronica\",\n    \"Vegas gold\",\n    \"Vivid burgundy\",\n    \"Viridian green\",\n    \"Violet-blue\",\n    \"Violet-red\",\n    \"Vivid sky blue\",\n    \"Viridian\",\n    \"Volt\",\n    \"Xanthic\",\n    \"Wine dregs\",\n    \"Wild orchid\",\n    \"Wheat\",\n    \"Warm black\",\n    \"Vivid violet\",\n    \"Vivid tangerine\",\n    \"White\",\n    \"Wild blue yonder\",\n    \"Wild Strawberry\",\n    \"Wild watermelon\",\n    \"Windsor tan\",\n    \"Wine\",\n    \"Winter Sky\",\n    \"Wintergreen Dream\",\n    \"Wisteria\",\n    \"Xanadu\",\n    \"Wood brown\",\n    \"Xiketic\",\n    \"Yellow\",\n    \"Yale Blue\",\n    \"Zomp\",\n    \"YInMn Blue\",\n    \"Zaffre\",\n    \"Yellow-green\",\n    \"Yellow Sunshine\",\n    \"Yellow Orange\",\n]\n\n\nexport const Constant = {\n    gemStones: gemStones,\n    colors: colors,\n}\n\n","/**\n * An async delay. Ex) await delay(1000);\n * @param ms Delay duration in milisecond\n */\nexport const Delay = (ms: number): Promise<void> => {\n    return new Promise((resolve)=>{\n        setTimeout(()=>{\n            resolve();\n        }, ms);\n    })\n}","import type { AlphabateOptions } from './types';\n\ninterface GenerateArrayOptions {\n    min?: number;\n    max?: number;\n}\n\nexport const Generate = {\n    /**\n     * Generate a random alphanumeric string of a given length.\n     * @param len Length of the string (default 4).\n     */\n    alphanum(len: number = 4): string {\n        const chars = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n        let result = \"\";\n        for (let i = 0; i < len; i++)\n            result += chars[Math.floor(Math.random() * chars.length)];\n        return result;\n    },\n    /**\n     * Generate a MongoDB-style ObjectId.\n     */\n    objectId(): string {\n        return (\n            (Date.now() / 1000 | 0).toString(16) +\n            \"xxxxxxxxxxxxxxxx\".replace(/x/g, () => (Math.random() * 16 | 0).toString(16))\n        );\n    },\n    /**\n     * Generate a random integer in [min, max). Includes min, excludes max.\n     */\n    int(min: number, max: number): number {\n        return Math.floor(Math.random() * (max - min)) + min;\n    },\n    /**\n     * Generate a random float in [min, max).\n     */\n    random(min: number, max: number): number {\n        return Math.random() * (max - min) + min;\n    },\n    /**\n     * Generate an array of random integers.\n     * @param len Length of the array.\n     * @param ops min/max bounds for each integer (default min=0, max=11).\n     */\n    array(len: number, ops: GenerateArrayOptions = {}): number[] {\n        const { min = 0, max = 11 } = ops;\n        return Array.from({ length: len }, () => this.int(min, max));\n    },\n    /**\n     * Generate a random alphabetic string.\n     * @param len Length of the string (default 5).\n     * @param options lowercase/uppercase toggles.\n     */\n    alphabate(len: number = 5, options: AlphabateOptions = {}): string {\n        const op: AlphabateOptions = { lowercase: true, uppercase: true, ...options };\n        const lower = \"abcdefghijklmnopqrstuvwxyz\";\n        const upper = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n        const pool = (op.lowercase ? lower : \"\") + (op.uppercase ? upper : \"\");\n        let result = \"\";\n        for (let i = 0; i < len; i++)\n            result += pool[Math.floor(Math.random() * pool.length)];\n        return result;\n    },\n    /** @returns Current date as \"YYYY-MM-DD\" */\n    currentDate(): string {\n        const t = new Date();\n        return `${t.getFullYear()}-${t.getMonth() + 1}-${t.getDate()}`;\n    },\n    /** @returns Current time as \"HH:mm:ss\" */\n    currentTime(): string {\n        const t = new Date();\n        return [t.getHours(), t.getMinutes(), t.getSeconds()]\n            .map((v) => String(v).padStart(2, \"0\"))\n            .join(\":\");\n    },\n    /** @returns Current datetime as \"YYYY-MM-DD HH:mm:ss\" */\n    currentDateTime(): string {\n        const t = new Date();\n        const time = [t.getHours(), t.getMinutes(), t.getSeconds()]\n            .map((v) => String(v).padStart(2, \"0\"))\n            .join(\":\");\n        return `${t.getFullYear()}-${t.getMonth() + 1}-${t.getDate()} ${time}`;\n    },\n    /**\n     * Generate a list of date strings matching specified days of the week.\n     * @param f From date \"YYYY-MM-DD\"\n     * @param t To date \"YYYY-MM-DD\"\n     * @param days Day indices 0–6 (Sunday=0, Saturday=6)\n     */\n    listOfDateOfDays(f: string, t: string, days: number[]): string[] {\n        const to = new Date(t).toISOString();\n        const cursor = new Date(f);\n        const rs: string[] = [];\n        while (cursor.toISOString() <= to) {\n            if (days.includes(cursor.getDay()))\n                rs.push(cursor.toISOString().slice(0, 10));\n            cursor.setDate(cursor.getDate() + 1);\n        }\n        return rs;\n    },\n    /**\n     * Fast RFC4122 v4 UUID generator.\n     * @author Jeff Ward (jcward.com) — MIT license\n     */\n    uuidv4(): string {\n        const lut: string[] = [];\n        for (let i = 0; i < 256; i++) lut[i] = (i < 16 ? \"0\" : \"\") + i.toString(16);\n        const d0 = Math.random() * 0xffffffff | 0;\n        const d1 = Math.random() * 0xffffffff | 0;\n        const d2 = Math.random() * 0xffffffff | 0;\n        const d3 = Math.random() * 0xffffffff | 0;\n        return (\n            lut[d0 & 0xff] + lut[d0 >> 8 & 0xff] + lut[d0 >> 16 & 0xff] + lut[d0 >> 24 & 0xff] + \"-\" +\n            lut[d1 & 0xff] + lut[d1 >> 8 & 0xff] + \"-\" +\n            lut[d1 >> 16 & 0x0f | 0x40] + lut[d1 >> 24 & 0xff] + \"-\" +\n            lut[d2 & 0x3f | 0x80] + lut[d2 >> 8 & 0xff] + \"-\" +\n            lut[d2 >> 16 & 0xff] + lut[d2 >> 24 & 0xff] +\n            lut[d3 & 0xff] + lut[d3 >> 8 & 0xff] + lut[d3 >> 16 & 0xff] + lut[d3 >> 24 & 0xff]\n        );\n    },\n};\n","export const Is = {\n    object: ( x: any ): boolean => Object.prototype.toString.call(x) === \"[object Object]\",\n    emptyObject: ( x: Object ): boolean =>{\n        if(!Is.object(x)) return false;\n        for(let i in x) return false;\n        return true;\n    },\n    string:(x: any): boolean => (typeof x === 'string' || x instanceof String),\n    emptyString:(x: any) =>{\n        if(!Is.string(x)) return false;\n        for(let i in x) return false;\n        return true;\n    },\n    number: (x: any): boolean => Object.prototype.toString.call(x) === \"[object Number]\",\n    boolean: ( x: any ): boolean => Object.prototype.toString.call(x) === \"[object Boolean]\",\n    array:(x:any): boolean => Array.isArray(x),\n    null:(x: any): boolean => x === null,\n    undefined:(x: undefined): boolean => x === undefined,\n    falseValue:(x: any): boolean =>{\n        let emptyCount: number = 0;\n        if(Is.emptyString(x))emptyCount++;\n        if(Is.number(x) && x === 0)emptyCount++;\n        if(Is.null(x)) emptyCount++;\n        if(Is.undefined(x)) emptyCount++;\n        if(Is.boolean(x) && x === false) emptyCount++;\n        return emptyCount > 0 ? true: false;\n    },\n    email:(x: string): boolean =>{\n        if(!x) return false;\n        if(!/.+@.+\\..+/.test(x)) return false;\n        return true;\n    },\n    alphanumeric:(x: string): boolean => {\n        if(!x) return false;\n        const alphanumeric = /^[0-9a-zA-Z]+$/;\n        if(!alphanumeric.test(x)) return false;\n        return true;\n    },\n    UUIDv4:(x: string): boolean => {\n\t\tif(!x) return false;\n        const uuidv4 = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n        if(!uuidv4.test(x)) return false;\n        return true;\n\t},\n\tsameAs: (x: any, y: any): boolean => {\n        if(x === y) return true;\n        return false;\n\t},\n    noSpecials:(\n        x: string,\n        space: boolean = true, //true = allow space\n        extendJpn: boolean | null = false\n    ): boolean => {\n        if(!x) return true;\n        let format = /[`!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?~]/;\n        if(!space) format = /[ `!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?~]/;\n        if(extendJpn) format = /[`!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?~｀！＠＃＄％＾＆＊（）_＋ー＝「」『』；’：”＼｜、。＜＞・？〜]/;\n        if(!space && extendJpn) format = /[ `!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?~　｀！＠＃＄％＾＆＊（）_＋ー＝「」『』；’：”＼｜、。＜＞・？〜]/;\n        if(format.test(x)) return false;\n        return true;\n    },\n    aFunction(x: any): boolean {\n        return Object.prototype.toString.call(x) == '[object Function]';\n    }\n}","export const FromArray = {\n    /**\n     * Returns one or more random elements from an array.\n     * @param arr Input array.\n     * @param noOfResult Number of results to return (default 1).\n     * @param returnIndex Return index positions instead of values.\n     */\n    getRandom<T>(arr: T[], noOfResult: number = 1, returnIndex: boolean = false): T[] | number[] {\n        if (!Array.isArray(arr)) throw new Error(\"Input must be an array\");\n        if (returnIndex) {\n            const result: number[] = [];\n            for (let i = 0; i < noOfResult; i++)\n                result.push(Math.floor(Math.random() * arr.length));\n            return result;\n        }\n        const result: T[] = [];\n        for (let i = 0; i < noOfResult; i++)\n            result.push(arr[Math.floor(Math.random() * arr.length)]);\n        return result;\n    },\n    /**\n     * Find and return the largest N numbers.\n     * @param numbers Array of numbers.\n     * @param n Number of results to return (default 1).\n     * @param returnIndex Return indices instead of values.\n     */\n    getLargest(numbers: number[], n: number = 1, returnIndex: boolean = false): number[] {\n        const results: number[] = [];\n        if (returnIndex) {\n            const indexed = numbers.map((v, i) => ({ v, i })).sort((a, b) => b.v - a.v);\n            for (let i = 0; i < n && i < indexed.length; i++) results.push(indexed[i].i);\n        } else {\n            const sorted = [...numbers].sort((a, b) => b - a);\n            for (let i = 0; i < n && i < sorted.length; i++) results.push(sorted[i]);\n        }\n        return results;\n    },\n    /**\n     * Find and return the smallest N numbers.\n     * @param numbers Array of numbers.\n     * @param n Number of results to return (default 1).\n     * @param returnIndex Return indices instead of values.\n     */\n    getSmallest(numbers: number[], n: number = 1, returnIndex: boolean = false): number[] {\n        const results: number[] = [];\n        if (returnIndex) {\n            const indexed = numbers.map((v, i) => ({ v, i })).sort((a, b) => a.v - b.v);\n            for (let i = 0; i < n && i < indexed.length; i++) results.push(indexed[i].i);\n        } else {\n            const sorted = [...numbers].sort((a, b) => a - b);\n            for (let i = 0; i < n && i < sorted.length; i++) results.push(sorted[i]);\n        }\n        return results;\n    },\n    /**\n     * Return the intersection of two arrays.\n     * @param arrA Array A.\n     * @param arrB Array B.\n     * @param duplicated Include duplicate matches.\n     */\n    getIntersect<T>(arrA: T[], arrB: T[], duplicated: boolean = false): T[] {\n        const seen = new Map<string, number>();\n        const result: T[] = [];\n        for (const item of arrA) seen.set(String(item), 1);\n        for (const item of arrB) {\n            const key = String(item);\n            if (seen.has(key)) {\n                if (!duplicated && seen.get(key) === 1) {\n                    result.push(item);\n                    seen.set(key, 2);\n                } else if (duplicated) {\n                    result.push(item);\n                }\n            }\n        }\n        return result;\n    },\n    /**\n     * Randomly shuffle an array in-place (Fisher-Yates).\n     * @param arr Array to shuffle.\n     */\n    shuffle<T>(arr: T[]): T[] {\n        let currentIndex = arr.length;\n        while (currentIndex !== 0) {\n            const randomIndex = Math.floor(Math.random() * currentIndex);\n            currentIndex--;\n            [arr[currentIndex], arr[randomIndex]] = [arr[randomIndex], arr[currentIndex]];\n        }\n        return arr;\n    },\n    /**\n     * The Thanos snap — removes roughly half the elements randomly.\n     * Mutates the original array.\n     * @param arr Input array.\n     */\n    thanosSnap<T>(arr: T[]): T[] {\n        const targetLen = arr.length % 2 === 0 ? arr.length / 2 : (arr.length - 1) / 2;\n        while (arr.length !== targetLen)\n            arr.splice(Math.floor(Math.random() * arr.length), 1);\n        return arr;\n    },\n    /**\n     * Convert a 2D array ([[key, value], ...]) into an object.\n     * @param arr Input 2D array.\n     */\n    toObject<V>(arr: [string | number, V][]): Record<string | number, V> {\n        const obj: Record<string | number, V> = {};\n        for (const [k, v] of arr) obj[k] = v;\n        return obj;\n    },\n    /**\n     * Split an array into groups by ratio.\n     * ex) [1,2,3,4] split [1,3] → {1:[1], 2:[2,3,4]}\n     * Remainder goes into \"extra\" if it doesn't fit.\n     * @param arr Array to split.\n     * @param ratio Ratio to split into.\n     */\n    splitInto<T>(arr: T[], ratio: number[]): Record<string, T[]> {\n        if (ratio.length === 0) return { 1: arr };\n        const filtered = ratio.filter((r) => r !== 0 && !isNaN(r));\n        const unitLen = Math.floor((1 / filtered.reduce((a, b) => a + b)) * arr.length);\n        const rs: Record<string, T[]> = {};\n        let group = 1;\n        let offset = 0;\n        for (const r of ratio) {\n            const len = r * unitLen;\n            rs[group] = arr.slice(offset, offset + len);\n            offset += rs[group].length;\n            group++;\n        }\n        if (offset < arr.length) rs[\"extra\"] = arr.slice(offset);\n        return rs;\n    },\n    /**\n     * Log array elements to console, optionally limited to a range.\n     * @param arr Array to log.\n     * @param from Starting index (inclusive), default 0.\n     * @param to Ending index (exclusive), default arr.length.\n     */\n    log<T>(arr: T[], from: number = 0, to: number = arr.length): void {\n        for (let i = from; i < to; i++) console.log(arr[i]);\n    },\n};\n","export const FromNum = {\n    /**\n     * A generic roll. Anything larger than 100 will be true,\n     * lesser than 0 will be false.\n     * @param percentage 0~100\n     * @returns Fail(false)/Success(true)\n     */\n    roll(percentage: number): boolean {\n        const fixed = percentage / 100;\n        if (fixed >= Math.random()) return true;\n        return false;\n    },\n    /**\n     * Dice roll for your typical TRPG game.\n     * Ex) FromNum.diceRoll(3).D(20) = Roll 3 D20 Dice.\n     * Ex) FromNum.diceRoll(1).D(6) = Roll 1 D6 Dice.\n     * @param num Number of dice to roll\n     */\n    diceRoll(num: number) {\n        const _roll = (sides: number): number => Math.floor(Math.random() * sides) + 1;\n        return {\n            /**\n             * @param diceType Type of dice (e.g. 6, 10, 20).\n             * @returns number[]\n             */\n            D: (diceType: number): number[] => {\n                const rs: number[] = [];\n                for (let i = 0; i < num; i++) rs.push(_roll(diceType));\n                return rs;\n            },\n        };\n    },\n    /**\n     * Scale number down to 0 ~ 1.\n     * @param x  Input number\n     * @param min Min number\n     * @param max Max number\n     */\n    minMaxScale(x: number, min: number, max: number): number {\n        return (x - min) / (max - min);\n    },\n    /**\n     * Return scaled down number back to normal.\n     * @param x  Input number\n     * @param min Min number\n     * @param max Max number\n     */\n    unMinMaxScale(x: number, min: number, max: number): number {\n        return (x * (max - min)) + min;\n    },\n    /**\n     * Return the sum of the values.\n     * @param nums Array of numbers\n     */\n    sum(nums: number[]): number {\n        return nums.reduce((a, b) => a + b);\n    },\n    /**\n     * SoftMax / normalized exponential function.\n     * Returns a probability distribution of K possible outcomes.\n     * @param input Array of numbers\n     */\n    softMax(input: number[]): number[] {\n        if (input.length === 0) return [];\n        const total = input.reduce((a, b) => a + Math.exp(b), 0);\n        return input.map((n) => Math.exp(n) / total);\n    },\n    /**\n     * Return the arithmetic mean of a list of numbers.\n     * @param input Array of numbers\n     */\n    mean(input: number[]): number {\n        if (input.length === 0) return 0;\n        return input.reduce((a, b) => a + b, 0) / input.length;\n    },\n    /**\n     * Convert numeric values into Roman Numeral string.\n     * @param number Input number.\n     */\n    toRomanNumeral(number: number): string {\n        const strMap: Record<string, number> = {\n            M: 1000, CM: 900, D: 500, CD: 400,\n            C: 100, XC: 90, L: 50, XL: 40,\n            X: 10, IX: 9, V: 5, IV: 4, I: 1,\n        };\n        let input = number;\n        let rs = \"\";\n        for (const n in strMap) {\n            const tmp = Math.floor(input / strMap[n]);\n            for (let i = 0; i < tmp; i++) rs += n;\n            input -= tmp * strMap[n];\n        }\n        return rs;\n    },\n    /**\n     * Sigmoid function — bounded, differentiable, defined for all real inputs.\n     * @param x number or number[]\n     */\n    sigmoid(x: number | number[]): number | number[] {\n        const _f = (_x: number) => 1 / (1 + Math.exp(-_x));\n        if (Array.isArray(x)) return x.map((n) => _f(n));\n        return _f(x);\n    },\n    /**\n     * ReLU (Rectified Linear Unit) — f(x) = max(0, x).\n     * Outputs input directly if positive, otherwise zero.\n     * @param xs number[]\n     */\n    relu(xs: number[]): number[] {\n        return xs.map((x) => Math.max(0, x));\n    },\n    /**\n     * Softplus — smooth version of ReLU. f(x) = log(1 + exp(x))\n     * @param xs number[]\n     */\n    softPlus(xs: number[]): number[] {\n        return xs.map((x) => Math.log(1 + Math.exp(x)));\n    },\n    /**\n     * Round number to nearest specified multiple.\n     * @param n Number to round\n     * @param r Multiple to round to\n     */\n    toNearest(n: number, r: number): number {\n        return Math.round(n / r) * r;\n    },\n    /**\n     * Convert number into a short readable string.\n     * Does not round when truncating decimals.\n     * @param n Input number\n     * @param decimal Default = 2, number of decimal places to retain.\n     * @param maxLen Default = 3, maximum digit length (overwrites decimal).\n     */\n    toShortReadable(n: number, decimal: number = 2, maxLen: number = 3): string {\n        const symbols: Record<string, number> = { \"\": 0, k: 1_000, m: 1_000_000 };\n        let symbol = \"\";\n        for (const s in symbols) {\n            if (symbols[s] > n) break;\n            symbol = s;\n        }\n        if (symbol === \"\") return `${n}`;\n        const divided = (n / symbols[symbol]).toFixed(decimal).split(\"\");\n        while (divided.length > maxLen + 1) divided.pop();       // +1 for \".\"\n        while (divided.at(-1) === \"0\") divided.pop();            // trim trailing zeros\n        if (divided.at(-1) === \".\") divided.pop();               // trim trailing dot\n        return `${divided.join(\"\")}${symbol}`;\n    },\n};\n","type PlainObject = Record<string, unknown>;\n\nconst _isObj = (x: unknown): x is PlainObject =>\n    Object.prototype.toString.call(x) === \"[object Object]\";\n\nconst _isNumber = (x: unknown): x is number =>\n    Object.prototype.toString.call(x) === \"[object Number]\";\n\nexport const FromObject = {\n    /**\n     * Convert an object into a 2D array ([[key, value], ...]).\n     * @param inputObj Input object.\n     */\n    ObjectToArray(inputObj: Record<string | number, unknown>): [string, unknown][] {\n        return Object.keys(inputObj).map((key) => [key, inputObj[key]]);\n    },\n    /**\n     * Flatten a multi-level object into a single level.\n     * Duplicate keys are given a generated ID when overwriteKey is false.\n     * @param obj Object to flatten.\n     * @param overwriteKey Overwrite duplicate keys (default false).\n     */\n    flatten(obj: object, overwriteKey: boolean = false): Record<string, unknown> {\n        if (Object.keys(obj).length === 0) return {};\n        const rs: Record<string, unknown> = {};\n        const genId = (): string =>\n            (Date.now() / 1000 | 0).toString(16) +\n            \"xxxxxxxxxxxxxxxx\".replace(/x/g, () => (Math.random() * 16 | 0).toString(16));\n\n        const recurse = (o: object): void => {\n            for (const key in o) {\n                const val = (o as Record<string, unknown>)[key];\n                if (_isObj(val)) {\n                    recurse(val);\n                } else if (key in rs && !overwriteKey) {\n                    rs[genId()] = val;\n                } else {\n                    rs[key] = val;\n                }\n            }\n        };\n        recurse(obj);\n        return rs;\n    },\n    /**\n     * Find and return the deepest nested object.\n     * Returns the first deepest object found; or all if multi = true.\n     * @param obj Input object.\n     * @param multi Return all objects at the deepest level.\n     */\n    getDeepest(obj: object, multi: boolean = false): object | object[] {\n        if (Object.keys(obj).length === 0) return {};\n        let deepest = 0;\n        let rs: object = {};\n        const rsMulti: Record<number, object[]> = {};\n\n        const recurse = (o: object, depth: number = 0): void => {\n            depth++;\n            if (depth > deepest) {\n                deepest = depth;\n                rs = o;\n                if (multi) rsMulti[depth] = [o];\n            } else if (depth === deepest && multi) {\n                if (!rsMulti[depth]) rsMulti[depth] = [];\n                rsMulti[depth].push(o);\n            }\n            for (const key in o) {\n                const val = (o as Record<string, unknown>)[key];\n                if (_isObj(val)) recurse(val, depth);\n            }\n        };\n        recurse(obj);\n        return multi ? (rsMulti[deepest] ?? []) : rs;\n    },\n    /**\n     * Sum all numeric values in an object (supports single-level nesting via field).\n     * @param obj Input object.\n     * @param field Target field when values are nested objects.\n     */\n    sumAll(obj: object, field: string = \"\"): number {\n        let sum = 0;\n        for (const prop in obj) {\n            const raw = (obj as Record<string, unknown>)[prop];\n            const t = field !== \"\" ? (raw as Record<string, unknown>)[field] : raw;\n            if (!_isNumber(t)) throw new Error(`Value of property \"${prop}\" is not a number.`);\n            sum += t;\n        }\n        return sum;\n    },\n    /**\n     * Find the maximum numeric value in an object.\n     * @param obj Input object.\n     * @param field Target field when values are nested objects.\n     */\n    max(obj: object, field: string = \"\"): number {\n        let max = -Infinity;\n        for (const prop in obj) {\n            const raw = (obj as Record<string, unknown>)[prop];\n            const t = field !== \"\" ? (raw as Record<string, unknown>)[field] : raw;\n            if (!_isNumber(t)) throw new Error(`Value of property \"${prop}\" is not a number.`);\n            if (t > max) max = t;\n        }\n        return max;\n    },\n    /**\n     * Find the minimum numeric value in an object.\n     * @param obj Input object.\n     * @param field Target field when values are nested objects.\n     */\n    min(obj: object, field: string = \"\"): number | null {\n        let min: number | null = null;\n        for (const prop in obj) {\n            const raw = (obj as Record<string, unknown>)[prop];\n            const t = field !== \"\" ? (raw as Record<string, unknown>)[field] : raw;\n            if (!_isNumber(t)) throw new Error(`Value of property \"${prop}\" is not a number.`);\n            if (min === null || t < min) min = t;\n        }\n        return min;\n    },\n};\n","export const FromString = {\n    /**\n     * Copy string to clipboard.\n     * Only works in browser environments — silently does nothing in Node.js.\n     * @param textToCopy Text to copy.\n     */\n    copyToClipboard(textToCopy: string): void {\n        if (typeof navigator === \"undefined\") return;\n        navigator.clipboard.writeText(textToCopy);\n    },\n    /**\n     * Replace the first N characters with the given string.\n     * Does not mutate — returns a new string.\n     * @param n First N characters to replace (starts from 1)\n     * @param w Replacement string (must have length === n)\n     * @param str Input string\n     */\n    replaceFirst(n: number, w: string, str: string): string {\n        try {\n            if (n !== w.length) throw \"Length of replacement and target slot must be equal.\";\n            return `${w}${str.slice(n)}`;\n        } catch (err) {\n            console.log(`FromString.replaceFirst: ${err}`);\n            return \"\";\n        }\n    },\n    /**\n     * Replace the last N characters with the given string.\n     * Does not mutate — returns a new string.\n     * @param n Last N characters to replace (starts from 1)\n     * @param w Replacement string (must have length === n)\n     * @param str Input string\n     */\n    replaceLast(n: number, w: string, str: string): string {\n        try {\n            if (n !== w.length) throw \"Length of replacement and target slot must be equal.\";\n            return `${str.slice(0, str.length - n)}${w}`;\n        } catch (err) {\n            console.log(`FromString.replaceLast: ${err}`);\n            return \"\";\n        }\n    },\n    /**\n     * Parse an HTTP cookie string into a key/value object.\n     * @param cookie Raw cookie string\n     */\n    parseCookies(cookie: string): Record<string, string> {\n        const list: Record<string, string> = {};\n        cookie.split(\";\").forEach((part) => {\n            const parts = part.split(\"=\");\n            const key = parts.shift()?.trim();\n            if (key) list[key] = decodeURI(parts.join(\"=\"));\n        });\n        return list;\n    },\n    /**\n     * Remove all whitespace, symbols, and special characters.\n     * Leaves only 0–9 and a–Z.\n     * @param str Input string\n     */\n    deepClean(str: string): string {\n        return str.trim().replace(/[^0-9a-zA-Z]/g, \"\");\n    },\n    /**\n     * Count occurrences of a word within a string.\n     * @param str Input string.\n     * @param wordToCount Word to count.\n     * @param isolated Only count when the word appears as a standalone word (space-bounded).\n     */\n    count(str: string, wordToCount: string, isolated: boolean = false): number {\n        if (isolated) return str.split(` ${wordToCount} `).length - 1;\n        return str.split(wordToCount).length - 1;\n    },\n};\n","export interface FormatOptions {\n    time?: boolean;\n    asObject?: boolean;\n}\n\nexport interface ObjectifiedDate {\n    Y: number;\n    M: number;\n    D: number;\n    h?: number;\n    m?: number;\n    s?: number;\n}\n\nconst toMs = (h = 0, m = 0, s = 0, ms = 0): number =>\n    h * 3_600_000 + m * 60_000 + s * 1_000 + ms;\n\nconst toSeconds = (h = 0, m = 0, s = 0, ms = 0): number =>\n    h * 3600 + m * 60 + s + ms / 1000;\n\nconst toMinutes = (h = 0, m = 0, s = 0, ms = 0): number =>\n    h * 60 + m + s / 60 + ms / 60_000;\n\nconst toHours = (h = 0, m = 0, s = 0, ms = 0): number =>\n    h + m / 60 + s / 3600 + ms / 3_600_000;\n\nexport const isDateObject = (d: unknown): d is Date =>\n    Object.prototype.toString.call(d) === \"[object Date]\";\n\nexport const FromTime = {\n    jpnDayMap: {\n        0: \"日\", 1: \"月\", 2: \"火\", 3: \"水\",\n        4: \"木\", 5: \"金\", 6: \"土\",\n    } as Record<number, string>,\n\n    toMs, toSeconds, toMinutes, toHours,\n\n    /**\n     * Format a Date into \"YYYY-MM-DD HH:mm:ss\" (UTC).\n     * @param date Date object\n     * @param options time: include time portion; asObject: return ObjectifiedDate\n     */\n    format(date: Date, options: FormatOptions = {}): string | ObjectifiedDate {\n        const opts = { time: true, asObject: false, ...options };\n        const iso = date.toISOString();\n        if (opts.time) {\n            if (opts.asObject)\n                return {\n                    Y: Number(iso.slice(0, 4)),\n                    M: Number(iso.slice(5, 7)),\n                    D: Number(iso.slice(8, 10)),\n                    h: Number(iso.slice(11, 13)),\n                    m: Number(iso.slice(14, 16)),\n                    s: Number(iso.slice(17, 19)),\n                };\n            return `${iso.slice(0, 10)} ${iso.slice(11, 19)}`;\n        }\n        if (opts.asObject)\n            return {\n                Y: Number(iso.slice(0, 4)),\n                M: Number(iso.slice(5, 7)),\n                D: Number(iso.slice(8, 10)),\n            };\n        return iso.slice(0, 10);\n    },\n\n    /**\n     * Convert a date string to the shortest readable locale string.\n     * Year > Month > Day > Same day > time only.\n     * Currently supports \"jpn\" only.\n     * @param input Date string\n     * @param locale Language code (default \"jpn\")\n     */\n    toDateTimeShortLocale(input: string, locale: string = \"jpn\"): string {\n        const date = new Date(input);\n        const now = new Date();\n\n        if (now.getFullYear() !== date.getFullYear())\n            return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, \"0\")}-${String(date.getDate()).padStart(2, \"0\")}`;\n\n        if (now.getMonth() !== date.getMonth()) {\n            if (locale === \"jpn\") return `${date.getMonth() + 1}月${date.getDate()}日`;\n        }\n\n        if (now.getDate() !== date.getDate()) {\n            if (locale === \"jpn\") return `${date.getDate()}日${this.jpnDayMap[date.getDay()]}`;\n        }\n\n        if (locale === \"jpn\")\n            return `${String(date.getHours()).padStart(2, \"0\")}:${String(date.getMinutes()).padStart(2, \"0\")}`;\n\n        return \"\";\n    },\n};\n\nexport class cDate {\n    private _date: ObjectifiedDate;\n\n    constructor(date: string | Date) {\n        const d = isDateObject(date) ? date : new Date(date);\n        this._date = FromTime.format(d, { asObject: true }) as ObjectifiedDate;\n    }\n\n    /**\n     * Add N months to the stored date.\n     * @param n Number of months to add\n     */\n    addMonth(n: number): void {\n        // Use Date.UTC so the result stays consistent with toISOString() (UTC-based)\n        const d = new Date(Date.UTC(\n            this._date.Y,\n            (this._date.M - 1) + n,   // month is 0-indexed\n            this._date.D,\n            this._date.h ?? 0,\n            this._date.m ?? 0,\n            this._date.s ?? 0,\n        ));\n        this._date = FromTime.format(d, { asObject: true }) as ObjectifiedDate;\n    }\n\n    get dateTime(): string {\n        return (\n            `${this._date.Y}-` +\n            `${String(this._date.M).padStart(2, \"0\")}-` +\n            `${String(this._date.D).padStart(2, \"0\")} ` +\n            `${String(this._date.h ?? 0).padStart(2, \"0\")}:` +\n            `${String(this._date.m ?? 0).padStart(2, \"0\")}:` +\n            `${String(this._date.s ?? 0).padStart(2, \"0\")}`\n        );\n    }\n\n    get date(): string {\n        return (\n            `${this._date.Y}-` +\n            `${String(this._date.M).padStart(2, \"0\")}-` +\n            `${String(this._date.D).padStart(2, \"0\")}`\n        );\n    }\n\n    get time(): string {\n        return (\n            `${String(this._date.h ?? 0).padStart(2, \"0\")}:` +\n            `${String(this._date.m ?? 0).padStart(2, \"0\")}:` +\n            `${String(this._date.s ?? 0).padStart(2, \"0\")}`\n        );\n    }\n}\n","export interface VectorObject {\n    isVectorObject: boolean;\n    x: number,\n    y: number,\n    z: number,\n    // Maths\n    add: (x: VectorObject | number[] | number, y?: number, z?: number) => VectorObject,\n    limit: (max: number) => VectorObject,\n    div: (x: VectorObject | number[] | number, y?: number, z?: number) => VectorObject,\n    mult: (x: VectorObject | number[] | number, y?: number, z?: number) => VectorObject,\n    heading: () => number,\n    sub: (x: VectorObject | number[] | number, y?: number, z?: number) => VectorObject,\n    setMag: (n: number) => VectorObject,\n    magSq: () => number,\n    mag: () => number,\n    normalize: () => VectorObject,\n    copy: () => VectorObject,\n    dist: (x: VectorObject | number, y?: number) => number,\n    // exports\n    toVector2: () => number[]\n    toVector3: () => number[]\n}\n/**\n * Structure and logic are based on p5js.\n */\nexport const createVector = (x: number, y: number, z: number = 0) => {\n    const vectorObject: VectorObject = {\n        isVectorObject: true,\n        x, y, z,\n        /**\n         * @param x { VectorObject | Number[] | number }\n         * @returns \n         */\n        add(x: any, y: number = 0, z: number = 0) {\n            if (x instanceof Array) {\n                this.x += x[0] || 0;\n                this.y += x[1] || 0;\n                this.z += x[2] || 0;\n                return this;\n            }\n            if (x.isVectorObject) {\n                this.x += x.x || 0;\n                this.y += x.y || 0;\n                this.z += x.z || 0;\n                return this;\n            }\n            this.x += x || 0;\n            this.y += y || 0;\n            this.z += z || 0;\n            return this;\n        },\n        limit(max: number) {\n            const mSq = this.magSq();\n            if (mSq > max * max) {\n                this.div(Math.sqrt(mSq)) //normalize it\n                    .mult(max);\n            }\n            return this;\n        },\n        /**\n         * \n         * @param x { VectorObject | Number[] | number }\n         * @param y { number }\n         * @param z { number }\n         * @returns \n         */\n        div(x: any, y: number = 0, z: number = 0) {\n            if (x.isVectorObject) {\n                if (\n                    Number.isFinite(x.x) &&\n                    Number.isFinite(x.y) &&\n                    Number.isFinite(x.z) &&\n                    typeof x.x === 'number' &&\n                    typeof x.y === 'number' &&\n                    typeof x.z === 'number'\n                ) {\n                    this.x /= x.x;\n                    this.y /= x.y;\n                    this.z /= x.z;\n                }\n                return this;\n            }\n            if (x instanceof Array) {\n                if (\n                    x.every(element => Number.isFinite(element)) &&\n                    x.every(element => typeof element === 'number')\n                ) {\n                    if (x.some(element => element === 0)) {\n                        console.warn('Divide by 0');\n                        return this;\n                    }\n\n                    if (x.length === 1) {\n                        this.x /= x[0];\n                        this.y /= x[0];\n                        this.z /= x[0];\n                    } else if (x.length === 2) {\n                        this.x /= x[0];\n                        this.y /= x[1];\n                    } else if (x.length === 3) {\n                        this.x /= x[0];\n                        this.y /= x[1];\n                        this.z /= x[2];\n                    }\n                } else {\n                    console.warn(\n                        'x contains components that are either undefined or not finite numbers'\n                    );\n                }\n\n                return this;\n            }\n\n            const vectorComponents = [...arguments];\n            if (\n                vectorComponents.every(element => Number.isFinite(element)) &&\n                vectorComponents.every(element => typeof element === 'number')\n            ) {\n                if (vectorComponents.some(element => element === 0)) {\n                    console.warn('Divide by 0');\n                    return this;\n                }\n\n                if (arguments.length === 1) {\n                    this.x /= x;\n                    this.y /= x;\n                    this.z /= x;\n                }\n                if (arguments.length === 2) {\n                    this.x /= x;\n                    this.y /= y;\n                }\n                if (arguments.length === 3) {\n                    this.x /= x;\n                    this.y /= y;\n                    this.z /= z;\n                }\n            } else {\n                console.warn(\n                    'x, y, or z arguments are either undefined or not a finite number'\n                );\n            }\n\n            return this;\n        },\n        /**\n        * \n        * @param x { VectorObject | Number[] | number }\n        * @param y { number }\n        * @param z { number }\n        * @returns \n        */\n        mult(x: any, y: number = 0, z: number = 0) {\n            if (x.isVectorObject) {\n                // new p5.Vector will check that values are valid upon construction but it's possible\n                // that someone could change the value of a component after creation, which is why we still\n                // perform this check\n                if (\n                    Number.isFinite(x.x) &&\n                    Number.isFinite(x.y) &&\n                    Number.isFinite(x.z) &&\n                    typeof x.x === 'number' &&\n                    typeof x.y === 'number' &&\n                    typeof x.z === 'number'\n                ) {\n                    this.x *= x.x;\n                    this.y *= x.y;\n                    this.z *= x.z;\n                } else {\n                    console.warn(\n                        'x contains components that are either undefined or not finite numbers'\n                    );\n                }\n                return this;\n            }\n            if (x instanceof Array) {\n                if (\n                    x.every(element => Number.isFinite(element)) &&\n                    x.every(element => typeof element === 'number')\n                ) {\n                    if (x.length === 1) {\n                        this.x *= x[0];\n                        this.y *= x[0];\n                        this.z *= x[0];\n                    } else if (x.length === 2) {\n                        this.x *= x[0];\n                        this.y *= x[1];\n                    } else if (x.length === 3) {\n                        this.x *= x[0];\n                        this.y *= x[1];\n                        this.z *= x[2];\n                    }\n                } else {\n                    console.warn(\n                        'x contains elements that are either undefined or not finite numbers'\n                    );\n                }\n                return this;\n            }\n\n            const vectorComponents = [...arguments];\n            if (\n                vectorComponents.every(element => Number.isFinite(element)) &&\n                vectorComponents.every(element => typeof element === 'number')\n            ) {\n                if (arguments.length === 1) {\n                    this.x *= x;\n                    this.y *= x;\n                    this.z *= x;\n                }\n                if (arguments.length === 2) {\n                    this.x *= x;\n                    this.y *= y;\n                }\n                if (arguments.length === 3) {\n                    this.x *= x;\n                    this.y *= y;\n                    this.z *= z;\n                }\n            } else {\n                console.warn(\n                    'x, y, or z arguments are either undefined or not a finite number'\n                );\n            }\n\n            return this;\n        },\n        heading() {\n            const h = Math.atan2(this.y, this.x);\n            return h;\n        },\n        /*\n        * @method sub\n        * @param  {VectorObject | Number[]} value the vector to subtract\n        * @chainable\n        */\n        sub(x: any, y: number = 0, z: number = 0) {\n            if (x.isVectorObject) {\n                this.x -= x.x || 0;\n                this.y -= x.y || 0;\n                this.z -= x.z || 0;\n                return this;\n            }\n            if (x instanceof Array) {\n                this.x -= x[0] || 0;\n                this.y -= x[1] || 0;\n                this.z -= x[2] || 0;\n                return this;\n            }\n            this.x -= x || 0;\n            this.y -= y || 0;\n            this.z -= z || 0;\n            return this;\n        },\n        setMag(n) {\n            return this.normalize().mult(n);\n        },\n        magSq() {\n            const x = this.x;\n            const y = this.y;\n            const z = this.z;\n            return x * x + y * y + z * z;\n        },\n        mag() {\n            return Math.sqrt(this.magSq());\n        },\n        normalize() {\n            const len = this.mag();\n            // here we multiply by the reciprocal instead of calling 'div()'\n            // since div duplicates this zero check.\n            if (len !== 0) this.mult(1 / len);\n            return this;\n        },\n        copy() {\n            return createVector(this.x, this.y, this.z);\n        },\n        dist(x: any, y: number = 0) {\n            if (x.isVectorObject) {\n                return Math.hypot(x.x - this.x, x.y - this.y); \n            }\n            return Math.hypot(x - this.x, y - this.y); \n        },\n        toVector2(){ return [this.x, this.y] },\n        toVector3(){ return [this.x, this.y, this.z] },\n    }\n    return vectorObject;\n}\n\nexport const FromVector = { create: createVector }\n","export class Gacha<T = unknown> {\n    private entries: Array<{ item: T; accumulatedWeight: number }> = [];\n    private totalWeight = 0;\n\n    /**\n     * Add an item with a given weight.\n     * Higher weight = higher probability of being drawn.\n     * @param item Item to add.\n     * @param weight Relative weight.\n     */\n    addEntries(item: T, weight: number): void {\n        this.totalWeight += weight;\n        this.entries.push({ item, accumulatedWeight: this.totalWeight });\n    }\n\n    /**\n     * Draw a random item, weighted by the entries added.\n     * Returns undefined if no entries have been added.\n     */\n    getRandom(): T | undefined {\n        const r = Math.random() * this.totalWeight;\n        return this.entries.find((e) => e.accumulatedWeight >= r)?.item;\n    }\n}\n","import { AlphabateOptions } from \"./types\";\n\n/**\n * Generator that generates all kinds of values.\n * alphanum\n * objectId\n * int\n * array\n */\ninterface generateArrayOptions{\n    min?: number,\n    max?: number\n}\nexport const Generate = {\n    /**\n     * Generates a string consist of alphanumeric characters of given length\n     * @param {number}[len=4] Length of the string \n     * @returns Alphanumeric string\n     */\n    alphanum(len: number = 4): string{\n        const chars: string ='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n        if(len === 1) return chars[Math.floor(Math.random() * chars.length)];\n        let result = '';\n        for (let i = len; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];\n        return result;\n    },\n     /**\n     * Generates Object Id.\n     * @returns \n     */\n    objectId (): string{\n        const timestamp: string = (new Date().getTime() / 1000 | 0).toString(16);\n        return timestamp + 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, () => {\n            return (Math.random() * 16 | 0).toString(16);\n        }).toLowerCase();\n    },\n    /**\n     * Generates random integer in a given range of [).\n     * Includes Min, exclude Max.\n     * @param min \n     * @param max \n     * @returns number\n     */\n    int(min: number, max: number): number{\n        let result: number = 0;\n        result = Math.floor(Math.random() * (max - min))+ min\n        return result\n    },\n    /**\n     * Generate random number.\n     * @param min \n     * @param max \n     * @returns \n     */\n    random(min: number, max: number): number{\n        return Math.random() * (max - min) + min;\n    },\n    /**\n     *  Generates an array with random integer as elemnt of desired length.\n     *  @param len @required Length of the array.\n     *  @returns Array of a given length\n     */\n    array(len: number, ops:generateArrayOptions = {}){\n        const defaultOps: generateArrayOptions = {\n            min:0,\n            max: 11,\n        }\n        const mergedOps: generateArrayOptions = {...defaultOps, ...ops};\n        const rs: number[] = [];\n        for(let i = 0; i< len ; i++)\n            rs.push(this.int(mergedOps.min ?? 0, mergedOps.max ?? 11))\n        return rs\n    },\n    /**\n     * Generates random alphabate of specified length.\n     * @param {number} [len=5] Length of the string. default = 5,\n     * @param {AlphabateOptions} [options] Options\n     */\n    alphabate(\n        len: number = 5,\n        options: AlphabateOptions = {}\n    ): string{\n        const op: AlphabateOptions = {\n            lowercase: true,\n            uppercase: true\n        }\n        Object.assign(op, options);\n        let result = '';\n        const lowerCaseCharacters = \"abcdefghijklmnopqrstuvwxyz\";\n        const upperCaseCharacters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n        let characterPool = \"\";\n        if(op.lowercase) characterPool += lowerCaseCharacters;\n        if(op.uppercase) characterPool += upperCaseCharacters;\n        const charactersLength = characterPool.length;\n        for (let i = 0; i<len; i++){\n            result += characterPool.charAt(Math.floor(Math.random() * charactersLength));\n        }\n        return result;\n    },\n    /**\n     * @returns Current Date Time with a format of \"YYYY-MM-DD\"\"\n     */\n    currentDate(): string{\n        const t: Date = new Date();\n        return `${t.getFullYear()}-${t.getMonth()+1}-${t.getDate()}`;\n    },\n    /**\n     * @returns Current Date Time with a format of \"HH:mm:ss\"\"\n     */\n    currentTime(): string{\n        const t: Date = new Date();\n        return `${String(t.getHours()).padStart(2,\"0\")}:${String(t.getMinutes()).padStart(2,\"0\")}:${String(t.getSeconds()).padStart(2,\"0\")}`;\n    },\n    /**\n     * @returns Current Date Time with a format of \"YYYY-MM-DD HH:mm:ss\"\"\n     */\n    currentDateTime(): string{\n        const t: Date = new Date();\n        return `${t.getFullYear()}-${t.getMonth()+1}-${t.getDate()} ${String(t.getHours()).padStart(2,\"0\")}:${String(t.getMinutes()).padStart(2,\"0\")}:${String(t.getSeconds()).padStart(2,\"0\")}`;\n    },\n    /**\n     * Generates and return list of date of specified day.\n     * Ex: All Sunday and Monday of 2022-01-01 to 2022-03-01\n     * @param f  From : YYYY-MM-DD\n     * @param t  To : YYYY-MM-DD\n     * @param days  number[] 0 ~ 6 Sunday ~ Saturday.\n     */\n    listOfDateOfDays(f: string, t: string, days: number[]){\n        let fromDate = new Date(f);\n        const toData = new Date(t);\n        let fromISO = fromDate.toISOString();\n        const toISO = toData.toISOString();\n        const rs: string[] = [];\n        while(true){\n            if(fromISO > toISO) break;\n            if(days.includes(fromDate.getDay()))\n                rs.push(fromISO.slice(0,10))\n            fromDate.setDate(fromDate.getDate()+1);\n            fromISO = fromDate.toISOString();\n        }\n        return rs;\n    },\n    /**\n     * Fast UUID generator, RFC4122 version 4 compliant.\n     * Copied and rewritted from the below. Thanks for such\n     * elegant code.\n     * @author Jeff Ward (jcward.com).\n     * @license MIT license\n     * @link http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n     **/\n    uuidv4(){\n        const lut: string[] = []; \n        for (let i=0; i<256; i++) { lut[i] = (i<16?'0':'')+(i).toString(16); }\n        const d0 = Math.random()*0xffffffff|0;\n        const d1 = Math.random()*0xffffffff|0;\n        const d2 = Math.random()*0xffffffff|0;\n        const d3 = Math.random()*0xffffffff|0;\n        return (\n            lut[d0&0xff]+lut[d0>>8&0xff]+lut[d0>>16&0xff]+lut[d0>>24&0xff]+'-'+\n            lut[d1&0xff]+lut[d1>>8&0xff]+'-'+lut[d1>>16&0x0f|0x40]+lut[d1>>24&0xff]+'-'+\n            lut[d2&0x3f|0x80]+lut[d2>>8&0xff]+'-'+lut[d2>>16&0xff]+lut[d2>>24&0xff]+\n            lut[d3&0xff]+lut[d3>>8&0xff]+lut[d3>>16&0xff]+lut[d3>>24&0xff]\n        );\n    }\n}\n","import { Generate } from '../generate/generate';\nimport { FromArray } from '../array/index';\n\n// ─── 1-D (original, kept for backward compatibility) ────────────────────────\n\ninterface Cluster {\n    id: number;\n    position: number;\n    childs: number[];\n}\n\n/**\n * Simple 1D K-means clustering.\n * Runs multiple attempts and returns the best result (most balanced cluster sizes).\n * @param k Number of clusters (default 2).\n * @param arr Input data points.\n * @param attempts Number of attempts to run (default 1).\n */\nexport const KMeans = (k: number = 2, arr: number[], attempts: number = 1): Cluster[] => {\n    if (arr.length === 0) throw new Error(\"Empty array.\");\n\n    const max = Math.max(...arr);\n    const min = Math.min(...arr);\n    const variations: Cluster[][] = [];\n\n    for (let attempt = 0; attempt < attempts; attempt++) {\n        let clusters: Cluster[] = [];\n        for (let i = 0; i < k; i++)\n            clusters.push({ id: i + 1, position: Generate.int(min, max + 1), childs: [] });\n\n        let previousClusters: Cluster[] = [];\n        while (!samePositions(clusters, previousClusters)) {\n            previousClusters = clusters.map((c) => ({ ...c }));\n            for (const c of clusters) c.childs = [];\n            clusters = assignPoints(clusters, arr);\n            clusters = recalibrate(clusters);\n        }\n        variations.push(clusters);\n    }\n\n    if (variations.length === 1) return variations[0];\n\n    // Pick the variation with the most balanced cluster sizes\n    const scores = variations.map((v) => {\n        let score = 0;\n        for (let i = 0; i < v.length - 1; i++)\n            score += Math.abs(v[i + 1].childs.length - v[i].childs.length);\n        return score;\n    });\n    const bestIndex = FromArray.getSmallest(scores, 1, true)[0];\n    return variations[bestIndex];\n};\n\nfunction samePositions(clusters: Cluster[], prev: Cluster[]): boolean {\n    if (prev.length === 0) return false;\n    return clusters.every((c, i) => c.position === prev[i].position);\n}\n\nfunction assignPoints(clusters: Cluster[], arr: number[]): Cluster[] {\n    for (const point of arr) {\n        const distances = clusters.map((c) => Math.abs(c.position - point));\n        const nearest = FromArray.getSmallest(distances, 1, true)[0];\n        clusters[nearest].childs.push(point);\n    }\n    return clusters;\n}\n\nfunction recalibrate(clusters: Cluster[]): Cluster[] {\n    for (const c of clusters) {\n        if (c.childs.length === 0) continue;\n        const mean = c.childs.reduce((a, b) => a + b, 0) / c.childs.length;\n        c.position = Number(mean.toFixed(2));\n    }\n    return clusters;\n}\n\n// ─── N-dimensional ──────────────────────────────────────────────────────────\n\nexport interface NDCluster<T> {\n    /** 1-based cluster id */\n    id: number;\n    /** Mean position in feature space */\n    centroid: number[];\n    /** Original data items assigned to this cluster */\n    members: T[];\n    /** Number of members */\n    size: number;\n    /**\n     * Within-cluster sum of squares — sum of squared Euclidean distances\n     * from each member to the centroid. Lower means a tighter, more\n     * cohesive cluster.\n     */\n    wcss: number;\n}\n\nexport type FeatureExtractor<T> = (item: T) => number[];\n\nexport interface KMeansNDOptions {\n    /**\n     * Number of independent runs. The run with the lowest total WCSS wins.\n     * More attempts → more reliable result at the cost of compute.\n     * Default: 5.\n     */\n    attempts?: number;\n    /**\n     * Centroid initialisation strategy.\n     * - `'kmeans++'` (default) spreads initial centroids far apart,\n     *   which dramatically reduces the chance of a poor local minimum.\n     * - `'random'` picks k random data points as starting centroids.\n     */\n    init?: 'random' | 'kmeans++';\n    /**\n     * Hard cap on iteration count per attempt.\n     * Default: 300.\n     */\n    maxIter?: number;\n}\n\n/**\n * N-dimensional K-means clustering suitable for production analytics\n * (customer segmentation, product segmentation, etc.).\n *\n * @param k Number of clusters.\n * @param data Array of items to cluster.\n * @param features Function that extracts a numeric feature vector from each item.\n *   All vectors must have the same length.\n * @param options Optional tuning parameters.\n *\n * @example\n * // Customer segmentation by recency, frequency, monetary value (RFM)\n * const segments = KMeansND(3, customers, (c) => [c.recency, c.frequency, c.spend]);\n *\n * @example\n * // Works with plain number arrays too\n * const result = KMeansND(2, [[1,2],[3,4],[100,200]], (x) => x);\n */\nexport const KMeansND = <T>(\n    k: number,\n    data: T[],\n    features: FeatureExtractor<T>,\n    options: KMeansNDOptions = {},\n): NDCluster<T>[] => {\n    if (data.length === 0) throw new Error(\"Empty data array.\");\n    if (k < 1) throw new Error(\"k must be >= 1.\");\n    if (k > data.length) throw new Error(\"k cannot exceed the number of data points.\");\n\n    const { attempts = 5, init = 'kmeans++', maxIter = 300 } = options;\n\n    const points = data.map(features);\n    const dims = points[0].length;\n    if (points.some((p) => p.length !== dims))\n        throw new Error(\"All feature vectors must have the same length.\");\n\n    let bestClusters: NDCluster<T>[] | null = null;\n    let bestTotalWCSS = Infinity;\n\n    for (let attempt = 0; attempt < attempts; attempt++) {\n        const centroids =\n            init === 'kmeans++'\n                ? initKMeansPlusPlus(points, k)\n                : initRandom(points, k);\n\n        const memberIndices: number[][] = Array.from({ length: k }, () => []);\n        let prevCentroids: number[][] = [];\n        let iter = 0;\n\n        while (!centroidsConverged(centroids, prevCentroids) && iter < maxIter) {\n            prevCentroids = centroids.map((c) => [...c]);\n            for (const m of memberIndices) m.length = 0;\n\n            // Assign each point to the nearest centroid\n            for (let p = 0; p < points.length; p++) {\n                const dists = centroids.map((c) => euclidean(c, points[p]));\n                let nearest = 0;\n                for (let c = 1; c < k; c++)\n                    if (dists[c] < dists[nearest]) nearest = c;\n                memberIndices[nearest].push(p);\n            }\n\n            // Re-initialise empty clusters to a random data point\n            for (let c = 0; c < k; c++) {\n                if (memberIndices[c].length === 0) {\n                    const randomIdx = Math.floor(Math.random() * points.length);\n                    memberIndices[c].push(randomIdx);\n                }\n            }\n\n            // Recompute centroids as mean of assigned points\n            for (let c = 0; c < k; c++) {\n                const newCentroid = new Array(dims).fill(0);\n                for (const idx of memberIndices[c])\n                    for (let d = 0; d < dims; d++)\n                        newCentroid[d] += points[idx][d];\n                for (let d = 0; d < dims; d++)\n                    newCentroid[d] /= memberIndices[c].length;\n                centroids[c] = newCentroid;\n            }\n\n            iter++;\n        }\n\n        // Build result clusters and compute WCSS\n        const clusters: NDCluster<T>[] = centroids.map((centroid, c) => {\n            const members = memberIndices[c].map((i) => data[i]);\n            const wcss = memberIndices[c].reduce(\n                (sum, i) => sum + euclideanSq(points[i], centroid),\n                0,\n            );\n            return { id: c + 1, centroid, members, size: members.length, wcss };\n        });\n\n        const totalWCSS = clusters.reduce((s, c) => s + c.wcss, 0);\n        if (totalWCSS < bestTotalWCSS) {\n            bestTotalWCSS = totalWCSS;\n            bestClusters = clusters;\n        }\n    }\n\n    return bestClusters!;\n};\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction euclidean(a: number[], b: number[]): number {\n    return Math.sqrt(euclideanSq(a, b));\n}\n\nfunction euclideanSq(a: number[], b: number[]): number {\n    let sum = 0;\n    for (let i = 0; i < a.length; i++) sum += (a[i] - b[i]) ** 2;\n    return sum;\n}\n\n/** K-means++ centroid seeding for better convergence. */\nfunction initKMeansPlusPlus(points: number[][], k: number): number[][] {\n    const centroids: number[][] = [];\n    // Pick first centroid at random\n    centroids.push([...points[Math.floor(Math.random() * points.length)]]);\n\n    for (let c = 1; c < k; c++) {\n        // For each point, D² = squared distance to nearest existing centroid\n        const weights = points.map((p) => {\n            let minDist = Infinity;\n            for (const centroid of centroids) {\n                const d = euclideanSq(p, centroid);\n                if (d < minDist) minDist = d;\n            }\n            return minDist;\n        });\n        // Weighted random selection\n        centroids.push([...weightedChoice(points, weights)]);\n    }\n    return centroids;\n}\n\nfunction initRandom(points: number[][], k: number): number[][] {\n    const indices = new Set<number>();\n    while (indices.size < k)\n        indices.add(Math.floor(Math.random() * points.length));\n    return [...indices].map((i) => [...points[i]]);\n}\n\nfunction weightedChoice(points: number[][], weights: number[]): number[] {\n    const total = weights.reduce((a, b) => a + b, 0);\n    let r = Math.random() * total;\n    for (let i = 0; i < weights.length; i++) {\n        r -= weights[i];\n        if (r <= 0) return points[i];\n    }\n    return points[points.length - 1];\n}\n\nconst CONVERGENCE_EPSILON = 1e-10;\n\nfunction centroidsConverged(curr: number[][], prev: number[][]): boolean {\n    if (prev.length === 0) return false;\n    return curr.every((c, i) => euclidean(c, prev[i]) < CONVERGENCE_EPSILON);\n}\n","// ─── Types ────────────────────────────────────────────────────────────────────\n\n/** A single candidate solution. */\nexport interface Individual<G> {\n    /** The gene sequence representing a solution. */\n    genes: G[];\n    /** Fitness score. Higher values = more fit (by convention). */\n    fitness: number;\n}\n\nexport interface GARunOptions<G> {\n    /** Initial population (already evaluated). */\n    population: Individual<G>[];\n    /**\n     * Returns a fitness score for a gene sequence.\n     * Higher = more fit. Called every generation.\n     */\n    fitnessFn: (genes: G[]) => number;\n    /** Number of generations to run. */\n    generations: number;\n    /** Probability [0, 1] that each gene mutates. Default: 0.01 */\n    mutationRate?: number;\n    /**\n     * Called when a gene should be replaced by a random one.\n     * Required for the `random` mutation strategy.\n     */\n    geneFactory?: () => G;\n    /** Selection strategy. Default: `'tournament'` */\n    selection?: SelectionStrategy;\n    /** Tournament size when using tournament selection. Default: 3 */\n    tournamentSize?: number;\n    /** Crossover strategy. Default: `'single-point'` */\n    crossover?: CrossoverStrategy;\n    /**\n     * Fraction of the population that advances to the next generation unchanged.\n     * Default: 0.1  (10% elitism)\n     */\n    elitismRate?: number;\n    /**\n     * Called after every generation with the current best individual and\n     * generation index (0-based). Useful for logging progress.\n     */\n    onGeneration?: (best: Individual<G>, generation: number) => void;\n}\n\nexport interface GAResult<G> {\n    /** Best individual found across all generations. */\n    best: Individual<G>;\n    /** Final population (sorted best-first). */\n    finalPopulation: Individual<G>[];\n    /** Best fitness score of each generation. */\n    history: number[];\n}\n\nexport type SelectionStrategy = 'tournament' | 'roulette' | 'rank';\nexport type CrossoverStrategy = 'single-point' | 'two-point' | 'uniform';\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction cloneIndividual<G>(ind: Individual<G>): Individual<G> {\n    return { genes: [...ind.genes], fitness: ind.fitness };\n}\n\nfunction randInt(min: number, max: number): number {\n    return Math.floor(Math.random() * (max - min)) + min;\n}\n\n// ─── Population ──────────────────────────────────────────────────────────────\n\n/**\n * Creates a population of random individuals.\n *\n * @param size Number of individuals.\n * @param length Number of genes per individual.\n * @param geneFactory Returns a single random gene value.\n *\n * @example\n * // Binary-encoded population\n * const pop = GA.createPopulation(50, 20, () => Math.random() < 0.5 ? 0 : 1);\n *\n * @example\n * // Real-valued population in [-5, 5]\n * const pop = GA.createPopulation(100, 10, () => Math.random() * 10 - 5);\n */\nfunction createPopulation<G>(\n    size: number,\n    length: number,\n    geneFactory: () => G,\n): Individual<G>[] {\n    return Array.from({ length: size }, () => ({\n        genes: Array.from({ length }, geneFactory),\n        fitness: 0,\n    }));\n}\n\n// ─── Evaluation ──────────────────────────────────────────────────────────────\n\n/**\n * Evaluates and assigns fitness to every individual in the population.\n * Returns a new array (does not mutate the original).\n *\n * @example\n * const evaluated = GA.evaluate(pop, (genes) => genes.filter(Boolean).length);\n */\nfunction evaluate<G>(\n    population: Individual<G>[],\n    fitnessFn: (genes: G[]) => number,\n): Individual<G>[] {\n    return population.map((ind) => ({ ...ind, fitness: fitnessFn(ind.genes) }));\n}\n\n// ─── Sorting / Statistics ─────────────────────────────────────────────────────\n\n/**\n * Sorts the population by fitness.\n * @param order `'desc'` (default) = best first, `'asc'` = worst first.\n */\nfunction sortPopulation<G>(\n    population: Individual<G>[],\n    order: 'asc' | 'desc' = 'desc',\n): Individual<G>[] {\n    const sorted = [...population];\n    sorted.sort((a, b) => order === 'desc' ? b.fitness - a.fitness : a.fitness - b.fitness);\n    return sorted;\n}\n\n/**\n * Returns the top-n fittest individuals (best-first).\n */\nfunction best<G>(population: Individual<G>[], n: number = 1): Individual<G>[] {\n    return sortPopulation(population).slice(0, n);\n}\n\n// ─── Selection ───────────────────────────────────────────────────────────────\n\n/**\n * Tournament selection: picks `tournamentSize` random individuals and returns\n * the fittest among them.\n */\nfunction tournamentSelect<G>(\n    population: Individual<G>[],\n    tournamentSize: number = 3,\n): Individual<G> {\n    let winner = population[randInt(0, population.length)];\n    for (let i = 1; i < tournamentSize; i++) {\n        const contender = population[randInt(0, population.length)];\n        if (contender.fitness > winner.fitness) winner = contender;\n    }\n    return winner;\n}\n\n/**\n * Fitness-proportionate (roulette wheel) selection.\n * Requires all fitness values to be non-negative.\n */\nfunction rouletteSelect<G>(population: Individual<G>[]): Individual<G> {\n    const total = population.reduce((s, ind) => s + Math.max(0, ind.fitness), 0);\n    if (total === 0) return population[randInt(0, population.length)];\n    let r = Math.random() * total;\n    for (const ind of population) {\n        r -= Math.max(0, ind.fitness);\n        if (r <= 0) return ind;\n    }\n    return population[population.length - 1];\n}\n\n/**\n * Rank-based selection: selection probability is proportional to rank, not\n * raw fitness. Helps avoid premature convergence.\n */\nfunction rankSelect<G>(population: Individual<G>[]): Individual<G> {\n    const sorted = sortPopulation(population, 'asc'); // worst first → rank 1\n    const n = sorted.length;\n    const totalRank = (n * (n + 1)) / 2;\n    let r = Math.random() * totalRank;\n    for (let i = 0; i < sorted.length; i++) {\n        r -= (i + 1);\n        if (r <= 0) return sorted[i];\n    }\n    return sorted[sorted.length - 1];\n}\n\nfunction select<G>(\n    population: Individual<G>[],\n    strategy: SelectionStrategy,\n    tournamentSize: number,\n): Individual<G> {\n    switch (strategy) {\n        case 'roulette': return rouletteSelect(population);\n        case 'rank': return rankSelect(population);\n        default: return tournamentSelect(population, tournamentSize);\n    }\n}\n\n// ─── Crossover ───────────────────────────────────────────────────────────────\n\n/**\n * Single-point crossover: splits both parents at a random point and swaps tails.\n */\nfunction singlePointCrossover<G>(\n    p1: Individual<G>,\n    p2: Individual<G>,\n): [Individual<G>, Individual<G>] {\n    const len = p1.genes.length;\n    const cut = randInt(1, len);\n    return [\n        { genes: [...p1.genes.slice(0, cut), ...p2.genes.slice(cut)], fitness: 0 },\n        { genes: [...p2.genes.slice(0, cut), ...p1.genes.slice(cut)], fitness: 0 },\n    ];\n}\n\n/**\n * Two-point crossover: swaps the segment between two random cut points.\n */\nfunction twoPointCrossover<G>(\n    p1: Individual<G>,\n    p2: Individual<G>,\n): [Individual<G>, Individual<G>] {\n    const len = p1.genes.length;\n    let a = randInt(0, len);\n    let b = randInt(0, len);\n    if (a > b) [a, b] = [b, a];\n    const c1 = [\n        ...p1.genes.slice(0, a),\n        ...p2.genes.slice(a, b),\n        ...p1.genes.slice(b),\n    ];\n    const c2 = [\n        ...p2.genes.slice(0, a),\n        ...p1.genes.slice(a, b),\n        ...p2.genes.slice(b),\n    ];\n    return [\n        { genes: c1, fitness: 0 },\n        { genes: c2, fitness: 0 },\n    ];\n}\n\n/**\n * Uniform crossover: each gene is independently taken from either parent\n * with equal probability.\n * @param mixRate Probability of taking each gene from parent2 (default 0.5).\n */\nfunction uniformCrossover<G>(\n    p1: Individual<G>,\n    p2: Individual<G>,\n    mixRate: number = 0.5,\n): [Individual<G>, Individual<G>] {\n    const c1: G[] = [];\n    const c2: G[] = [];\n    for (let i = 0; i < p1.genes.length; i++) {\n        if (Math.random() < mixRate) {\n            c1.push(p2.genes[i]);\n            c2.push(p1.genes[i]);\n        } else {\n            c1.push(p1.genes[i]);\n            c2.push(p2.genes[i]);\n        }\n    }\n    return [\n        { genes: c1, fitness: 0 },\n        { genes: c2, fitness: 0 },\n    ];\n}\n\nfunction crossover<G>(\n    p1: Individual<G>,\n    p2: Individual<G>,\n    strategy: CrossoverStrategy,\n): [Individual<G>, Individual<G>] {\n    switch (strategy) {\n        case 'two-point': return twoPointCrossover(p1, p2);\n        case 'uniform': return uniformCrossover(p1, p2);\n        default: return singlePointCrossover(p1, p2);\n    }\n}\n\n// ─── Mutation ────────────────────────────────────────────────────────────────\n\n/**\n * Bit-flip mutation for boolean/binary-encoded individuals.\n * Each gene is flipped with probability `rate`.\n */\nfunction bitFlipMutate(\n    individual: Individual<number | boolean>,\n    rate: number,\n): Individual<number | boolean> {\n    const genes = individual.genes.map((g) =>\n        Math.random() < rate ? (g ? 0 : 1) : g,\n    );\n    return { genes, fitness: 0 };\n}\n\n/**\n * Swap mutation: randomly selects two positions and swaps them.\n * Applied once if `Math.random() < rate`.\n * Useful for permutation-encoded problems (TSP, scheduling).\n */\nfunction swapMutate<G>(\n    individual: Individual<G>,\n    rate: number,\n): Individual<G> {\n    if (Math.random() >= rate) return cloneIndividual(individual);\n    const genes = [...individual.genes];\n    const i = randInt(0, genes.length);\n    let j = randInt(0, genes.length - 1);\n    if (j >= i) j++;\n    [genes[i], genes[j]] = [genes[j], genes[i]];\n    return { genes, fitness: 0 };\n}\n\n/**\n * Inversion mutation: reverses a random sub-sequence of genes.\n * Applied once if `Math.random() < rate`.\n */\nfunction inversionMutate<G>(\n    individual: Individual<G>,\n    rate: number,\n): Individual<G> {\n    if (Math.random() >= rate) return cloneIndividual(individual);\n    const genes = [...individual.genes];\n    let a = randInt(0, genes.length);\n    let b = randInt(0, genes.length);\n    if (a > b) [a, b] = [b, a];\n    genes.splice(a, b - a + 1, ...genes.slice(a, b + 1).reverse());\n    return { genes, fitness: 0 };\n}\n\n/**\n * Random-reset mutation: replaces each gene with a new random value with\n * probability `rate`. Works for any encoding.\n * @param geneFactory Returns a random gene value.\n */\nfunction randomResetMutate<G>(\n    individual: Individual<G>,\n    rate: number,\n    geneFactory: () => G,\n): Individual<G> {\n    const genes = individual.genes.map((g) =>\n        Math.random() < rate ? geneFactory() : g,\n    );\n    return { genes, fitness: 0 };\n}\n\n// ─── Evolution Loop ───────────────────────────────────────────────────────────\n\n/**\n * Runs a full genetic algorithm evolution loop.\n *\n * @example\n * // Maximise the number of 1-bits in a 20-gene binary chromosome\n * const pop = GA.evaluate(\n *   GA.createPopulation(50, 20, () => Math.round(Math.random())),\n *   (genes) => genes.reduce((a, b) => a + b, 0),\n * );\n *\n * const result = GA.run({\n *   population: pop,\n *   fitnessFn: (genes) => genes.reduce((a, b) => a + b, 0),\n *   generations: 100,\n *   mutationRate: 0.02,\n *   geneFactory: () => Math.round(Math.random()),\n * });\n *\n * console.log(result.best.genes, result.best.fitness);\n */\nfunction run<G>(options: GARunOptions<G>): GAResult<G> {\n    const {\n        fitnessFn,\n        generations,\n        mutationRate = 0.01,\n        geneFactory,\n        selection: selectionStrategy = 'tournament',\n        tournamentSize = 3,\n        crossover: crossoverStrategy = 'single-point',\n        elitismRate = 0.1,\n        onGeneration,\n    } = options;\n\n    let population = [...options.population];\n    const history: number[] = [];\n    let overallBest: Individual<G> = sortPopulation(population)[0];\n\n    for (let gen = 0; gen < generations; gen++) {\n        const popSize = population.length;\n        const eliteCount = Math.max(1, Math.round(popSize * elitismRate));\n\n        // Elitism: carry the best individuals unchanged\n        const elites = sortPopulation(population).slice(0, eliteCount).map(cloneIndividual);\n\n        // Fill the rest of the new population via selection + crossover + mutation\n        const offspring: Individual<G>[] = [];\n        while (offspring.length < popSize - eliteCount) {\n            const p1 = select(population, selectionStrategy, tournamentSize);\n            const p2 = select(population, selectionStrategy, tournamentSize);\n            const [c1, c2] = crossover(p1, p2, crossoverStrategy);\n\n            for (const child of [c1, c2]) {\n                let mutated: Individual<G>;\n                if (geneFactory) {\n                    mutated = randomResetMutate(child, mutationRate, geneFactory);\n                } else {\n                    mutated = swapMutate(child, mutationRate);\n                }\n                offspring.push(mutated);\n                if (offspring.length >= popSize - eliteCount) break;\n            }\n        }\n\n        // Evaluate new individuals, keep elites as-is\n        const evaluated = evaluate(offspring, fitnessFn);\n        population = [...elites, ...evaluated];\n\n        const genBest = sortPopulation(population)[0];\n        history.push(genBest.fitness);\n        if (genBest.fitness > overallBest.fitness) overallBest = cloneIndividual(genBest);\n\n        onGeneration?.(genBest, gen);\n    }\n\n    return {\n        best: overallBest,\n        finalPopulation: sortPopulation(population),\n        history,\n    };\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport const GA = {\n    /** Create a random population of given size and chromosome length. */\n    createPopulation,\n    /** Evaluate and assign fitness scores to all individuals. Returns new array. */\n    evaluate,\n    /** Sort a population by fitness (`'desc'` = best first, default). */\n    sort: sortPopulation,\n    /** Return the top-n fittest individuals. */\n    best,\n\n    selection: {\n        /** Tournament selection — pick the best among `tournamentSize` random candidates. */\n        tournament: tournamentSelect,\n        /** Fitness-proportionate (roulette wheel) selection. */\n        roulette: rouletteSelect,\n        /** Rank-based selection — selection pressure without raw-fitness dominance. */\n        rank: rankSelect,\n    },\n\n    crossover: {\n        /** Split at one random cut point and swap tails. */\n        singlePoint: singlePointCrossover,\n        /** Swap the segment between two random cut points. */\n        twoPoint: twoPointCrossover,\n        /**\n         * Each gene is independently drawn from either parent.\n         * @param mixRate Probability of taking from parent2 (default 0.5).\n         */\n        uniform: uniformCrossover,\n    },\n\n    mutation: {\n        /**\n         * Flip each binary gene with probability `rate`.\n         * Designed for `0 | 1` or `boolean` encodings.\n         */\n        bitFlip: bitFlipMutate,\n        /**\n         * Swap two random positions with probability `rate`.\n         * Best for permutation encodings (TSP, scheduling).\n         */\n        swap: swapMutate,\n        /**\n         * Reverse a random sub-sequence with probability `rate`.\n         * Good complement to crossover for permutation problems.\n         */\n        inversion: inversionMutate,\n        /**\n         * Replace each gene with a new random value with probability `rate`.\n         * Works for any encoding; requires a `geneFactory`.\n         */\n        randomReset: randomResetMutate,\n    },\n\n    /**\n     * Run a full evolution loop. Handles selection, crossover, mutation,\n     * elitism, and fitness evaluation each generation.\n     */\n    run,\n};\n","export type Color = \"Red\" | \"Green\" | \"Yellow\" | \"Blue\" | \"Magenta\" | \"Cyan\" | \"White\";\n\nconst ANSI: Record<Color, number> = {\n    Red: 31, Green: 32, Yellow: 33, Blue: 34,\n    Magenta: 35, Cyan: 36, White: 37,\n};\n\nconst timestamp = (): string => `[LOG] - ${new Date().toLocaleString()}    `;\n\nexport const Logger = {\n    disabled: false,\n\n    log(msg: string, color: Color = \"White\"): void {\n        if (this.disabled) return;\n        console.log(`%s\\x1b[${ANSI[color]}m%s\\x1b[0m`, timestamp(), msg);\n    },\n    error(msg: string): void {\n        if (this.disabled) return;\n        console.log(`%s\\x1b[31m%s\\x1b[0m`, timestamp(), msg);\n    },\n    warn(msg: string): void {\n        if (this.disabled) return;\n        console.log(`%s\\x1b[33m%s\\x1b[0m`, timestamp(), msg);\n    },\n    succ(msg: string): void {\n        if (this.disabled) return;\n        console.log(`%s\\x1b[32m%s\\x1b[0m`, timestamp(), msg);\n    },\n    /**\n     * Renders a progress bar to stdout.\n     * @param current Current progress value.\n     * @param total Total value.\n     * @param sameLine Overwrite the current line instead of printing a new one.\n     */\n    nodeProgress(current: number, total: number, sameLine: boolean = false): void {\n        const percent = current / total;\n        const barLen = 20;\n        const filled = Math.round(barLen * percent);\n        const empty = barLen - filled;\n\n        let bar = filled > 1 ? \"❤️\".repeat(filled - 1) + \"🐰\" : \"🐰\";\n        if (empty > 0) bar += \"  \".repeat(empty - 1) + \"🥕\";\n\n        const text = `[${bar}] ${Math.round(percent * 100)}%`;\n\n        if (sameLine) {\n            process.stdout.clearLine(0);\n            process.stdout.cursorTo(0);\n            process.stdout.write(text);\n            if (percent >= 1) process.stdout.write(\"\\n\");\n        } else {\n            console.log(text);\n        }\n    },\n};\n\n","export type ObfuscatorVersion = \"v1\" | \"v2\" | \"v3\" | \"v4\";\n\nexport interface ObfuscatorOptions {\n    version?: ObfuscatorVersion;\n    key?: string;\n}\n\nexport class Obfuscator {\n    private readonly _v4Prefix = \"cob:v4\";\n    private readonly _base64UrlAlphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n\n    private readonly _randomKey = (): string =>\n        (Date.now() / 1000 | 0).toString(16) +\n        \"xxxxxxxxxxxxxxxx\".replace(/x/g, () => (Math.random() * 16 | 0).toString(16)).toLowerCase();\n\n    /**\n     * Preferred obfuscation API. Defaults to V4.\n     */\n    public encode(inputStr: string, options: ObfuscatorOptions = {}): string {\n        const version = options.version ?? \"v4\";\n\n        switch (version) {\n            case \"v1\":\n                return options.key === undefined ? this.obfuscate(inputStr) : this.obfuscate(inputStr, options.key);\n            case \"v2\":\n                return this.obfuscatev2(inputStr);\n            case \"v3\":\n                return this.obfuscatev3(inputStr, this._requireKey(options.key, \"v3\"));\n            case \"v4\":\n                return this.obfuscatev4(inputStr, this._requireKey(options.key, \"v4\"));\n        }\n    }\n\n    /**\n     * Preferred deobfuscation API. V4 payloads are self-identifying.\n     */\n    public decode(inputStr: string, options: ObfuscatorOptions = {}): string {\n        const version = options.version ?? \"v4\";\n\n        switch (version) {\n            case \"v1\":\n                return this.deobfuscate(inputStr, this._requireKey(options.key, \"v1\"));\n            case \"v2\":\n                return this.deobfuscatev2(inputStr);\n            case \"v3\":\n                return this.deobfuscatev3(inputStr, this._requireKey(options.key, \"v3\"));\n            case \"v4\":\n                return this.deobfuscatev4(inputStr, this._requireKey(options.key, \"v4\"));\n        }\n    }\n\n    private _buildKeyValue(key: string): string {\n        let kv = \"\";\n        for (let i = 0; i < key.length; i++) kv += key.charCodeAt(i);\n        return \"l\" + kv.split(\"\").reverse().join(\"\") + \"l\";\n    }\n\n    /**\n     * V1 obfuscation - key-based character code encoding.\n     * If no key is provided, a random key is generated and you cannot deobfuscate.\n     * @param inputStr String to obfuscate.\n     * @param key Optional key for reversibility.\n     */\n    public obfuscate(inputStr: string, key: string = this._randomKey()): string {\n        const kv = this._buildKeyValue(key);\n        let result = \"\";\n        for (let i = 0; i < inputStr.length; i++) result += inputStr.charCodeAt(i) + kv;\n        return result;\n    }\n\n    /**\n     * V1 deobfuscation.\n     * @param inputStr String to deobfuscate.\n     * @param key Key used during obfuscation.\n     */\n    public deobfuscate(inputStr: string, key: string): string {\n        const kv = this._buildKeyValue(key);\n        const parts = inputStr.split(kv).filter((e) => e !== \"\");\n        return parts.map((e) => String.fromCharCode(Number(e))).join(\"\");\n    }\n\n    private _swapPairs(input: string): string {\n        let result = \"\";\n        for (let i = 0; i < input.length; i++) {\n            if (i % 2 === 1) result += input[i] + input[i - 1];\n            else if (i === input.length - 1) result += input[i];\n        }\n        return result;\n    }\n\n    /**\n     * V2 obfuscation - pair-swapping with incremental key shifting.\n     */\n    public obfuscatev2(inputStr: string): string {\n        const sortByLen = (a: string, b: string): string =>\n            a.length > b.length ? \"s\" + b + a : a + b;\n\n        const reformat = (text: string): string => {\n            let result = \"\";\n            for (let i = 0; i < text.length; i++) {\n                if (i % 2 === 1) {\n                    result += sortByLen(String(text.charCodeAt(i - 1)), String(text.charCodeAt(i)));\n                    if (i !== text.length - 1) result += \":\";\n                }\n                if (i % 2 === 0 && i === text.length - 1)\n                    result += \"e\" + String(text.charCodeAt(i));\n            }\n            return result;\n        };\n\n        const increment = (input: string): string[] => {\n            return input.split(\":\").map((e, i) => {\n                if (e[0] !== \"e\" && e[0] !== \"s\") return String(Number(e) + (i + i * 2));\n                return e;\n            });\n        };\n\n        return increment(reformat(this._swapPairs(inputStr))).reduce((f, l) => f + \":\" + l);\n    }\n\n    /**\n     * V2 deobfuscation.\n     */\n    public deobfuscatev2(inputStr: string): string {\n        try {\n            const split = (text: string): [string, string] => {\n                const len = text.length;\n                if (len <= 3) return [text.slice(0, 1), text.slice(1)];\n                if (len <= 5) return [text.slice(0, 2), text.slice(2)];\n                return [text.slice(0, 3), text.slice(3)];\n            };\n\n            let result = \"\";\n            inputStr.split(\":\").forEach((e, i) => {\n                if (e[0] === \"s\") {\n                    const [a, b] = split(e.slice(1));\n                    result += String.fromCharCode(Number(a)) + String.fromCharCode(Number(b));\n                } else if (e[0] === \"e\") {\n                    result += String.fromCharCode(Number(e.slice(1)));\n                } else {\n                    const [a, b] = split(String(Number(e) - (i + i * 2)));\n                    result += String.fromCharCode(Number(b)) + String.fromCharCode(Number(a));\n                }\n            });\n            return result;\n        } catch {\n            return \"Errored\";\n        }\n    }\n\n    /**\n     * V3 obfuscation - binary rotation with hex encoding.\n     * @param inputStr String to obfuscate.\n     * @param key Key used to determine rotation amounts.\n     */\n    public obfuscatev3(inputStr: string, key: string): string {\n        const keyValues = this._keyToValues(key);\n        let kIdx = 0;\n        let hex = \"\";\n        const next = (): void => { kIdx = (kIdx + 1) % keyValues.length; };\n\n        const rotr = (bits: string, n: number): string => {\n            for (let i = 0; i < n; i++) bits = bits[bits.length - 1] + bits.slice(0, bits.length - 1);\n            return bits;\n        };\n\n        for (let i = 0; i < inputStr.length; i++) {\n            const bin = inputStr.charCodeAt(i).toString(2).padStart(16, \"0\");\n            hex += parseInt(rotr(bin, keyValues[kIdx]), 2).toString(16).padStart(4, \"0\");\n            next();\n        }\n        return hex;\n    }\n\n    /**\n     * V3 deobfuscation.\n     */\n    public deobfuscatev3(inputStr: string, key: string): string {\n        const keyValues = this._keyToValues(key);\n        let kIdx = 0;\n        let result = \"\";\n        const next = (): void => { kIdx = (kIdx + 1) % keyValues.length; };\n\n        const rotl = (bits: string, n: number): string => {\n            for (let i = 0; i < n; i++) bits = bits.slice(1) + bits[0];\n            return bits;\n        };\n\n        const hex2bin = (hex: string): string =>\n            parseInt(hex, 16).toString(2).padStart(16, \"0\");\n\n        for (let i = 0; i < inputStr.length / 4; i++) {\n            const chunk = inputStr.slice(i * 4, i * 4 + 4);\n            result += String.fromCharCode(parseInt(rotl(hex2bin(chunk), keyValues[kIdx]), 2));\n            next();\n        }\n        return result;\n    }\n\n    /**\n     * V4 obfuscation - salted keyed byte-stream masking with base64url output.\n     * This is reversible obfuscation, not cryptographic encryption.\n     */\n    public obfuscatev4(inputStr: string, key: string): string {\n        this._requireKey(key, \"v4\");\n\n        const salt = this._randomSalt();\n        const bytes = new TextEncoder().encode(inputStr);\n        const payload = this._base64UrlEncode(this._applyV4(bytes, key, salt, \"encode\"));\n\n        return `${this._v4Prefix}:${salt}:${payload}`;\n    }\n\n    /**\n     * V4 deobfuscation.\n     */\n    public deobfuscatev4(inputStr: string, key: string): string {\n        this._requireKey(key, \"v4\");\n\n        const parts = inputStr.split(\":\");\n        if (parts.length !== 4 || `${parts[0]}:${parts[1]}` !== this._v4Prefix) {\n            throw new Error(\"Invalid V4 obfuscator payload\");\n        }\n\n        const [, , salt, payload] = parts;\n        const bytes = this._base64UrlDecode(payload);\n        const decoded = this._applyV4(bytes, key, salt, \"decode\");\n\n        return new TextDecoder().decode(decoded);\n    }\n\n    private _applyV4(bytes: Uint8Array, key: string, salt: string, mode: \"encode\" | \"decode\"): Uint8Array {\n        const prng = this._xorshift32(this._seedFromKey(key, salt));\n        const result = new Uint8Array(bytes.length);\n\n        for (let i = 0; i < bytes.length; i++) {\n            const random = prng();\n            const mask = random & 0xff;\n            const shift = ((random >>> 8) + i) & 7;\n\n            result[i] = mode === \"encode\"\n                ? this._rotateLeftByte(bytes[i] ^ mask, shift)\n                : this._rotateRightByte(bytes[i], shift) ^ mask;\n        }\n\n        return result;\n    }\n\n    private _seedFromKey(key: string, salt: string): number {\n        let hash = 0x811c9dc5;\n        const bytes = new TextEncoder().encode(`${salt}:${key}`);\n\n        for (const byte of bytes) {\n            hash ^= byte;\n            hash = Math.imul(hash, 0x01000193) >>> 0;\n        }\n\n        return hash || 0x6d2b79f5;\n    }\n\n    private _xorshift32(seed: number): () => number {\n        let state = seed >>> 0 || 0x6d2b79f5;\n\n        return (): number => {\n            state ^= state << 13;\n            state >>>= 0;\n            state ^= state >>> 17;\n            state >>>= 0;\n            state ^= state << 5;\n            return state >>> 0;\n        };\n    }\n\n    private _rotateLeftByte(value: number, shift: number): number {\n        return ((value << shift) | (value >>> (8 - shift))) & 0xff;\n    }\n\n    private _rotateRightByte(value: number, shift: number): number {\n        return ((value >>> shift) | (value << (8 - shift))) & 0xff;\n    }\n\n    private _randomSalt(): string {\n        const bytes = new Uint8Array(4);\n\n        if (globalThis.crypto?.getRandomValues) {\n            globalThis.crypto.getRandomValues(bytes);\n        } else {\n            for (let i = 0; i < bytes.length; i++) bytes[i] = Math.floor(Math.random() * 256);\n        }\n\n        return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n    }\n\n    private _base64UrlEncode(bytes: Uint8Array): string {\n        let output = \"\";\n\n        for (let i = 0; i < bytes.length; i += 3) {\n            const b0 = bytes[i];\n            const b1 = i + 1 < bytes.length ? bytes[i + 1] : 0;\n            const b2 = i + 2 < bytes.length ? bytes[i + 2] : 0;\n            const triplet = (b0 << 16) | (b1 << 8) | b2;\n\n            output += this._base64UrlAlphabet[(triplet >>> 18) & 63];\n            output += this._base64UrlAlphabet[(triplet >>> 12) & 63];\n            if (i + 1 < bytes.length) output += this._base64UrlAlphabet[(triplet >>> 6) & 63];\n            if (i + 2 < bytes.length) output += this._base64UrlAlphabet[triplet & 63];\n        }\n\n        return output;\n    }\n\n    private _base64UrlDecode(input: string): Uint8Array {\n        if (input.length % 4 === 1 || /[^A-Za-z0-9_-]/.test(input)) {\n            throw new Error(\"Invalid base64url payload\");\n        }\n\n        const bytes: number[] = [];\n\n        for (let i = 0; i < input.length; i += 4) {\n            const c0 = this._base64UrlValue(input[i]);\n            const c1 = this._base64UrlValue(input[i + 1]);\n            const c2 = i + 2 < input.length ? this._base64UrlValue(input[i + 2]) : 0;\n            const c3 = i + 3 < input.length ? this._base64UrlValue(input[i + 3]) : 0;\n            const triplet = (c0 << 18) | (c1 << 12) | (c2 << 6) | c3;\n\n            bytes.push((triplet >>> 16) & 0xff);\n            if (i + 2 < input.length) bytes.push((triplet >>> 8) & 0xff);\n            if (i + 3 < input.length) bytes.push(triplet & 0xff);\n        }\n\n        return new Uint8Array(bytes);\n    }\n\n    private _base64UrlValue(char: string | undefined): number {\n        if (char === undefined) throw new Error(\"Invalid base64url payload\");\n\n        const value = this._base64UrlAlphabet.indexOf(char);\n        if (value === -1) throw new Error(\"Invalid base64url payload\");\n\n        return value;\n    }\n\n    private _requireKey(key: string | undefined, version: ObfuscatorVersion): string {\n        if (typeof key !== \"string\" || key.length === 0) {\n            throw new Error(`${version.toUpperCase()} obfuscation requires a non-empty key`);\n        }\n\n        return key;\n    }\n\n    private _keyToValues(key: string): number[] {\n        return key.split(\"\").map((c) =>\n            String(c.charCodeAt(0)).split(\"\").map(Number).reduce((a, b) => a + b, 0)\n        );\n    }\n}\n\nexport const obfuscator = new Obfuscator();\n","export const primeConst: string[][] = [\n    [\n        '0', '1', '0', '0', '0', '0',\n        '1', '0', '1', '0', '0', '0',\n        '1', '0', '1', '0', '0', '0',\n        '1', '0', '1', '1', '1', '1',\n        '1', '0', '0', '1', '1', '0',\n        '0', '0'\n    ],\n    [\n        '0', '1', '1', '1', '0', '0',\n        '0', '1', '0', '0', '1', '1',\n        '0', '1', '1', '1', '0', '1',\n        '0', '0', '0', '1', '0', '0',\n        '1', '0', '0', '1', '0', '0',\n        '0', '1'\n    ],\n    [\n        '1', '0', '1', '1', '0', '1',\n        '0', '1', '1', '1', '0', '0',\n        '0', '0', '0', '0', '1', '1',\n        '1', '1', '1', '0', '1', '1',\n        '1', '1', '0', '0', '1', '1',\n        '1', '1'\n    ],\n    [\n        '1', '1', '1', '0', '1', '0',\n        '0', '1', '1', '0', '1', '1',\n        '0', '1', '0', '1', '1', '1',\n        '0', '1', '1', '0', '1', '1',\n        '1', '0', '1', '0', '0', '1',\n        '0', '1'\n    ],\n    [\n        '0', '0', '1', '1', '1', '0',\n        '0', '1', '0', '1', '0', '1',\n        '0', '1', '1', '0', '1', '1',\n        '0', '0', '0', '0', '1', '0',\n        '0', '1', '0', '1', '1', '0',\n        '1', '1'\n    ],\n    [\n        '0', '1', '0', '1', '1', '0',\n        '0', '1', '1', '1', '1', '1',\n        '0', '0', '0', '1', '0', '0',\n        '0', '1', '0', '0', '0', '1',\n        '1', '1', '1', '1', '0', '0',\n        '0', '1'\n    ],\n    [\n        '1', '0', '0', '1', '0', '0',\n        '1', '0', '0', '0', '1', '1',\n        '1', '1', '1', '1', '1', '0',\n        '0', '0', '0', '0', '1', '0',\n        '1', '0', '1', '0', '0', '1',\n        '0', '0'\n    ],\n    [\n        '1', '0', '1', '0', '1', '0',\n        '1', '1', '0', '0', '0', '1',\n        '1', '1', '0', '0', '0', '1',\n        '0', '1', '1', '1', '1', '0',\n        '1', '1', '0', '1', '0', '1',\n        '0', '1'\n    ],\n    [\n        '1', '1', '0', '1', '1', '0',\n        '0', '0', '0', '0', '0', '0',\n        '0', '1', '1', '1', '1', '0',\n        '1', '0', '1', '0', '1', '0',\n        '1', '0', '0', '1', '1', '0',\n        '0', '0'\n    ],\n    [\n        '0', '0', '0', '1', '0', '0',\n        '1', '0', '1', '0', '0', '0',\n        '0', '0', '1', '1', '0', '1',\n        '0', '1', '1', '0', '1', '1',\n        '0', '0', '0', '0', '0', '0',\n        '0', '1'\n    ],\n    [\n        '0', '0', '1', '0', '0', '1',\n        '0', '0', '0', '0', '1', '1',\n        '0', '0', '0', '1', '1', '0',\n        '0', '0', '0', '1', '0', '1',\n        '1', '0', '1', '1', '1', '1',\n        '1', '0'\n    ],\n    [\n        '0', '1', '0', '1', '0', '1',\n        '0', '1', '0', '0', '0', '0',\n        '1', '1', '0', '0', '0', '1',\n        '1', '1', '1', '1', '0', '1',\n        '1', '1', '0', '0', '0', '0',\n        '1', '1'\n    ],\n    [\n        '0', '1', '1', '1', '0', '0',\n        '1', '0', '1', '0', '1', '1',\n        '1', '1', '1', '0', '0', '1',\n        '0', '1', '1', '1', '0', '1',\n        '0', '1', '1', '1', '0', '1',\n        '0', '0'\n    ],\n    [\n        '1', '0', '0', '0', '0', '0',\n        '0', '0', '1', '1', '0', '1',\n        '1', '1', '1', '0', '1', '0',\n        '1', '1', '0', '0', '0', '1',\n        '1', '1', '1', '1', '1', '1',\n        '1', '0'\n    ],\n    [\n        '1', '0', '0', '1', '1', '0',\n        '1', '1', '1', '1', '0', '1',\n        '1', '1', '0', '0', '0', '0',\n        '0', '0', '0', '1', '1', '0',\n        '1', '0', '1', '0', '0', '1',\n        '1', '1'\n    ],\n    [\n        '1', '1', '0', '0', '0', '0',\n        '0', '1', '1', '0', '0', '1',\n        '1', '0', '1', '1', '1', '1',\n        '1', '1', '0', '0', '0', '1',\n        '0', '1', '1', '1', '0', '1',\n        '0', '0'\n    ],\n    [\n        '1', '1', '1', '0', '0', '1',\n        '0', '0', '1', '0', '0', '1',\n        '1', '0', '1', '1', '0', '1',\n        '1', '0', '1', '0', '0', '1',\n        '1', '1', '0', '0', '0', '0',\n        '0', '1'\n    ],\n    [\n        '1', '1', '1', '0', '1', '1',\n        '1', '1', '1', '0', '1', '1',\n        '1', '1', '1', '0', '0', '1',\n        '0', '0', '0', '1', '1', '1',\n        '1', '0', '0', '0', '0', '1',\n        '1', '0'\n    ],\n    [\n        '0', '0', '0', '0', '1', '1',\n        '1', '1', '1', '1', '0', '0',\n        '0', '0', '0', '1', '1', '0',\n        '0', '1', '1', '1', '0', '1',\n        '1', '1', '0', '0', '0', '1',\n        '1', '0'\n    ],\n    [\n        '0', '0', '1', '0', '0', '1',\n        '0', '0', '0', '0', '0', '0',\n        '1', '1', '0', '0', '1', '0',\n        '1', '0', '0', '0', '0', '1',\n        '1', '1', '0', '0', '1', '1',\n        '0', '0'\n    ],\n    [\n        '0', '0', '1', '0', '1', '1',\n        '0', '1', '1', '1', '1', '0',\n        '1', '0', '0', '1', '0', '0',\n        '1', '0', '1', '1', '0', '0',\n        '0', '1', '1', '0', '1', '1',\n        '1', '1'\n    ],\n    [\n        '0', '1', '0', '0', '1', '0',\n        '1', '0', '0', '1', '1', '1',\n        '0', '1', '0', '0', '1', '0',\n        '0', '0', '0', '1', '0', '0',\n        '1', '0', '1', '0', '1', '0',\n        '1', '0'\n    ],\n    [\n        '0', '1', '0', '1', '1', '1',\n        '0', '0', '1', '0', '1', '1',\n        '0', '0', '0', '0', '1', '0',\n        '1', '0', '1', '0', '0', '1',\n        '1', '1', '0', '1', '1', '1',\n        '0', '0'\n    ],\n    [\n        '0', '1', '1', '1', '0', '1',\n        '1', '0', '1', '1', '1', '1',\n        '1', '0', '0', '1', '1', '0',\n        '0', '0', '1', '0', '0', '0',\n        '1', '1', '0', '1', '1', '0',\n        '1', '0'\n    ],\n    [\n        '1', '0', '0', '1', '1', '0',\n        '0', '0', '0', '0', '1', '1',\n        '1', '1', '1', '0', '0', '1',\n        '0', '1', '0', '0', '0', '1',\n        '0', '1', '0', '1', '0', '0',\n        '1', '0'\n    ],\n    [\n        '1', '0', '1', '0', '1', '0',\n        '0', '0', '0', '0', '1', '1',\n        '0', '0', '0', '1', '1', '1',\n        '0', '0', '0', '1', '1', '0',\n        '0', '1', '1', '0', '1', '1',\n        '0', '1'\n    ],\n    [\n        '1', '0', '1', '1', '0', '0',\n        '0', '0', '0', '0', '0', '0',\n        '0', '0', '1', '1', '0', '0',\n        '1', '0', '0', '1', '1', '1',\n        '1', '1', '0', '0', '1', '0',\n        '0', '0'\n    ],\n    [\n        '1', '0', '1', '1', '1', '1',\n        '1', '1', '0', '1', '0', '1',\n        '1', '0', '0', '1', '0', '1',\n        '1', '1', '1', '1', '1', '1',\n        '1', '1', '0', '0', '0', '1',\n        '1', '1'\n    ],\n    [\n        '1', '1', '0', '0', '0', '1',\n        '1', '0', '1', '1', '1', '0',\n        '0', '0', '0', '0', '0', '0',\n        '0', '0', '1', '0', '1', '1',\n        '1', '1', '1', '1', '0', '0',\n        '1', '1'\n    ],\n    [\n        '1', '1', '0', '1', '0', '1',\n        '0', '1', '1', '0', '1', '0',\n        '0', '1', '1', '1', '1', '0',\n        '0', '1', '0', '0', '0', '1',\n        '0', '1', '0', '0', '0', '1',\n        '1', '1'\n    ],\n    [\n        '0', '0', '0', '0', '0', '1',\n        '1', '0', '1', '1', '0', '0',\n        '1', '0', '1', '0', '0', '1',\n        '1', '0', '0', '0', '1', '1',\n        '0', '1', '0', '1', '0', '0',\n        '0', '1'\n    ],\n    [\n        '0', '0', '0', '1', '0', '1',\n        '0', '0', '0', '0', '1', '0',\n        '1', '0', '0', '1', '0', '0',\n        '1', '0', '1', '0', '0', '1',\n        '0', '1', '1', '0', '0', '1',\n        '1', '1'\n    ],\n    [\n        '0', '0', '1', '0', '0', '1',\n        '1', '1', '1', '0', '1', '1',\n        '0', '1', '1', '1', '0', '0',\n        '0', '0', '1', '0', '1', '0',\n        '1', '0', '0', '0', '0', '1',\n        '0', '1'\n    ],\n    [\n        '0', '0', '1', '0', '1', '1',\n        '1', '0', '0', '0', '0', '1',\n        '1', '0', '1', '1', '0', '0',\n        '1', '0', '0', '0', '0', '1',\n        '0', '0', '1', '1', '1', '0',\n        '0', '0'\n    ],\n    [\n        '0', '1', '0', '0', '1', '1',\n        '0', '1', '0', '0', '1', '0',\n        '1', '1', '0', '0', '0', '1',\n        '1', '0', '1', '1', '0', '1',\n        '1', '1', '1', '1', '1', '1',\n        '0', '0'\n    ],\n    [\n        '0', '1', '0', '1', '0', '0',\n        '1', '1', '0', '0', '1', '1',\n        '1', '0', '0', '0', '0', '0',\n        '0', '0', '1', '1', '0', '1',\n        '0', '0', '0', '1', '0', '0',\n        '1', '1'\n    ],\n    [\n        '0', '1', '1', '0', '0', '1',\n        '0', '1', '0', '0', '0', '0',\n        '1', '0', '1', '0', '0', '1',\n        '1', '1', '0', '0', '1', '1',\n        '0', '1', '0', '1', '0', '1',\n        '0', '0'\n    ],\n    [\n        '0', '1', '1', '1', '0', '1',\n        '1', '0', '0', '1', '1', '0',\n        '1', '0', '1', '0', '0', '0',\n        '0', '0', '1', '0', '1', '0',\n        '1', '0', '1', '1', '1', '0',\n        '1', '1'\n    ],\n    [\n        '1', '0', '0', '0', '0', '0',\n        '0', '1', '1', '1', '0', '0',\n        '0', '0', '1', '0', '1', '1',\n        '0', '0', '1', '0', '0', '1',\n        '0', '0', '1', '0', '1', '1',\n        '1', '0'\n    ],\n    [\n        '1', '0', '0', '1', '0', '0',\n        '1', '0', '0', '1', '1', '1',\n        '0', '0', '1', '0', '0', '0',\n        '1', '0', '1', '1', '0', '0',\n        '1', '0', '0', '0', '0', '1',\n        '0', '1'\n    ],\n    [\n        '1', '0', '1', '0', '0', '0',\n        '1', '0', '1', '0', '1', '1',\n        '1', '1', '1', '1', '1', '1',\n        '1', '0', '1', '0', '0', '0',\n        '1', '0', '1', '0', '0', '0',\n        '0', '1'\n    ],\n    [\n        '1', '0', '1', '0', '1', '0',\n        '0', '0', '0', '0', '0', '1',\n        '1', '0', '1', '0', '0', '1',\n        '1', '0', '0', '1', '1', '0',\n        '0', '1', '0', '0', '1', '0',\n        '1', '1'\n    ],\n    [\n        '1', '1', '0', '0', '0', '0',\n        '1', '0', '0', '1', '0', '0',\n        '1', '0', '1', '1', '1', '0',\n        '0', '0', '1', '0', '1', '1',\n        '0', '1', '1', '1', '0', '0',\n        '0', '0'\n    ],\n    [\n        '1', '1', '0', '0', '0', '1',\n        '1', '1', '0', '1', '1', '0',\n        '1', '1', '0', '0', '0', '1',\n        '0', '1', '0', '0', '0', '1',\n        '1', '0', '1', '0', '0', '0',\n        '1', '1'\n    ],\n    [\n        '1', '1', '0', '1', '0', '0',\n        '0', '1', '1', '0', '0', '1',\n        '0', '0', '1', '0', '1', '1',\n        '1', '0', '1', '0', '0', '0',\n        '0', '0', '0', '1', '1', '0',\n        '0', '1'\n    ],\n    [\n        '1', '1', '0', '1', '0', '1',\n        '1', '0', '1', '0', '0', '1',\n        '1', '0', '0', '1', '0', '0',\n        '0', '0', '0', '1', '1', '0',\n        '0', '0', '1', '0', '0', '1',\n        '0', '0'\n    ],\n    [\n        '1', '1', '1', '1', '0', '1',\n        '0', '0', '0', '0', '0', '0',\n        '1', '1', '1', '0', '0', '0',\n        '1', '1', '0', '1', '0', '1',\n        '1', '0', '0', '0', '0', '1',\n        '0', '1'\n    ],\n    [\n        '0', '0', '0', '1', '0', '0',\n        '0', '0', '0', '1', '1', '0',\n        '1', '0', '1', '0', '1', '0',\n        '1', '0', '0', '0', '0', '0',\n        '0', '1', '1', '1', '0', '0',\n        '0', '0'\n    ],\n    [\n        '0', '0', '0', '1', '1', '0',\n        '0', '1', '1', '0', '1', '0',\n        '0', '1', '0', '0', '1', '1',\n        '0', '0', '0', '0', '0', '1',\n        '0', '0', '0', '1', '0', '1',\n        '1', '0'\n    ],\n    [\n        '0', '0', '0', '1', '1', '1',\n        '1', '0', '0', '0', '1', '1',\n        '0', '1', '1', '1', '0', '1',\n        '1', '0', '1', '1', '0', '0',\n        '0', '0', '0', '0', '1', '0',\n        '0', '0'\n    ],\n    [\n        '0', '0', '1', '0', '0', '1',\n        '1', '1', '0', '1', '0', '0',\n        '1', '0', '0', '0', '0', '1',\n        '1', '1', '0', '1', '1', '1',\n        '0', '1', '0', '0', '1', '1',\n        '0', '0'\n    ],\n    [\n        '0', '0', '1', '1', '0', '1',\n        '0', '0', '1', '0', '1', '1',\n        '0', '0', '0', '0', '1', '0',\n        '1', '1', '1', '1', '0', '0',\n        '1', '0', '1', '1', '0', '1',\n        '0', '1'\n    ],\n    [\n        '0', '0', '1', '1', '1', '0',\n        '0', '1', '0', '0', '0', '1',\n        '1', '1', '0', '0', '0', '0',\n        '0', '0', '1', '1', '0', '0',\n        '1', '0', '1', '1', '0', '0',\n        '1', '1'\n    ],\n    [\n        '0', '1', '0', '0', '1', '1',\n        '1', '0', '1', '1', '0', '1',\n        '1', '0', '0', '0', '1', '0',\n        '1', '0', '1', '0', '1', '0',\n        '0', '1', '0', '0', '1', '0',\n        '1', '0'\n    ],\n    [\n        '0', '1', '0', '1', '1', '0',\n        '1', '1', '1', '0', '0', '1',\n        '1', '1', '0', '0', '1', '1',\n        '0', '0', '1', '0', '1', '0',\n        '0', '1', '0', '0', '1', '1',\n        '1', '1'\n    ],\n    [\n        '0', '1', '1', '0', '1', '0',\n        '0', '0', '0', '0', '1', '0',\n        '1', '1', '1', '0', '0', '1',\n        '1', '0', '1', '1', '1', '1',\n        '1', '1', '1', '1', '0', '0',\n        '1', '1'\n    ],\n    [\n        '0', '1', '1', '1', '0', '1',\n        '0', '0', '1', '0', '0', '0',\n        '1', '1', '1', '1', '1', '0',\n        '0', '0', '0', '0', '1', '0',\n        '1', '1', '1', '0', '1', '1',\n        '1', '0'\n    ],\n    [\n        '0', '1', '1', '1', '1', '0',\n        '0', '0', '1', '0', '1', '0',\n        '0', '1', '0', '1', '0', '1',\n        '1', '0', '0', '0', '1', '1',\n        '0', '1', '1', '0', '1', '1',\n        '1', '1'\n    ],\n    [\n        '1', '0', '0', '0', '0', '1',\n        '0', '0', '1', '1', '0', '0',\n        '1', '0', '0', '0', '0', '1',\n        '1', '1', '1', '0', '0', '0',\n        '0', '0', '0', '1', '0', '1',\n        '0', '0'\n    ],\n    [\n        '1', '0', '0', '0', '1', '1',\n        '0', '0', '1', '1', '0', '0',\n        '0', '1', '1', '1', '0', '0',\n        '0', '0', '0', '0', '1', '0',\n        '0', '0', '0', '0', '1', '0',\n        '0', '0'\n    ],\n    [\n        '1', '0', '0', '1', '0', '0',\n        '0', '0', '1', '0', '1', '1',\n        '1', '1', '1', '0', '1', '1',\n        '1', '1', '1', '1', '1', '1',\n        '1', '1', '1', '1', '1', '0',\n        '1', '0'\n    ],\n    [\n        '1', '0', '1', '0', '0', '1',\n        '0', '0', '0', '1', '0', '1',\n        '0', '0', '0', '0', '0', '1',\n        '1', '0', '1', '1', '0', '0',\n        '1', '1', '1', '0', '1', '0',\n        '1', '1'\n    ],\n    [\n        '1', '0', '1', '1', '1', '1',\n        '1', '0', '1', '1', '1', '1',\n        '1', '0', '0', '1', '1', '0',\n        '1', '0', '0', '0', '1', '1',\n        '1', '1', '1', '1', '0', '1',\n        '1', '1'\n    ],\n    [\n        '1', '1', '0', '0', '0', '1',\n        '1', '0', '0', '1', '1', '1',\n        '0', '0', '0', '1', '0', '1',\n        '1', '1', '1', '0', '0', '0',\n        '1', '1', '1', '1', '0', '0',\n        '1', '0'\n    ],\n]\n\nexport const compressionHash: { [key: string]: string[] } = {\n    \"a\": [\n        '0', '1', '1', '0', '1', '0',\n        '1', '0', '0', '0', '0', '0',\n        '1', '0', '0', '1', '1', '1',\n        '1', '0', '0', '1', '1', '0',\n        '0', '1', '1', '0', '0', '1',\n        '1', '1'\n    ],\n    \"b\": [\n        '1', '0', '1', '1', '1', '0',\n        '1', '1', '0', '1', '1', '0',\n        '0', '1', '1', '1', '1', '0',\n        '1', '0', '1', '1', '1', '0',\n        '1', '0', '0', '0', '0', '1',\n        '0', '1'\n    ],\n    \"c\": [\n        '0', '0', '1', '1', '1', '1',\n        '0', '0', '0', '1', '1', '0',\n        '1', '1', '1', '0', '1', '1',\n        '1', '1', '0', '0', '1', '1',\n        '0', '1', '1', '1', '0', '0',\n        '1', '0'\n    ],\n    \"d\": [\n        '1', '0', '1', '0', '0', '1',\n        '0', '1', '0', '1', '0', '0',\n        '1', '1', '1', '1', '1', '1',\n        '1', '1', '0', '1', '0', '1',\n        '0', '0', '1', '1', '1', '0',\n        '1', '0'\n    ],\n    \"e\": [\n        '0', '1', '0', '1', '0', '0',\n        '0', '1', '0', '0', '0', '0',\n        '1', '1', '1', '0', '0', '1',\n        '0', '1', '0', '0', '1', '0',\n        '0', '1', '1', '1', '1', '1',\n        '1', '1'\n    ],\n    \"f\": [\n        '1', '0', '0', '1', '1', '0',\n        '1', '1', '0', '0', '0', '0',\n        '0', '1', '0', '1', '0', '1',\n        '1', '0', '1', '0', '0', '0',\n        '1', '0', '0', '0', '1', '1',\n        '0', '0'\n    ],\n    \"g\": [\n        '0', '0', '0', '1', '1', '1',\n        '1', '1', '1', '0', '0', '0',\n        '0', '0', '1', '1', '1', '1',\n        '0', '1', '1', '0', '0', '1',\n        '1', '0', '1', '0', '1', '0',\n        '1', '1'\n    ],\n    \"h\": [\n        '0', '1', '0', '1', '1', '0',\n        '1', '1', '1', '1', '1', '0',\n        '0', '0', '0', '0', '1', '1',\n        '0', '0', '1', '1', '0', '1',\n        '0', '0', '0', '1', '1', '0',\n        '0', '1'\n    ],\n}","import { primeConst, compressionHash } from \"./constants.js\"\nexport const Sha256 = (inputStr: string) => {\n    const _toBinary = (text: string): string => {\n        let rs: string = \"\"\n        for (let i = 0; i < text.length; i++) {\n            rs += text[i].charCodeAt(0).toString(2).padStart(8, \"0\")\n        }\n        return rs\n    }\n    //Shift right\n    //Rotate right\n    //XOR\n    //ADD <= remember to keep it in 32 bit range\n    const _rotr = (arr: string[], attempt: number = 1): string[] => {\n        let tmp: any[] = [...arr]\n        for (let i = 0; i < attempt; i++) {\n            tmp = [tmp.pop(), ...tmp]\n        }\n        return tmp\n    }\n    const _shr = (arr: string[], attempt: number = 1): string[] => {\n        let tmp: any[] = [...arr]\n        for (let i = 0; i < attempt; i++) {\n            tmp.pop()\n            tmp.unshift(\"0\")\n        }\n        return tmp\n    }\n    const _xor = (arrA: string[], arrB: string[], arrC: string[]): string[] => {\n        const tmp: string[] = []\n        arrA.forEach((bit, index) => {\n            tmp[index] = String(Number(bit) ^ Number(arrB[index]) ^ Number(arrC[index]))\n        })\n        return tmp\n    }\n    const _add = (arrA: string[], arrB: string[]): string[] => {\n        const tmp: string[] = []\n        const len: number = arrA.length;\n        let extra: number = 0\n        for (let i = arrA.length - 1; i >= 0; i--) {\n            const bitValue: number = Number(arrA[i]) + Number(arrB[i]) + extra\n            tmp[i] = bitValue > 1 ? String(bitValue - 2) : String(bitValue)\n            extra = bitValue > 1 ? 1 : 0\n        }\n        return tmp\n    }\n    /**\n     * Functions\n     * choice, given x,y,z. If x = 1 takes y, if x = 0 takes z\n     * major, given x,y,z. If numbers of 1 > 0 then 1. else 0.\n     */\n    const _choice = (arrA: string[], arrB: string[], arrC: string[]): string[] => {\n        let tmp: string[] = []\n        arrA.forEach((bit, index) => {\n            tmp[index] = bit === \"1\" ? arrB[index] : arrC[index];\n        })\n        return tmp;\n    }\n    const _major = (arrA: string[], arrB: string[], arrC: string[]): string[] => {\n        let tmp: string[] = []\n        arrA.forEach((bit, index) => {\n            const val: string = bit + arrB[index] + arrC[index]\n            if (\n                val === \"000\" || val === \"001\" ||\n                val === \"010\" || val === \"100\"\n            ) tmp[index] = \"0\"\n            else if (\n                val === \"111\" || val === \"110\" ||\n                val === \"101\" || val === \"011\"\n            ) tmp[index] = \"1\"\n\n        })\n        return tmp;\n    }\n    /**\n     * Compound movements\n     * sigZero = ROTR 7, ROTR 18, SHR 3, XOR \n     * sigOne = ROTR 17, ROTR 19, SHR 10, XOR\n     * uSigZero = ROTR 2, ROTR 13, ROTR 22, XOR\n     * uSigOne = ROTR 6, ROTR 11, ROTR 25, XOR\n     */\n    const _sigZero = (arr: string[]): string[] => {\n        const rotr7 = _rotr(arr, 7)\n        const rotr18 = _rotr(arr, 18)\n        const shr3: string[] = _shr(arr, 3)\n        return _xor(rotr7, rotr18, shr3)\n    }\n\n    const _sigOne = (arr: string[]): string[] => {\n        const rotr17 = _rotr(arr, 17)\n        const rotr19 = _rotr(arr, 19)\n        const shr10: string[] = _shr(arr, 10)\n        return _xor(rotr17, rotr19, shr10)\n    }\n\n    const _uSigZero = (arr: string[]): string[] => {\n        const rotr2 = _rotr(arr, 2)\n        const rotr13 = _rotr(arr, 13)\n        const rotr22 = _rotr(arr, 22)\n        return _xor(rotr2, rotr13, rotr22)\n    }\n\n    const _uSigOne = (arr: string[]): string[] => {\n        const rotr6 = _rotr(arr, 6)\n        const rotr11 = _rotr(arr, 11)\n        const rotr25 = _rotr(arr, 25)\n        return _xor(rotr6, rotr11, rotr25)\n    }\n\n    const shiftCompressionMap = (compressionMap: {[key: string]: string[]}): void => {\n        compressionMap[\"h\"] = [...compressionMap[\"g\"]];\n        compressionMap[\"g\"] = [...compressionMap[\"f\"]];\n        compressionMap[\"f\"] = [...compressionMap[\"e\"]];\n        compressionMap[\"e\"] = [...compressionMap[\"d\"]];\n        compressionMap[\"d\"] = [...compressionMap[\"c\"]];\n        compressionMap[\"c\"] = [...compressionMap[\"b\"]];\n        compressionMap[\"b\"] = [...compressionMap[\"a\"]];\n        compressionMap[\"a\"] = []\n    }\n\n    /**\n    * Structure will be:\n    * The binary of the message + 1 as separator + padding of 0 until 448 bits + length of the message with start padding of 0.\n    * End result will be total of 512 in length\n    */\n    let messageBin: string = _toBinary(inputStr)\n    const messageBlocks: string[] = [];\n    const messageLengthBin = messageBin.length.toString(2).padStart(64, \"0\")\n    const blockCount: number = Math.ceil((messageBin.length + 1 + 64) / 512)\n    const finalLength = blockCount * 512\n    /*\n    messageBin += \"1\" //Separator\n    messageBin = messageBin.padEnd(512 * blockCount - 64, \"0\") //padding of 0 until 448 bits\n    messageBin += messageLengthBin //Remaining 64 with length of the message with start padding of 0.  \n    */\n    // 𝑘=512𝑖+447−𝑚\n    /**\n     * k = paddings \n     * i = blockCount\n     * m = input length\n     * Pre-processing (Padding):\n        begin with the original message of length L bits\n        append a single '1' bit\n        append K '0' bits, where K is the minimum number >= 0 such that L + 1 + K + 64 is a multiple of 512\n        append L as a 64-bit big-endian integer, making the total post-processed length a multiple of 512 bits\n        such that the bits in the message are L 1 00..<K 0's>..00 <L as 64 bit integer> = k*512 total bits\n     */\n    messageBin += \"1\" //Separator\n    messageBin = messageBin.padEnd(finalLength-64, \"0\") //padding of 0 until 448 bits\n    messageBin += messageLengthBin //Remaining 64 with length of the message with start padding of 0.  \n    for (let i = 0; i < blockCount; i++) {\n        let messageChunks = messageBin.slice(i * 512, i * 512 + 512)\n        //Add padding to last block\n        messageBlocks.push(messageChunks)\n    }    \n    let finalCompression = {...compressionHash}\n    //message schedule\n    \n    messageBlocks.forEach((block, bi) => {\n        let localCompression = {...finalCompression}\n        const words: string[][] = [];\n        for (let i = 0; i < 16; i++) {\n            words.push(block.slice(i * 32, i * 32 + 32).split(\"\"))\n        }\n        //Words need to be 64 in length, so we gonna expand it\n        //sigOne(-2) + (-7) + sigZero(-15) + (-16)\n        while(words.length < 64){\n            words.push(\n                _add(\n                    _add(\n                        _add(_sigOne(words[words.length-2]), words[words.length-7]), \n                        _sigZero(words[words.length-15])\n                    ),\n                    words[words.length-16]\n                )\n            )\n        }\n        //Compression\n        /**\n         * T1 = uSigOne(e) + choice(e,f,g) + h + K0 + W0\n         * T2 = uSigZero(a) + major(a,b,c)\n         */\n        words.forEach((word, index) => {\n            const t1: string[] = _add(\n                _add(\n                    _add(\n                        _add(_uSigOne(localCompression.e),  _choice(localCompression.e, localCompression.f, localCompression.g)),\n                        localCompression.h\n                    ),\n                    primeConst[index]\n                ),\n                word\n            )\n            const t2: string[] = _add(\n                _uSigZero(localCompression.a), _major(localCompression.a, localCompression.b, localCompression.c)\n            )\n            shiftCompressionMap(localCompression)\n            localCompression.a = _add(t1, t2)\n            localCompression.e = _add(localCompression.e, t1)\n        })\n\n\n        for(let id in localCompression){\n            if(bi === 0)\n                finalCompression[id] = _add(compressionHash[id], localCompression[id])\n            else\n                finalCompression[id] = _add(finalCompression[id], localCompression[id])\n        }\n                \n    })\n    let result: string = \"\"\n    for(let id in finalCompression)\n        result += parseInt(finalCompression[id].join(\"\"), 2).toString(16)\n    return result\n}","export const localeEn = {\n    min: (min: string): string => `Min ${min}`,\n    max: (max: string): string => `Max ${max}`,\n    isEmail: \"Invalid Email\",\n    required: \"Required\",\n    alphanumeric: \"Value needs to be alphanumeric ( 0~9, a~Z )\",\n    noSpecials: \"Must not contain special symbols (!@$%...etc)\",\n    isUUIDv4: \"Value needs to be a v4 UUID\",\n    isSameAs: \"Value does not match\",\n};\n","export const localeJa = {\n    min: (min: string): string => `最小 ${min}`,\n    max: (max: string): string => `最大 ${max}`,\n    isEmail: \"無効なメールです\",\n    required: \"必要項目です\",\n    alphanumeric: \"半角英文字・数字を入れてください ( 0~9, a~Z )\",\n    noSpecials: \"特殊記号は使えません (!@$%...など)\",\n    isUUIDv4: \"無効なUUIDv4\",\n    isSameAs: \"再確認できませんでした\",\n};\n","import { localeEn } from \"./locales/en\";\nimport { localeJa } from \"./locales/ja\";\n\ninterface ValidationError {\n    errored: unknown;\n    code: string;\n    label?: string;\n}\n\nexport type Locale = \"en\" | \"ja\";\n\nconst errorMsg: Record<Locale, typeof localeEn> = {\n    en: localeEn,\n    ja: localeJa,\n};\n\nexport class Validator {\n    private locale: Locale = \"en\";\n    public inputValue: unknown;\n    private currentErrorName = \"\";\n    public errorMap: Record<string, ValidationError[]> = {};\n    private pristineMap: Record<string, boolean> = {};\n    private valueMap: Record<string, unknown> = {};\n\n    public setLocale(locale: Locale): void {\n        this.locale = locale;\n    }\n\n    public value(inputValue: unknown): this {\n        this.inputValue = inputValue;\n        return this;\n    }\n\n    /**\n     * Name the current value for grouping errors in errorMap.\n     * Must be chained after value().\n     */\n    public as(inputName: string): this {\n        this.currentErrorName = inputName;\n        if (this.pristineMap[inputName] === undefined) {\n            this.pristineMap[inputName] = true;\n        } else if (this.valueMap[inputName] !== this.inputValue) {\n            this.pristineMap[inputName] = false;\n        }\n        this.errorMap[inputName] = [];\n        this.valueMap[inputName] = this.inputValue;\n        return this;\n    }\n\n    private _addError(err: ValidationError): void {\n        if (!this.currentErrorName) return;\n        if (this.pristineMap[this.currentErrorName]) return;\n        if (!this.errorMap[this.currentErrorName])\n            this.errorMap[this.currentErrorName] = [];\n        this.errorMap[this.currentErrorName].push(err);\n    }\n\n    // Static type guards\n    public static isDefined = (x: unknown): boolean => x !== undefined && x !== null;\n    public static isUndefined = (x: unknown): boolean => x === undefined;\n    public static isArray = Array.isArray;\n    public static isString = (x: unknown): boolean => typeof x === \"string\" || x instanceof String;\n    public static isObject = (x: unknown): boolean => Object.prototype.toString.call(x) === \"[object Object]\";\n    public static isNumber = (x: unknown): boolean => Object.prototype.toString.call(x) === \"[object Number]\";\n    public static isBoolean = (x: unknown): boolean => Object.prototype.toString.call(x) === \"[object Boolean]\";\n\n    /**\n     * Check minimum length (strings/arrays) or minimum value (numbers).\n     * Does not check for null/undefined — use required() for that.\n     */\n    public min(min: number): this {\n        if (!this.inputValue) return this;\n        if (Validator.isArray(this.inputValue) || Validator.isString(this.inputValue)) {\n            if ((this.inputValue as string | unknown[]).length < min)\n                this._addError({ errored: this.inputValue, code: \"MinReachedS\", label: errorMsg[this.locale].min(String(min)) });\n        } else if (Validator.isNumber(this.inputValue)) {\n            if ((this.inputValue as number) < min)\n                this._addError({ errored: this.inputValue, code: \"MinReachedN\", label: errorMsg[this.locale].min(String(min)) });\n        }\n        return this;\n    }\n\n    public max(max: number): this {\n        if (!this.inputValue) return this;\n        if (Validator.isArray(this.inputValue) || Validator.isString(this.inputValue)) {\n            if ((this.inputValue as string | unknown[]).length > max)\n                this._addError({ errored: this.inputValue, code: \"MaxReachedS\", label: errorMsg[this.locale].max(String(max)) });\n        } else if (Validator.isNumber(this.inputValue)) {\n            if ((this.inputValue as number) > max)\n                this._addError({ errored: this.inputValue, code: \"MaxReachedN\", label: errorMsg[this.locale].max(String(max)) });\n        }\n        return this;\n    }\n\n    public isEmail(): this {\n        if (!this.inputValue) return this;\n        if (!/.+@.+\\..+/.test(String(this.inputValue)))\n            this._addError({ errored: this.inputValue, code: \"InvalidEmail\", label: errorMsg[this.locale].isEmail });\n        return this;\n    }\n\n    public required(): this {\n        if (this.inputValue === \"\" || this.inputValue === null || this.inputValue === undefined)\n            this._addError({ errored: this.inputValue, code: \"REQUIRED\", label: errorMsg[this.locale].required });\n        return this;\n    }\n\n    public alphanumeric(): this {\n        if (!this.inputValue) throw new Error(\"Please provide a value\");\n        if (!/^[0-9a-zA-Z]+$/.test(String(this.inputValue)))\n            this._addError({ errored: this.inputValue, code: \"ALPHANUM\", label: errorMsg[this.locale].alphanumeric });\n        return this;\n    }\n\n    public noSpecials(space: boolean = true, extendJpn: boolean | null = false): this {\n        if (!this.inputValue) return this;\n        let format = /[`!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?~]/;\n        if (!space) format = /[ `!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?~]/;\n        if (extendJpn) format = /[`!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?~｀！＠＃＄％＾＆＊（）_＋ー＝「」『』；'：\"＼｜、。＜＞・？〜]/;\n        if (!space && extendJpn) format = /[ `!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?~　｀！＠＃＄％＾＆＊（）_＋ー＝「」『』；'：\"＼｜、。＜＞・？〜]/;\n        if (format.test(String(this.inputValue)))\n            this._addError({ errored: this.inputValue, code: \"SPESYMBOL\", label: errorMsg[this.locale].noSpecials });\n        return this;\n    }\n\n    public isUUIDv4(): this {\n        if (!this.inputValue) throw new Error(\"Please provide a value\");\n        if (!/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(String(this.inputValue)))\n            this._addError({ errored: this.inputValue, code: \"INVALID_UUIDV4\", label: errorMsg[this.locale].isUUIDv4 });\n        return this;\n    }\n\n    public isSameAs(value: unknown): this {\n        if (!this.inputValue) throw new Error(\"Please provide a value\");\n        if (this.inputValue !== value)\n            this._addError({ errored: this.inputValue, code: \"NOT_SAME\", label: errorMsg[this.locale].isSameAs });\n        return this;\n    }\n\n    public verify(returnErrors: boolean = false): boolean | Record<string, ValidationError[]> {\n        const hasErrors = Object.values(this.errorMap).some((errs) => errs.length > 0);\n        if (hasErrors) return returnErrors ? this.errorMap : false;\n        return true;\n    }\n\n    public hasError(): boolean {\n        return Object.values(this.errorMap).some((errs) => errs.length > 0);\n    }\n\n    public reset(): void {\n        this.inputValue = null;\n        this.errorMap = {};\n        this.currentErrorName = \"\";\n        this.pristineMap = {};\n        this.valueMap = {};\n    }\n}\n\nexport const validator = new Validator();\n"],"mappings":";AACA,IAAM,YAAY;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEA,IAAM,SAAS;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAGO,IAAM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A,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA;AAAA,IACI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AACJ;AAEO,IAAM,kBAA+C;AAAA,EACxD,KAAK;AAAA,IACD;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA,KAAK;AAAA,IACD;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA,KAAK;AAAA,IACD;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA,KAAK;AAAA,IACD;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA,KAAK;AAAA,IACD;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA,KAAK;AAAA,IACD;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA,KAAK;AAAA,IACD;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,EACT;AAAA,EACA,KAAK;AAAA,IACD;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACzB;AAAA,IAAK;AAAA,IAAK;AAA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","names":["result","x","y","z","Generate","timestamp","Generate"]}