/*******************************************************************************
***  This file is part of Pecunia.                                           ***
***                                                                          ***
***  Copyright (C) 2017, 2018, 2019, 2020, 2021, 2023                        ***
***  John Schneiderman <Licencing _AT_ Schneiderman _DOT_ me>                ***
***                                                                          ***
***  This program is free software: you can redistribute it and/or modify it ***
***  under the terms of the GNU Lesser General Public License as published   ***
***  by the Free Software Foundation, either version 3 of the License, or    ***
***  (at your option) any later version.                                     ***
***                                                                          ***
***  This program is distributed in the hope that it will be useful, but     ***
***  WITHOUT ANY WARRANTY; without even the implied warranty of              ***
***  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                    ***
***  See the GNU Lesser General Public License for more details.             ***
***                                                                          ***
***  You should have received a copy of the GNU Lesser General Public License***
***  along with this program. If not, see <http://www.gnu.org/licenses/>.    ***
*******************************************************************************/

//  ██████╗  ██████╗     ███╗   ██╗ ██████╗ ████████╗    ███████╗██████╗ ██╗████████╗██╗
//  ██╔══██╗██╔═══██╗    ████╗  ██║██╔═══██╗╚══██╔══╝    ██╔════╝██╔══██╗██║╚══██╔══╝██║
//  ██║  ██║██║   ██║    ██╔██╗ ██║██║   ██║   ██║       █████╗  ██║  ██║██║   ██║   ██║
//  ██║  ██║██║   ██║    ██║╚██╗██║██║   ██║   ██║       ██╔══╝  ██║  ██║██║   ██║   ╚═╝
//  ██████╔╝╚██████╔╝    ██║ ╚████║╚██████╔╝   ██║       ███████╗██████╔╝██║   ██║   ██╗
//  ╚═════╝  ╚═════╝     ╚═╝  ╚═══╝ ╚═════╝    ╚═╝       ╚══════╝╚═════╝ ╚═╝   ╚═╝   ╚═╝
//
//  ███████╗██╗██╗     ███████╗     ██████╗ ██████╗ ███╗   ██╗████████╗███████╗███╗   ██╗████████╗
//  ██╔════╝██║██║     ██╔════╝    ██╔════╝██╔═══██╗████╗  ██║╚══██╔══╝██╔════╝████╗  ██║╚══██╔══╝
//  █████╗  ██║██║     █████╗      ██║     ██║   ██║██╔██╗ ██║   ██║   █████╗  ██╔██╗ ██║   ██║
//  ██╔══╝  ██║██║     ██╔══╝      ██║     ██║   ██║██║╚██╗██║   ██║   ██╔══╝  ██║╚██╗██║   ██║
//  ██║     ██║███████╗███████╗    ╚██████╗╚██████╔╝██║ ╚████║   ██║   ███████╗██║ ╚████║   ██║
//  ╚═╝     ╚═╝╚══════╝╚══════╝     ╚═════╝ ╚═════╝ ╚═╝  ╚═══╝   ╚═╝   ╚══════╝╚═╝  ╚═══╝   ╚═╝
//
//   ██████╗██████╗ ███████╗ █████╗ ████████╗██╗ ██████╗ ███╗   ██╗    ██╗███████╗
//  ██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██║██╔═══██╗████╗  ██║    ██║██╔════╝
//  ██║     ██████╔╝█████╗  ███████║   ██║   ██║██║   ██║██╔██╗ ██║    ██║███████╗
//  ██║     ██╔══██╗██╔══╝  ██╔══██║   ██║   ██║██║   ██║██║╚██╗██║    ██║╚════██║
//  ╚██████╗██║  ██║███████╗██║  ██║   ██║   ██║╚██████╔╝██║ ╚████║    ██║███████║
//   ╚═════╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝   ╚═╝   ╚═╝ ╚═════╝ ╚═╝  ╚═══╝    ╚═╝╚══════╝
//
//   █████╗ ██╗   ██╗████████╗ ██████╗ ███╗   ███╗ █████╗ ████████╗███████╗██████╗
//  ██╔══██╗██║   ██║╚══██╔══╝██╔═══██╗████╗ ████║██╔══██╗╚══██╔══╝██╔════╝██╔══██╗
//  ███████║██║   ██║   ██║   ██║   ██║██╔████╔██║███████║   ██║   █████╗  ██║  ██║
//  ██╔══██║██║   ██║   ██║   ██║   ██║██║╚██╔╝██║██╔══██║   ██║   ██╔══╝  ██║  ██║
//  ██║  ██║╚██████╔╝   ██║   ╚██████╔╝██║ ╚═╝ ██║██║  ██║   ██║   ███████╗██████╔╝██╗
//  ╚═╝  ╚═╝ ╚═════╝    ╚═╝    ╚═════╝ ╚═╝     ╚═╝╚═╝  ╚═╝   ╚═╝   ╚══════╝╚═════╝ ╚═╝
// Generated At: 2023-01-30T18:46:32.889410

#include "Codes.h"
using namespace std::string_literals;
using std::array;
using std::ostream;
using std::string;
using std::to_string;
using std::vector;
using pecunia::currency::Iso4217Codes;
using pecunia::currency::numberOfIso4217Codes;

#include <cassert>
// Used for assert.
#include <cmath>
using std::pow;
#include <map>
using std::map;
#include <stdexcept>
using std::runtime_error;

#include "MoneyTypes.h"
using pecunia::precision;


string pecunia::currency::toStdString(const Iso4217Codes& code)
{
	switch (code)
	{
	case Iso4217Codes::AED:
		return "AED";
	case Iso4217Codes::AFN:
		return "AFN";
	case Iso4217Codes::ALL:
		return "ALL";
	case Iso4217Codes::AMD:
		return "AMD";
	case Iso4217Codes::ANG:
		return "ANG";
	case Iso4217Codes::AOA:
		return "AOA";
	case Iso4217Codes::ARS:
		return "ARS";
	case Iso4217Codes::AUD:
		return "AUD";
	case Iso4217Codes::AWG:
		return "AWG";
	case Iso4217Codes::AZN:
		return "AZN";
	case Iso4217Codes::BAM:
		return "BAM";
	case Iso4217Codes::BBD:
		return "BBD";
	case Iso4217Codes::BDT:
		return "BDT";
	case Iso4217Codes::BGN:
		return "BGN";
	case Iso4217Codes::BHD:
		return "BHD";
	case Iso4217Codes::BIF:
		return "BIF";
	case Iso4217Codes::BMD:
		return "BMD";
	case Iso4217Codes::BND:
		return "BND";
	case Iso4217Codes::BOB:
		return "BOB";
	case Iso4217Codes::BOV:
		return "BOV";
	case Iso4217Codes::BRL:
		return "BRL";
	case Iso4217Codes::BSD:
		return "BSD";
	case Iso4217Codes::BTN:
		return "BTN";
	case Iso4217Codes::BWP:
		return "BWP";
	case Iso4217Codes::BYN:
		return "BYN";
	case Iso4217Codes::BZD:
		return "BZD";
	case Iso4217Codes::CAD:
		return "CAD";
	case Iso4217Codes::CDF:
		return "CDF";
	case Iso4217Codes::CHE:
		return "CHE";
	case Iso4217Codes::CHF:
		return "CHF";
	case Iso4217Codes::CHW:
		return "CHW";
	case Iso4217Codes::CLF:
		return "CLF";
	case Iso4217Codes::CLP:
		return "CLP";
	case Iso4217Codes::CNY:
		return "CNY";
	case Iso4217Codes::COP:
		return "COP";
	case Iso4217Codes::COU:
		return "COU";
	case Iso4217Codes::CRC:
		return "CRC";
	case Iso4217Codes::CUC:
		return "CUC";
	case Iso4217Codes::CUP:
		return "CUP";
	case Iso4217Codes::CVE:
		return "CVE";
	case Iso4217Codes::CZK:
		return "CZK";
	case Iso4217Codes::DJF:
		return "DJF";
	case Iso4217Codes::DKK:
		return "DKK";
	case Iso4217Codes::DOP:
		return "DOP";
	case Iso4217Codes::DZD:
		return "DZD";
	case Iso4217Codes::EGP:
		return "EGP";
	case Iso4217Codes::ERN:
		return "ERN";
	case Iso4217Codes::ETB:
		return "ETB";
	case Iso4217Codes::EUR:
		return "EUR";
	case Iso4217Codes::FJD:
		return "FJD";
	case Iso4217Codes::FKP:
		return "FKP";
	case Iso4217Codes::GBP:
		return "GBP";
	case Iso4217Codes::GEL:
		return "GEL";
	case Iso4217Codes::GHS:
		return "GHS";
	case Iso4217Codes::GIP:
		return "GIP";
	case Iso4217Codes::GMD:
		return "GMD";
	case Iso4217Codes::GNF:
		return "GNF";
	case Iso4217Codes::GTQ:
		return "GTQ";
	case Iso4217Codes::GYD:
		return "GYD";
	case Iso4217Codes::HKD:
		return "HKD";
	case Iso4217Codes::HNL:
		return "HNL";
	case Iso4217Codes::HTG:
		return "HTG";
	case Iso4217Codes::HUF:
		return "HUF";
	case Iso4217Codes::IDR:
		return "IDR";
	case Iso4217Codes::ILS:
		return "ILS";
	case Iso4217Codes::INR:
		return "INR";
	case Iso4217Codes::IQD:
		return "IQD";
	case Iso4217Codes::IRR:
		return "IRR";
	case Iso4217Codes::ISK:
		return "ISK";
	case Iso4217Codes::JMD:
		return "JMD";
	case Iso4217Codes::JOD:
		return "JOD";
	case Iso4217Codes::JPY:
		return "JPY";
	case Iso4217Codes::KES:
		return "KES";
	case Iso4217Codes::KGS:
		return "KGS";
	case Iso4217Codes::KHR:
		return "KHR";
	case Iso4217Codes::KMF:
		return "KMF";
	case Iso4217Codes::KPW:
		return "KPW";
	case Iso4217Codes::KRW:
		return "KRW";
	case Iso4217Codes::KWD:
		return "KWD";
	case Iso4217Codes::KYD:
		return "KYD";
	case Iso4217Codes::KZT:
		return "KZT";
	case Iso4217Codes::LAK:
		return "LAK";
	case Iso4217Codes::LBP:
		return "LBP";
	case Iso4217Codes::LKR:
		return "LKR";
	case Iso4217Codes::LRD:
		return "LRD";
	case Iso4217Codes::LSL:
		return "LSL";
	case Iso4217Codes::LYD:
		return "LYD";
	case Iso4217Codes::MAD:
		return "MAD";
	case Iso4217Codes::MDL:
		return "MDL";
	case Iso4217Codes::MGA:
		return "MGA";
	case Iso4217Codes::MKD:
		return "MKD";
	case Iso4217Codes::MMK:
		return "MMK";
	case Iso4217Codes::MNT:
		return "MNT";
	case Iso4217Codes::MOP:
		return "MOP";
	case Iso4217Codes::MRU:
		return "MRU";
	case Iso4217Codes::MUR:
		return "MUR";
	case Iso4217Codes::MVR:
		return "MVR";
	case Iso4217Codes::MWK:
		return "MWK";
	case Iso4217Codes::MXN:
		return "MXN";
	case Iso4217Codes::MXV:
		return "MXV";
	case Iso4217Codes::MYR:
		return "MYR";
	case Iso4217Codes::MZN:
		return "MZN";
	case Iso4217Codes::NAD:
		return "NAD";
	case Iso4217Codes::NGN:
		return "NGN";
	case Iso4217Codes::NIO:
		return "NIO";
	case Iso4217Codes::NOK:
		return "NOK";
	case Iso4217Codes::NPR:
		return "NPR";
	case Iso4217Codes::NZD:
		return "NZD";
	case Iso4217Codes::OMR:
		return "OMR";
	case Iso4217Codes::PAB:
		return "PAB";
	case Iso4217Codes::PEN:
		return "PEN";
	case Iso4217Codes::PGK:
		return "PGK";
	case Iso4217Codes::PHP:
		return "PHP";
	case Iso4217Codes::PKR:
		return "PKR";
	case Iso4217Codes::PLN:
		return "PLN";
	case Iso4217Codes::PYG:
		return "PYG";
	case Iso4217Codes::QAR:
		return "QAR";
	case Iso4217Codes::RON:
		return "RON";
	case Iso4217Codes::RSD:
		return "RSD";
	case Iso4217Codes::RUB:
		return "RUB";
	case Iso4217Codes::RWF:
		return "RWF";
	case Iso4217Codes::SAR:
		return "SAR";
	case Iso4217Codes::SBD:
		return "SBD";
	case Iso4217Codes::SCR:
		return "SCR";
	case Iso4217Codes::SDG:
		return "SDG";
	case Iso4217Codes::SEK:
		return "SEK";
	case Iso4217Codes::SGD:
		return "SGD";
	case Iso4217Codes::SHP:
		return "SHP";
	case Iso4217Codes::SLE:
		return "SLE";
	case Iso4217Codes::SLL:
		return "SLL";
	case Iso4217Codes::SOS:
		return "SOS";
	case Iso4217Codes::SRD:
		return "SRD";
	case Iso4217Codes::SSP:
		return "SSP";
	case Iso4217Codes::STN:
		return "STN";
	case Iso4217Codes::SVC:
		return "SVC";
	case Iso4217Codes::SYP:
		return "SYP";
	case Iso4217Codes::SZL:
		return "SZL";
	case Iso4217Codes::THB:
		return "THB";
	case Iso4217Codes::TJS:
		return "TJS";
	case Iso4217Codes::TMT:
		return "TMT";
	case Iso4217Codes::TND:
		return "TND";
	case Iso4217Codes::TOP:
		return "TOP";
	case Iso4217Codes::TRY:
		return "TRY";
	case Iso4217Codes::TTD:
		return "TTD";
	case Iso4217Codes::TWD:
		return "TWD";
	case Iso4217Codes::TZS:
		return "TZS";
	case Iso4217Codes::UAH:
		return "UAH";
	case Iso4217Codes::UGX:
		return "UGX";
	case Iso4217Codes::USD:
		return "USD";
	case Iso4217Codes::USN:
		return "USN";
	case Iso4217Codes::UYI:
		return "UYI";
	case Iso4217Codes::UYU:
		return "UYU";
	case Iso4217Codes::UYW:
		return "UYW";
	case Iso4217Codes::UZS:
		return "UZS";
	case Iso4217Codes::VED:
		return "VED";
	case Iso4217Codes::VES:
		return "VES";
	case Iso4217Codes::VND:
		return "VND";
	case Iso4217Codes::VUV:
		return "VUV";
	case Iso4217Codes::WST:
		return "WST";
	case Iso4217Codes::XAF:
		return "XAF";
	case Iso4217Codes::XAG:
		return "XAG";
	case Iso4217Codes::XAU:
		return "XAU";
	case Iso4217Codes::XBA:
		return "XBA";
	case Iso4217Codes::XBB:
		return "XBB";
	case Iso4217Codes::XBC:
		return "XBC";
	case Iso4217Codes::XBD:
		return "XBD";
	case Iso4217Codes::XCD:
		return "XCD";
	case Iso4217Codes::XDR:
		return "XDR";
	case Iso4217Codes::XOF:
		return "XOF";
	case Iso4217Codes::XPD:
		return "XPD";
	case Iso4217Codes::XPF:
		return "XPF";
	case Iso4217Codes::XPT:
		return "XPT";
	case Iso4217Codes::XSU:
		return "XSU";
	case Iso4217Codes::XTS:
		return "XTS";
	case Iso4217Codes::XUA:
		return "XUA";
	case Iso4217Codes::XXX:
		return "XXX";
	case Iso4217Codes::YER:
		return "YER";
	case Iso4217Codes::ZAR:
		return "ZAR";
	case Iso4217Codes::ZMW:
		return "ZMW";
	case Iso4217Codes::ZWL:
		return "ZWL";
	default:
		assert(false && "Unhandled currency code for conversion to an ISO-4217 string.");
		return "";
	};
}

Iso4217Codes pecunia::currency::toIso4217Code(const string& code)
{
	if ("AED" == code)
		return Iso4217Codes::AED;

	if ("AFN" == code)
		return Iso4217Codes::AFN;

	if ("ALL" == code)
		return Iso4217Codes::ALL;

	if ("AMD" == code)
		return Iso4217Codes::AMD;

	if ("ANG" == code)
		return Iso4217Codes::ANG;

	if ("AOA" == code)
		return Iso4217Codes::AOA;

	if ("ARS" == code)
		return Iso4217Codes::ARS;

	if ("AUD" == code)
		return Iso4217Codes::AUD;

	if ("AWG" == code)
		return Iso4217Codes::AWG;

	if ("AZN" == code)
		return Iso4217Codes::AZN;

	if ("BAM" == code)
		return Iso4217Codes::BAM;

	if ("BBD" == code)
		return Iso4217Codes::BBD;

	if ("BDT" == code)
		return Iso4217Codes::BDT;

	if ("BGN" == code)
		return Iso4217Codes::BGN;

	if ("BHD" == code)
		return Iso4217Codes::BHD;

	if ("BIF" == code)
		return Iso4217Codes::BIF;

	if ("BMD" == code)
		return Iso4217Codes::BMD;

	if ("BND" == code)
		return Iso4217Codes::BND;

	if ("BOB" == code)
		return Iso4217Codes::BOB;

	if ("BOV" == code)
		return Iso4217Codes::BOV;

	if ("BRL" == code)
		return Iso4217Codes::BRL;

	if ("BSD" == code)
		return Iso4217Codes::BSD;

	if ("BTN" == code)
		return Iso4217Codes::BTN;

	if ("BWP" == code)
		return Iso4217Codes::BWP;

	if ("BYN" == code)
		return Iso4217Codes::BYN;

	if ("BZD" == code)
		return Iso4217Codes::BZD;

	if ("CAD" == code)
		return Iso4217Codes::CAD;

	if ("CDF" == code)
		return Iso4217Codes::CDF;

	if ("CHE" == code)
		return Iso4217Codes::CHE;

	if ("CHF" == code)
		return Iso4217Codes::CHF;

	if ("CHW" == code)
		return Iso4217Codes::CHW;

	if ("CLF" == code)
		return Iso4217Codes::CLF;

	if ("CLP" == code)
		return Iso4217Codes::CLP;

	if ("CNY" == code)
		return Iso4217Codes::CNY;

	if ("COP" == code)
		return Iso4217Codes::COP;

	if ("COU" == code)
		return Iso4217Codes::COU;

	if ("CRC" == code)
		return Iso4217Codes::CRC;

	if ("CUC" == code)
		return Iso4217Codes::CUC;

	if ("CUP" == code)
		return Iso4217Codes::CUP;

	if ("CVE" == code)
		return Iso4217Codes::CVE;

	if ("CZK" == code)
		return Iso4217Codes::CZK;

	if ("DJF" == code)
		return Iso4217Codes::DJF;

	if ("DKK" == code)
		return Iso4217Codes::DKK;

	if ("DOP" == code)
		return Iso4217Codes::DOP;

	if ("DZD" == code)
		return Iso4217Codes::DZD;

	if ("EGP" == code)
		return Iso4217Codes::EGP;

	if ("ERN" == code)
		return Iso4217Codes::ERN;

	if ("ETB" == code)
		return Iso4217Codes::ETB;

	if ("EUR" == code)
		return Iso4217Codes::EUR;

	if ("FJD" == code)
		return Iso4217Codes::FJD;

	if ("FKP" == code)
		return Iso4217Codes::FKP;

	if ("GBP" == code)
		return Iso4217Codes::GBP;

	if ("GEL" == code)
		return Iso4217Codes::GEL;

	if ("GHS" == code)
		return Iso4217Codes::GHS;

	if ("GIP" == code)
		return Iso4217Codes::GIP;

	if ("GMD" == code)
		return Iso4217Codes::GMD;

	if ("GNF" == code)
		return Iso4217Codes::GNF;

	if ("GTQ" == code)
		return Iso4217Codes::GTQ;

	if ("GYD" == code)
		return Iso4217Codes::GYD;

	if ("HKD" == code)
		return Iso4217Codes::HKD;

	if ("HNL" == code)
		return Iso4217Codes::HNL;

	if ("HTG" == code)
		return Iso4217Codes::HTG;

	if ("HUF" == code)
		return Iso4217Codes::HUF;

	if ("IDR" == code)
		return Iso4217Codes::IDR;

	if ("ILS" == code)
		return Iso4217Codes::ILS;

	if ("INR" == code)
		return Iso4217Codes::INR;

	if ("IQD" == code)
		return Iso4217Codes::IQD;

	if ("IRR" == code)
		return Iso4217Codes::IRR;

	if ("ISK" == code)
		return Iso4217Codes::ISK;

	if ("JMD" == code)
		return Iso4217Codes::JMD;

	if ("JOD" == code)
		return Iso4217Codes::JOD;

	if ("JPY" == code)
		return Iso4217Codes::JPY;

	if ("KES" == code)
		return Iso4217Codes::KES;

	if ("KGS" == code)
		return Iso4217Codes::KGS;

	if ("KHR" == code)
		return Iso4217Codes::KHR;

	if ("KMF" == code)
		return Iso4217Codes::KMF;

	if ("KPW" == code)
		return Iso4217Codes::KPW;

	if ("KRW" == code)
		return Iso4217Codes::KRW;

	if ("KWD" == code)
		return Iso4217Codes::KWD;

	if ("KYD" == code)
		return Iso4217Codes::KYD;

	if ("KZT" == code)
		return Iso4217Codes::KZT;

	if ("LAK" == code)
		return Iso4217Codes::LAK;

	if ("LBP" == code)
		return Iso4217Codes::LBP;

	if ("LKR" == code)
		return Iso4217Codes::LKR;

	if ("LRD" == code)
		return Iso4217Codes::LRD;

	if ("LSL" == code)
		return Iso4217Codes::LSL;

	if ("LYD" == code)
		return Iso4217Codes::LYD;

	if ("MAD" == code)
		return Iso4217Codes::MAD;

	if ("MDL" == code)
		return Iso4217Codes::MDL;

	if ("MGA" == code)
		return Iso4217Codes::MGA;

	if ("MKD" == code)
		return Iso4217Codes::MKD;

	if ("MMK" == code)
		return Iso4217Codes::MMK;

	if ("MNT" == code)
		return Iso4217Codes::MNT;

	if ("MOP" == code)
		return Iso4217Codes::MOP;

	if ("MRU" == code)
		return Iso4217Codes::MRU;

	if ("MUR" == code)
		return Iso4217Codes::MUR;

	if ("MVR" == code)
		return Iso4217Codes::MVR;

	if ("MWK" == code)
		return Iso4217Codes::MWK;

	if ("MXN" == code)
		return Iso4217Codes::MXN;

	if ("MXV" == code)
		return Iso4217Codes::MXV;

	if ("MYR" == code)
		return Iso4217Codes::MYR;

	if ("MZN" == code)
		return Iso4217Codes::MZN;

	if ("NAD" == code)
		return Iso4217Codes::NAD;

	if ("NGN" == code)
		return Iso4217Codes::NGN;

	if ("NIO" == code)
		return Iso4217Codes::NIO;

	if ("NOK" == code)
		return Iso4217Codes::NOK;

	if ("NPR" == code)
		return Iso4217Codes::NPR;

	if ("NZD" == code)
		return Iso4217Codes::NZD;

	if ("OMR" == code)
		return Iso4217Codes::OMR;

	if ("PAB" == code)
		return Iso4217Codes::PAB;

	if ("PEN" == code)
		return Iso4217Codes::PEN;

	if ("PGK" == code)
		return Iso4217Codes::PGK;

	if ("PHP" == code)
		return Iso4217Codes::PHP;

	if ("PKR" == code)
		return Iso4217Codes::PKR;

	if ("PLN" == code)
		return Iso4217Codes::PLN;

	if ("PYG" == code)
		return Iso4217Codes::PYG;

	if ("QAR" == code)
		return Iso4217Codes::QAR;

	if ("RON" == code)
		return Iso4217Codes::RON;

	if ("RSD" == code)
		return Iso4217Codes::RSD;

	if ("RUB" == code)
		return Iso4217Codes::RUB;

	if ("RWF" == code)
		return Iso4217Codes::RWF;

	if ("SAR" == code)
		return Iso4217Codes::SAR;

	if ("SBD" == code)
		return Iso4217Codes::SBD;

	if ("SCR" == code)
		return Iso4217Codes::SCR;

	if ("SDG" == code)
		return Iso4217Codes::SDG;

	if ("SEK" == code)
		return Iso4217Codes::SEK;

	if ("SGD" == code)
		return Iso4217Codes::SGD;

	if ("SHP" == code)
		return Iso4217Codes::SHP;

	if ("SLE" == code)
		return Iso4217Codes::SLE;

	if ("SLL" == code)
		return Iso4217Codes::SLL;

	if ("SOS" == code)
		return Iso4217Codes::SOS;

	if ("SRD" == code)
		return Iso4217Codes::SRD;

	if ("SSP" == code)
		return Iso4217Codes::SSP;

	if ("STN" == code)
		return Iso4217Codes::STN;

	if ("SVC" == code)
		return Iso4217Codes::SVC;

	if ("SYP" == code)
		return Iso4217Codes::SYP;

	if ("SZL" == code)
		return Iso4217Codes::SZL;

	if ("THB" == code)
		return Iso4217Codes::THB;

	if ("TJS" == code)
		return Iso4217Codes::TJS;

	if ("TMT" == code)
		return Iso4217Codes::TMT;

	if ("TND" == code)
		return Iso4217Codes::TND;

	if ("TOP" == code)
		return Iso4217Codes::TOP;

	if ("TRY" == code)
		return Iso4217Codes::TRY;

	if ("TTD" == code)
		return Iso4217Codes::TTD;

	if ("TWD" == code)
		return Iso4217Codes::TWD;

	if ("TZS" == code)
		return Iso4217Codes::TZS;

	if ("UAH" == code)
		return Iso4217Codes::UAH;

	if ("UGX" == code)
		return Iso4217Codes::UGX;

	if ("USD" == code)
		return Iso4217Codes::USD;

	if ("USN" == code)
		return Iso4217Codes::USN;

	if ("UYI" == code)
		return Iso4217Codes::UYI;

	if ("UYU" == code)
		return Iso4217Codes::UYU;

	if ("UYW" == code)
		return Iso4217Codes::UYW;

	if ("UZS" == code)
		return Iso4217Codes::UZS;

	if ("VED" == code)
		return Iso4217Codes::VED;

	if ("VES" == code)
		return Iso4217Codes::VES;

	if ("VND" == code)
		return Iso4217Codes::VND;

	if ("VUV" == code)
		return Iso4217Codes::VUV;

	if ("WST" == code)
		return Iso4217Codes::WST;

	if ("XAF" == code)
		return Iso4217Codes::XAF;

	if ("XAG" == code)
		return Iso4217Codes::XAG;

	if ("XAU" == code)
		return Iso4217Codes::XAU;

	if ("XBA" == code)
		return Iso4217Codes::XBA;

	if ("XBB" == code)
		return Iso4217Codes::XBB;

	if ("XBC" == code)
		return Iso4217Codes::XBC;

	if ("XBD" == code)
		return Iso4217Codes::XBD;

	if ("XCD" == code)
		return Iso4217Codes::XCD;

	if ("XDR" == code)
		return Iso4217Codes::XDR;

	if ("XOF" == code)
		return Iso4217Codes::XOF;

	if ("XPD" == code)
		return Iso4217Codes::XPD;

	if ("XPF" == code)
		return Iso4217Codes::XPF;

	if ("XPT" == code)
		return Iso4217Codes::XPT;

	if ("XSU" == code)
		return Iso4217Codes::XSU;

	if ("XTS" == code)
		return Iso4217Codes::XTS;

	if ("XUA" == code)
		return Iso4217Codes::XUA;

	if ("XXX" == code)
		return Iso4217Codes::XXX;

	if ("YER" == code)
		return Iso4217Codes::YER;

	if ("ZAR" == code)
		return Iso4217Codes::ZAR;

	if ("ZMW" == code)
		return Iso4217Codes::ZMW;

	if ("ZWL" == code)
		return Iso4217Codes::ZWL;
	throw runtime_error{
		"Unhandled currency code '" + code + "' for conversion to its strong type."
	};
}

string pecunia::currency::currencySymbol(const Iso4217Codes& code)
{
	switch (code)
	{
	case Iso4217Codes::EUR:
		return "€";
	case Iso4217Codes::PLN:
		return "zł";
	case Iso4217Codes::USD:
		return "$";
	default:
		assert(false && "Unhandled currency code for conversion to a symbol.");
		return "";
	};
}

uint8_t pecunia::currency::minorUnitDigits(const Iso4217Codes& code)
{
	switch (code)
	{
	case Iso4217Codes::BIF:
	case Iso4217Codes::CLP:
	case Iso4217Codes::DJF:
	case Iso4217Codes::GNF:
	case Iso4217Codes::ISK:
	case Iso4217Codes::JPY:
	case Iso4217Codes::KMF:
	case Iso4217Codes::KRW:
	case Iso4217Codes::PYG:
	case Iso4217Codes::RWF:
	case Iso4217Codes::UGX:
	case Iso4217Codes::UYI:
	case Iso4217Codes::VND:
	case Iso4217Codes::VUV:
	case Iso4217Codes::XAF:
	case Iso4217Codes::XAG:
	case Iso4217Codes::XAU:
	case Iso4217Codes::XBA:
	case Iso4217Codes::XBB:
	case Iso4217Codes::XBC:
	case Iso4217Codes::XBD:
	case Iso4217Codes::XDR:
	case Iso4217Codes::XOF:
	case Iso4217Codes::XPD:
	case Iso4217Codes::XPF:
	case Iso4217Codes::XPT:
	case Iso4217Codes::XSU:
	case Iso4217Codes::XTS:
	case Iso4217Codes::XUA:
	case Iso4217Codes::XXX:
		return 0u;
	case Iso4217Codes::AED:
	case Iso4217Codes::AFN:
	case Iso4217Codes::ALL:
	case Iso4217Codes::AMD:
	case Iso4217Codes::ANG:
	case Iso4217Codes::AOA:
	case Iso4217Codes::ARS:
	case Iso4217Codes::AUD:
	case Iso4217Codes::AWG:
	case Iso4217Codes::AZN:
	case Iso4217Codes::BAM:
	case Iso4217Codes::BBD:
	case Iso4217Codes::BDT:
	case Iso4217Codes::BGN:
	case Iso4217Codes::BMD:
	case Iso4217Codes::BND:
	case Iso4217Codes::BOB:
	case Iso4217Codes::BOV:
	case Iso4217Codes::BRL:
	case Iso4217Codes::BSD:
	case Iso4217Codes::BTN:
	case Iso4217Codes::BWP:
	case Iso4217Codes::BYN:
	case Iso4217Codes::BZD:
	case Iso4217Codes::CAD:
	case Iso4217Codes::CDF:
	case Iso4217Codes::CHE:
	case Iso4217Codes::CHF:
	case Iso4217Codes::CHW:
	case Iso4217Codes::CNY:
	case Iso4217Codes::COP:
	case Iso4217Codes::COU:
	case Iso4217Codes::CRC:
	case Iso4217Codes::CUC:
	case Iso4217Codes::CUP:
	case Iso4217Codes::CVE:
	case Iso4217Codes::CZK:
	case Iso4217Codes::DKK:
	case Iso4217Codes::DOP:
	case Iso4217Codes::DZD:
	case Iso4217Codes::EGP:
	case Iso4217Codes::ERN:
	case Iso4217Codes::ETB:
	case Iso4217Codes::EUR:
	case Iso4217Codes::FJD:
	case Iso4217Codes::FKP:
	case Iso4217Codes::GBP:
	case Iso4217Codes::GEL:
	case Iso4217Codes::GHS:
	case Iso4217Codes::GIP:
	case Iso4217Codes::GMD:
	case Iso4217Codes::GTQ:
	case Iso4217Codes::GYD:
	case Iso4217Codes::HKD:
	case Iso4217Codes::HNL:
	case Iso4217Codes::HTG:
	case Iso4217Codes::HUF:
	case Iso4217Codes::IDR:
	case Iso4217Codes::ILS:
	case Iso4217Codes::INR:
	case Iso4217Codes::IRR:
	case Iso4217Codes::JMD:
	case Iso4217Codes::KES:
	case Iso4217Codes::KGS:
	case Iso4217Codes::KHR:
	case Iso4217Codes::KPW:
	case Iso4217Codes::KYD:
	case Iso4217Codes::KZT:
	case Iso4217Codes::LAK:
	case Iso4217Codes::LBP:
	case Iso4217Codes::LKR:
	case Iso4217Codes::LRD:
	case Iso4217Codes::LSL:
	case Iso4217Codes::MAD:
	case Iso4217Codes::MDL:
	case Iso4217Codes::MGA:
	case Iso4217Codes::MKD:
	case Iso4217Codes::MMK:
	case Iso4217Codes::MNT:
	case Iso4217Codes::MOP:
	case Iso4217Codes::MRU:
	case Iso4217Codes::MUR:
	case Iso4217Codes::MVR:
	case Iso4217Codes::MWK:
	case Iso4217Codes::MXN:
	case Iso4217Codes::MXV:
	case Iso4217Codes::MYR:
	case Iso4217Codes::MZN:
	case Iso4217Codes::NAD:
	case Iso4217Codes::NGN:
	case Iso4217Codes::NIO:
	case Iso4217Codes::NOK:
	case Iso4217Codes::NPR:
	case Iso4217Codes::NZD:
	case Iso4217Codes::PAB:
	case Iso4217Codes::PEN:
	case Iso4217Codes::PGK:
	case Iso4217Codes::PHP:
	case Iso4217Codes::PKR:
	case Iso4217Codes::PLN:
	case Iso4217Codes::QAR:
	case Iso4217Codes::RON:
	case Iso4217Codes::RSD:
	case Iso4217Codes::RUB:
	case Iso4217Codes::SAR:
	case Iso4217Codes::SBD:
	case Iso4217Codes::SCR:
	case Iso4217Codes::SDG:
	case Iso4217Codes::SEK:
	case Iso4217Codes::SGD:
	case Iso4217Codes::SHP:
	case Iso4217Codes::SLE:
	case Iso4217Codes::SLL:
	case Iso4217Codes::SOS:
	case Iso4217Codes::SRD:
	case Iso4217Codes::SSP:
	case Iso4217Codes::STN:
	case Iso4217Codes::SVC:
	case Iso4217Codes::SYP:
	case Iso4217Codes::SZL:
	case Iso4217Codes::THB:
	case Iso4217Codes::TJS:
	case Iso4217Codes::TMT:
	case Iso4217Codes::TOP:
	case Iso4217Codes::TRY:
	case Iso4217Codes::TTD:
	case Iso4217Codes::TWD:
	case Iso4217Codes::TZS:
	case Iso4217Codes::UAH:
	case Iso4217Codes::USD:
	case Iso4217Codes::USN:
	case Iso4217Codes::UYU:
	case Iso4217Codes::UZS:
	case Iso4217Codes::VED:
	case Iso4217Codes::VES:
	case Iso4217Codes::WST:
	case Iso4217Codes::XCD:
	case Iso4217Codes::YER:
	case Iso4217Codes::ZAR:
	case Iso4217Codes::ZMW:
	case Iso4217Codes::ZWL:
		return 2u;
	case Iso4217Codes::BHD:
	case Iso4217Codes::IQD:
	case Iso4217Codes::JOD:
	case Iso4217Codes::KWD:
	case Iso4217Codes::LYD:
	case Iso4217Codes::OMR:
	case Iso4217Codes::TND:
		return 3u;
	case Iso4217Codes::CLF:
	case Iso4217Codes::UYW:
		return 4u;
	default:
		assert(false && "Unhandled currency code for minor unit digits.");
		return 0u;
	};
}

int32_t pecunia::currency::minorUnitPrecisionFactor(const Iso4217Codes& code)
{
	return static_cast<int32_t>(pow(10, minorUnitDigits(code) + precision));
}

ostream& pecunia::currency::operator<<(ostream& stream, const Iso4217Codes& code)
{
	return stream << toStdString(code);
}

// cppcheck-suppress unusedFunction
vector<string> pecunia::currency::countriesUsing(const Iso4217Codes& code)
{
	static const map<Iso4217Codes, vector<string>> codeCountries{
		{
			Iso4217Codes::AED,
			{
				{"UNITED ARAB EMIRATES (THE)"s}
			}
		},
		{
			Iso4217Codes::AFN,
			{
				{"AFGHANISTAN"s}
			}
		},
		{
			Iso4217Codes::ALL,
			{
				{"ALBANIA"s}
			}
		},
		{
			Iso4217Codes::AMD,
			{
				{"ARMENIA"s}
			}
		},
		{
			Iso4217Codes::ANG,
			{
				{"CURAÇAO"s, "SINT MAARTEN (DUTCH PART)"s}
			}
		},
		{
			Iso4217Codes::AOA,
			{
				{"ANGOLA"s}
			}
		},
		{
			Iso4217Codes::ARS,
			{
				{"ARGENTINA"s}
			}
		},
		{
			Iso4217Codes::AUD,
			{
				{"AUSTRALIA"s, "CHRISTMAS ISLAND"s, "COCOS (KEELING) ISLANDS (THE)"s, "HEARD ISLAND AND McDONALD ISLANDS"s, "KIRIBATI"s, "NAURU"s, "NORFOLK ISLAND"s, "TUVALU"s}
			}
		},
		{
			Iso4217Codes::AWG,
			{
				{"ARUBA"s}
			}
		},
		{
			Iso4217Codes::AZN,
			{
				{"AZERBAIJAN"s}
			}
		},
		{
			Iso4217Codes::BAM,
			{
				{"BOSNIA AND HERZEGOVINA"s}
			}
		},
		{
			Iso4217Codes::BBD,
			{
				{"BARBADOS"s}
			}
		},
		{
			Iso4217Codes::BDT,
			{
				{"BANGLADESH"s}
			}
		},
		{
			Iso4217Codes::BGN,
			{
				{"BULGARIA"s}
			}
		},
		{
			Iso4217Codes::BHD,
			{
				{"BAHRAIN"s}
			}
		},
		{
			Iso4217Codes::BIF,
			{
				{"BURUNDI"s}
			}
		},
		{
			Iso4217Codes::BMD,
			{
				{"BERMUDA"s}
			}
		},
		{
			Iso4217Codes::BND,
			{
				{"BRUNEI DARUSSALAM"s}
			}
		},
		{
			Iso4217Codes::BOB,
			{
				{"BOLIVIA (PLURINATIONAL STATE OF)"s}
			}
		},
		{
			Iso4217Codes::BOV,
			{
				{"BOLIVIA (PLURINATIONAL STATE OF)"s}
			}
		},
		{
			Iso4217Codes::BRL,
			{
				{"BRAZIL"s}
			}
		},
		{
			Iso4217Codes::BSD,
			{
				{"BAHAMAS (THE)"s}
			}
		},
		{
			Iso4217Codes::BTN,
			{
				{"BHUTAN"s}
			}
		},
		{
			Iso4217Codes::BWP,
			{
				{"BOTSWANA"s}
			}
		},
		{
			Iso4217Codes::BYN,
			{
				{"BELARUS"s}
			}
		},
		{
			Iso4217Codes::BZD,
			{
				{"BELIZE"s}
			}
		},
		{
			Iso4217Codes::CAD,
			{
				{"CANADA"s}
			}
		},
		{
			Iso4217Codes::CDF,
			{
				{"CONGO (THE DEMOCRATIC REPUBLIC OF THE)"s}
			}
		},
		{
			Iso4217Codes::CHE,
			{
				{"SWITZERLAND"s}
			}
		},
		{
			Iso4217Codes::CHF,
			{
				{"LIECHTENSTEIN"s, "SWITZERLAND"s}
			}
		},
		{
			Iso4217Codes::CHW,
			{
				{"SWITZERLAND"s}
			}
		},
		{
			Iso4217Codes::CLF,
			{
				{"CHILE"s}
			}
		},
		{
			Iso4217Codes::CLP,
			{
				{"CHILE"s}
			}
		},
		{
			Iso4217Codes::CNY,
			{
				{"CHINA"s}
			}
		},
		{
			Iso4217Codes::COP,
			{
				{"COLOMBIA"s}
			}
		},
		{
			Iso4217Codes::COU,
			{
				{"COLOMBIA"s}
			}
		},
		{
			Iso4217Codes::CRC,
			{
				{"COSTA RICA"s}
			}
		},
		{
			Iso4217Codes::CUC,
			{
				{"CUBA"s}
			}
		},
		{
			Iso4217Codes::CUP,
			{
				{"CUBA"s}
			}
		},
		{
			Iso4217Codes::CVE,
			{
				{"CABO VERDE"s}
			}
		},
		{
			Iso4217Codes::CZK,
			{
				{"CZECHIA"s}
			}
		},
		{
			Iso4217Codes::DJF,
			{
				{"DJIBOUTI"s}
			}
		},
		{
			Iso4217Codes::DKK,
			{
				{"DENMARK"s, "FAROE ISLANDS (THE)"s, "GREENLAND"s}
			}
		},
		{
			Iso4217Codes::DOP,
			{
				{"DOMINICAN REPUBLIC (THE)"s}
			}
		},
		{
			Iso4217Codes::DZD,
			{
				{"ALGERIA"s}
			}
		},
		{
			Iso4217Codes::EGP,
			{
				{"EGYPT"s}
			}
		},
		{
			Iso4217Codes::ERN,
			{
				{"ERITREA"s}
			}
		},
		{
			Iso4217Codes::ETB,
			{
				{"ETHIOPIA"s}
			}
		},
		{
			Iso4217Codes::EUR,
			{
				{"ANDORRA"s, "AUSTRIA"s, "BELGIUM"s, "CROATIA"s, "CYPRUS"s, "ESTONIA"s, "EUROPEAN UNION"s, "FINLAND"s, "FRANCE"s, "FRENCH GUIANA"s, "FRENCH SOUTHERN TERRITORIES (THE)"s, "GERMANY"s, "GREECE"s, "GUADELOUPE"s, "HOLY SEE (THE)"s, "IRELAND"s, "ITALY"s, "LATVIA"s, "LITHUANIA"s, "LUXEMBOURG"s, "MALTA"s, "MARTINIQUE"s, "MAYOTTE"s, "MONACO"s, "MONTENEGRO"s, "NETHERLANDS (THE)"s, "PORTUGAL"s, "RÉUNION"s, "SAINT BARTHÉLEMY"s, "SAINT MARTIN (FRENCH PART)"s, "SAINT PIERRE AND MIQUELON"s, "SAN MARINO"s, "SLOVAKIA"s, "SLOVENIA"s, "SPAIN"s, "ÅLAND ISLANDS"s}
			}
		},
		{
			Iso4217Codes::FJD,
			{
				{"FIJI"s}
			}
		},
		{
			Iso4217Codes::FKP,
			{
				{"FALKLAND ISLANDS (THE) [MALVINAS]"s}
			}
		},
		{
			Iso4217Codes::GBP,
			{
				{"GUERNSEY"s, "ISLE OF MAN"s, "JERSEY"s, "UNITED KINGDOM OF GREAT BRITAIN AND NORTHERN IRELAND (THE)"s}
			}
		},
		{
			Iso4217Codes::GEL,
			{
				{"GEORGIA"s}
			}
		},
		{
			Iso4217Codes::GHS,
			{
				{"GHANA"s}
			}
		},
		{
			Iso4217Codes::GIP,
			{
				{"GIBRALTAR"s}
			}
		},
		{
			Iso4217Codes::GMD,
			{
				{"GAMBIA (THE)"s}
			}
		},
		{
			Iso4217Codes::GNF,
			{
				{"GUINEA"s}
			}
		},
		{
			Iso4217Codes::GTQ,
			{
				{"GUATEMALA"s}
			}
		},
		{
			Iso4217Codes::GYD,
			{
				{"GUYANA"s}
			}
		},
		{
			Iso4217Codes::HKD,
			{
				{"HONG KONG"s}
			}
		},
		{
			Iso4217Codes::HNL,
			{
				{"HONDURAS"s}
			}
		},
		{
			Iso4217Codes::HTG,
			{
				{"HAITI"s}
			}
		},
		{
			Iso4217Codes::HUF,
			{
				{"HUNGARY"s}
			}
		},
		{
			Iso4217Codes::IDR,
			{
				{"INDONESIA"s}
			}
		},
		{
			Iso4217Codes::ILS,
			{
				{"ISRAEL"s}
			}
		},
		{
			Iso4217Codes::INR,
			{
				{"BHUTAN"s, "INDIA"s}
			}
		},
		{
			Iso4217Codes::IQD,
			{
				{"IRAQ"s}
			}
		},
		{
			Iso4217Codes::IRR,
			{
				{"IRAN (ISLAMIC REPUBLIC OF)"s}
			}
		},
		{
			Iso4217Codes::ISK,
			{
				{"ICELAND"s}
			}
		},
		{
			Iso4217Codes::JMD,
			{
				{"JAMAICA"s}
			}
		},
		{
			Iso4217Codes::JOD,
			{
				{"JORDAN"s}
			}
		},
		{
			Iso4217Codes::JPY,
			{
				{"JAPAN"s}
			}
		},
		{
			Iso4217Codes::KES,
			{
				{"KENYA"s}
			}
		},
		{
			Iso4217Codes::KGS,
			{
				{"KYRGYZSTAN"s}
			}
		},
		{
			Iso4217Codes::KHR,
			{
				{"CAMBODIA"s}
			}
		},
		{
			Iso4217Codes::KMF,
			{
				{"COMOROS (THE)"s}
			}
		},
		{
			Iso4217Codes::KPW,
			{
				{"KOREA (THE DEMOCRATIC PEOPLE’S REPUBLIC OF)"s}
			}
		},
		{
			Iso4217Codes::KRW,
			{
				{"KOREA (THE REPUBLIC OF)"s}
			}
		},
		{
			Iso4217Codes::KWD,
			{
				{"KUWAIT"s}
			}
		},
		{
			Iso4217Codes::KYD,
			{
				{"CAYMAN ISLANDS (THE)"s}
			}
		},
		{
			Iso4217Codes::KZT,
			{
				{"KAZAKHSTAN"s}
			}
		},
		{
			Iso4217Codes::LAK,
			{
				{"LAO PEOPLE’S DEMOCRATIC REPUBLIC (THE)"s}
			}
		},
		{
			Iso4217Codes::LBP,
			{
				{"LEBANON"s}
			}
		},
		{
			Iso4217Codes::LKR,
			{
				{"SRI LANKA"s}
			}
		},
		{
			Iso4217Codes::LRD,
			{
				{"LIBERIA"s}
			}
		},
		{
			Iso4217Codes::LSL,
			{
				{"LESOTHO"s}
			}
		},
		{
			Iso4217Codes::LYD,
			{
				{"LIBYA"s}
			}
		},
		{
			Iso4217Codes::MAD,
			{
				{"MOROCCO"s, "WESTERN SAHARA"s}
			}
		},
		{
			Iso4217Codes::MDL,
			{
				{"MOLDOVA (THE REPUBLIC OF)"s}
			}
		},
		{
			Iso4217Codes::MGA,
			{
				{"MADAGASCAR"s}
			}
		},
		{
			Iso4217Codes::MKD,
			{
				{"NORTH MACEDONIA"s}
			}
		},
		{
			Iso4217Codes::MMK,
			{
				{"MYANMAR"s}
			}
		},
		{
			Iso4217Codes::MNT,
			{
				{"MONGOLIA"s}
			}
		},
		{
			Iso4217Codes::MOP,
			{
				{"MACAO"s}
			}
		},
		{
			Iso4217Codes::MRU,
			{
				{"MAURITANIA"s}
			}
		},
		{
			Iso4217Codes::MUR,
			{
				{"MAURITIUS"s}
			}
		},
		{
			Iso4217Codes::MVR,
			{
				{"MALDIVES"s}
			}
		},
		{
			Iso4217Codes::MWK,
			{
				{"MALAWI"s}
			}
		},
		{
			Iso4217Codes::MXN,
			{
				{"MEXICO"s}
			}
		},
		{
			Iso4217Codes::MXV,
			{
				{"MEXICO"s}
			}
		},
		{
			Iso4217Codes::MYR,
			{
				{"MALAYSIA"s}
			}
		},
		{
			Iso4217Codes::MZN,
			{
				{"MOZAMBIQUE"s}
			}
		},
		{
			Iso4217Codes::NAD,
			{
				{"NAMIBIA"s}
			}
		},
		{
			Iso4217Codes::NGN,
			{
				{"NIGERIA"s}
			}
		},
		{
			Iso4217Codes::NIO,
			{
				{"NICARAGUA"s}
			}
		},
		{
			Iso4217Codes::NOK,
			{
				{"BOUVET ISLAND"s, "NORWAY"s, "SVALBARD AND JAN MAYEN"s}
			}
		},
		{
			Iso4217Codes::NPR,
			{
				{"NEPAL"s}
			}
		},
		{
			Iso4217Codes::NZD,
			{
				{"COOK ISLANDS (THE)"s, "NEW ZEALAND"s, "NIUE"s, "PITCAIRN"s, "TOKELAU"s}
			}
		},
		{
			Iso4217Codes::OMR,
			{
				{"OMAN"s}
			}
		},
		{
			Iso4217Codes::PAB,
			{
				{"PANAMA"s}
			}
		},
		{
			Iso4217Codes::PEN,
			{
				{"PERU"s}
			}
		},
		{
			Iso4217Codes::PGK,
			{
				{"PAPUA NEW GUINEA"s}
			}
		},
		{
			Iso4217Codes::PHP,
			{
				{"PHILIPPINES (THE)"s}
			}
		},
		{
			Iso4217Codes::PKR,
			{
				{"PAKISTAN"s}
			}
		},
		{
			Iso4217Codes::PLN,
			{
				{"POLAND"s}
			}
		},
		{
			Iso4217Codes::PYG,
			{
				{"PARAGUAY"s}
			}
		},
		{
			Iso4217Codes::QAR,
			{
				{"QATAR"s}
			}
		},
		{
			Iso4217Codes::RON,
			{
				{"ROMANIA"s}
			}
		},
		{
			Iso4217Codes::RSD,
			{
				{"SERBIA"s}
			}
		},
		{
			Iso4217Codes::RUB,
			{
				{"RUSSIAN FEDERATION (THE)"s}
			}
		},
		{
			Iso4217Codes::RWF,
			{
				{"RWANDA"s}
			}
		},
		{
			Iso4217Codes::SAR,
			{
				{"SAUDI ARABIA"s}
			}
		},
		{
			Iso4217Codes::SBD,
			{
				{"SOLOMON ISLANDS"s}
			}
		},
		{
			Iso4217Codes::SCR,
			{
				{"SEYCHELLES"s}
			}
		},
		{
			Iso4217Codes::SDG,
			{
				{"SUDAN (THE)"s}
			}
		},
		{
			Iso4217Codes::SEK,
			{
				{"SWEDEN"s}
			}
		},
		{
			Iso4217Codes::SGD,
			{
				{"SINGAPORE"s}
			}
		},
		{
			Iso4217Codes::SHP,
			{
				{"SAINT HELENA, ASCENSION AND TRISTAN DA CUNHA"s}
			}
		},
		{
			Iso4217Codes::SLE,
			{
				{"SIERRA LEONE"s}
			}
		},
		{
			Iso4217Codes::SLL,
			{
				{"SIERRA LEONE"s}
			}
		},
		{
			Iso4217Codes::SOS,
			{
				{"SOMALIA"s}
			}
		},
		{
			Iso4217Codes::SRD,
			{
				{"SURINAME"s}
			}
		},
		{
			Iso4217Codes::SSP,
			{
				{"SOUTH SUDAN"s}
			}
		},
		{
			Iso4217Codes::STN,
			{
				{"SAO TOME AND PRINCIPE"s}
			}
		},
		{
			Iso4217Codes::SVC,
			{
				{"EL SALVADOR"s}
			}
		},
		{
			Iso4217Codes::SYP,
			{
				{"SYRIAN ARAB REPUBLIC"s}
			}
		},
		{
			Iso4217Codes::SZL,
			{
				{"ESWATINI"s}
			}
		},
		{
			Iso4217Codes::THB,
			{
				{"THAILAND"s}
			}
		},
		{
			Iso4217Codes::TJS,
			{
				{"TAJIKISTAN"s}
			}
		},
		{
			Iso4217Codes::TMT,
			{
				{"TURKMENISTAN"s}
			}
		},
		{
			Iso4217Codes::TND,
			{
				{"TUNISIA"s}
			}
		},
		{
			Iso4217Codes::TOP,
			{
				{"TONGA"s}
			}
		},
		{
			Iso4217Codes::TRY,
			{
				{"TÜRKİYE"s}
			}
		},
		{
			Iso4217Codes::TTD,
			{
				{"TRINIDAD AND TOBAGO"s}
			}
		},
		{
			Iso4217Codes::TWD,
			{
				{"TAIWAN (PROVINCE OF CHINA)"s}
			}
		},
		{
			Iso4217Codes::TZS,
			{
				{"TANZANIA, UNITED REPUBLIC OF"s}
			}
		},
		{
			Iso4217Codes::UAH,
			{
				{"UKRAINE"s}
			}
		},
		{
			Iso4217Codes::UGX,
			{
				{"UGANDA"s}
			}
		},
		{
			Iso4217Codes::USD,
			{
				{"AMERICAN SAMOA"s, "BONAIRE, SINT EUSTATIUS AND SABA"s, "BRITISH INDIAN OCEAN TERRITORY (THE)"s, "ECUADOR"s, "EL SALVADOR"s, "GUAM"s, "HAITI"s, "MARSHALL ISLANDS (THE)"s, "MICRONESIA (FEDERATED STATES OF)"s, "NORTHERN MARIANA ISLANDS (THE)"s, "PALAU"s, "PANAMA"s, "PUERTO RICO"s, "TIMOR-LESTE"s, "TURKS AND CAICOS ISLANDS (THE)"s, "UNITED STATES MINOR OUTLYING ISLANDS (THE)"s, "UNITED STATES OF AMERICA (THE)"s, "VIRGIN ISLANDS (BRITISH)"s, "VIRGIN ISLANDS (U.S.)"s}
			}
		},
		{
			Iso4217Codes::USN,
			{
				{"UNITED STATES OF AMERICA (THE)"s}
			}
		},
		{
			Iso4217Codes::UYI,
			{
				{"URUGUAY"s}
			}
		},
		{
			Iso4217Codes::UYU,
			{
				{"URUGUAY"s}
			}
		},
		{
			Iso4217Codes::UYW,
			{
				{"URUGUAY"s}
			}
		},
		{
			Iso4217Codes::UZS,
			{
				{"UZBEKISTAN"s}
			}
		},
		{
			Iso4217Codes::VED,
			{
				{"VENEZUELA (BOLIVARIAN REPUBLIC OF)"s}
			}
		},
		{
			Iso4217Codes::VES,
			{
				{"VENEZUELA (BOLIVARIAN REPUBLIC OF)"s}
			}
		},
		{
			Iso4217Codes::VND,
			{
				{"VIET NAM"s}
			}
		},
		{
			Iso4217Codes::VUV,
			{
				{"VANUATU"s}
			}
		},
		{
			Iso4217Codes::WST,
			{
				{"SAMOA"s}
			}
		},
		{
			Iso4217Codes::XAF,
			{
				{"CAMEROON"s, "CENTRAL AFRICAN REPUBLIC (THE)"s, "CHAD"s, "CONGO (THE)"s, "EQUATORIAL GUINEA"s, "GABON"s}
			}
		},
		{
			Iso4217Codes::XAG,
			{
				{"ZZ11_Silver"s}
			}
		},
		{
			Iso4217Codes::XAU,
			{
				{"ZZ08_Gold"s}
			}
		},
		{
			Iso4217Codes::XBA,
			{
				{"ZZ01_Bond Markets Unit European_EURCO"s}
			}
		},
		{
			Iso4217Codes::XBB,
			{
				{"ZZ02_Bond Markets Unit European_EMU-6"s}
			}
		},
		{
			Iso4217Codes::XBC,
			{
				{"ZZ03_Bond Markets Unit European_EUA-9"s}
			}
		},
		{
			Iso4217Codes::XBD,
			{
				{"ZZ04_Bond Markets Unit European_EUA-17"s}
			}
		},
		{
			Iso4217Codes::XCD,
			{
				{"ANGUILLA"s, "ANTIGUA AND BARBUDA"s, "DOMINICA"s, "GRENADA"s, "MONTSERRAT"s, "SAINT KITTS AND NEVIS"s, "SAINT LUCIA"s, "SAINT VINCENT AND THE GRENADINES"s}
			}
		},
		{
			Iso4217Codes::XDR,
			{
				{"INTERNATIONAL MONETARY FUND (IMF) "s}
			}
		},
		{
			Iso4217Codes::XOF,
			{
				{"BENIN"s, "BURKINA FASO"s, "CÔTE D'IVOIRE"s, "GUINEA-BISSAU"s, "MALI"s, "NIGER (THE)"s, "SENEGAL"s, "TOGO"s}
			}
		},
		{
			Iso4217Codes::XPD,
			{
				{"ZZ09_Palladium"s}
			}
		},
		{
			Iso4217Codes::XPF,
			{
				{"FRENCH POLYNESIA"s, "NEW CALEDONIA"s, "WALLIS AND FUTUNA"s}
			}
		},
		{
			Iso4217Codes::XPT,
			{
				{"ZZ10_Platinum"s}
			}
		},
		{
			Iso4217Codes::XSU,
			{
				{"SISTEMA UNITARIO DE COMPENSACION REGIONAL DE PAGOS \"SUCRE\""s}
			}
		},
		{
			Iso4217Codes::XTS,
			{
				{"ZZ06_Testing_Code"s}
			}
		},
		{
			Iso4217Codes::XUA,
			{
				{"MEMBER COUNTRIES OF THE AFRICAN DEVELOPMENT BANK GROUP"s}
			}
		},
		{
			Iso4217Codes::XXX,
			{
				{"ZZ07_No_Currency"s}
			}
		},
		{
			Iso4217Codes::YER,
			{
				{"YEMEN"s}
			}
		},
		{
			Iso4217Codes::ZAR,
			{
				{"LESOTHO"s, "NAMIBIA"s, "SOUTH AFRICA"s}
			}
		},
		{
			Iso4217Codes::ZMW,
			{
				{"ZAMBIA"s}
			}
		},
		{
			Iso4217Codes::ZWL,
			{
				{"ZIMBABWE"s}
			}
		}
	};
	return codeCountries.at(code);
}

// cppcheck-suppress unusedFunction
string pecunia::currency::currencyName(const Iso4217Codes& code)
{
	static const map<Iso4217Codes, string> codeNames{
		{
			Iso4217Codes::AED,
			"UAE Dirham"s
		},
		{
			Iso4217Codes::AFN,
			"Afghani"s
		},
		{
			Iso4217Codes::ALL,
			"Lek"s
		},
		{
			Iso4217Codes::AMD,
			"Armenian Dram"s
		},
		{
			Iso4217Codes::ANG,
			"Netherlands Antillean Guilder"s
		},
		{
			Iso4217Codes::AOA,
			"Kwanza"s
		},
		{
			Iso4217Codes::ARS,
			"Argentine Peso"s
		},
		{
			Iso4217Codes::AUD,
			"Australian Dollar"s
		},
		{
			Iso4217Codes::AWG,
			"Aruban Florin"s
		},
		{
			Iso4217Codes::AZN,
			"Azerbaijan Manat"s
		},
		{
			Iso4217Codes::BAM,
			"Convertible Mark"s
		},
		{
			Iso4217Codes::BBD,
			"Barbados Dollar"s
		},
		{
			Iso4217Codes::BDT,
			"Taka"s
		},
		{
			Iso4217Codes::BGN,
			"Bulgarian Lev"s
		},
		{
			Iso4217Codes::BHD,
			"Bahraini Dinar"s
		},
		{
			Iso4217Codes::BIF,
			"Burundi Franc"s
		},
		{
			Iso4217Codes::BMD,
			"Bermudian Dollar"s
		},
		{
			Iso4217Codes::BND,
			"Brunei Dollar"s
		},
		{
			Iso4217Codes::BOB,
			"Boliviano"s
		},
		{
			Iso4217Codes::BOV,
			"Mvdol"s
		},
		{
			Iso4217Codes::BRL,
			"Brazilian Real"s
		},
		{
			Iso4217Codes::BSD,
			"Bahamian Dollar"s
		},
		{
			Iso4217Codes::BTN,
			"Ngultrum"s
		},
		{
			Iso4217Codes::BWP,
			"Pula"s
		},
		{
			Iso4217Codes::BYN,
			"Belarusian Ruble"s
		},
		{
			Iso4217Codes::BZD,
			"Belize Dollar"s
		},
		{
			Iso4217Codes::CAD,
			"Canadian Dollar"s
		},
		{
			Iso4217Codes::CDF,
			"Congolese Franc"s
		},
		{
			Iso4217Codes::CHE,
			"WIR Euro"s
		},
		{
			Iso4217Codes::CHF,
			"Swiss Franc"s
		},
		{
			Iso4217Codes::CHW,
			"WIR Franc"s
		},
		{
			Iso4217Codes::CLF,
			"Unidad de Fomento"s
		},
		{
			Iso4217Codes::CLP,
			"Chilean Peso"s
		},
		{
			Iso4217Codes::CNY,
			"Yuan Renminbi"s
		},
		{
			Iso4217Codes::COP,
			"Colombian Peso"s
		},
		{
			Iso4217Codes::COU,
			"Unidad de Valor Real"s
		},
		{
			Iso4217Codes::CRC,
			"Costa Rican Colon"s
		},
		{
			Iso4217Codes::CUC,
			"Peso Convertible"s
		},
		{
			Iso4217Codes::CUP,
			"Cuban Peso"s
		},
		{
			Iso4217Codes::CVE,
			"Cabo Verde Escudo"s
		},
		{
			Iso4217Codes::CZK,
			"Czech Koruna"s
		},
		{
			Iso4217Codes::DJF,
			"Djibouti Franc"s
		},
		{
			Iso4217Codes::DKK,
			"Danish Krone"s
		},
		{
			Iso4217Codes::DOP,
			"Dominican Peso"s
		},
		{
			Iso4217Codes::DZD,
			"Algerian Dinar"s
		},
		{
			Iso4217Codes::EGP,
			"Egyptian Pound"s
		},
		{
			Iso4217Codes::ERN,
			"Nakfa"s
		},
		{
			Iso4217Codes::ETB,
			"Ethiopian Birr"s
		},
		{
			Iso4217Codes::EUR,
			"Euro"s
		},
		{
			Iso4217Codes::FJD,
			"Fiji Dollar"s
		},
		{
			Iso4217Codes::FKP,
			"Falkland Islands Pound"s
		},
		{
			Iso4217Codes::GBP,
			"Pound Sterling"s
		},
		{
			Iso4217Codes::GEL,
			"Lari"s
		},
		{
			Iso4217Codes::GHS,
			"Ghana Cedi"s
		},
		{
			Iso4217Codes::GIP,
			"Gibraltar Pound"s
		},
		{
			Iso4217Codes::GMD,
			"Dalasi"s
		},
		{
			Iso4217Codes::GNF,
			"Guinean Franc"s
		},
		{
			Iso4217Codes::GTQ,
			"Quetzal"s
		},
		{
			Iso4217Codes::GYD,
			"Guyana Dollar"s
		},
		{
			Iso4217Codes::HKD,
			"Hong Kong Dollar"s
		},
		{
			Iso4217Codes::HNL,
			"Lempira"s
		},
		{
			Iso4217Codes::HTG,
			"Gourde"s
		},
		{
			Iso4217Codes::HUF,
			"Forint"s
		},
		{
			Iso4217Codes::IDR,
			"Rupiah"s
		},
		{
			Iso4217Codes::ILS,
			"New Israeli Sheqel"s
		},
		{
			Iso4217Codes::INR,
			"Indian Rupee"s
		},
		{
			Iso4217Codes::IQD,
			"Iraqi Dinar"s
		},
		{
			Iso4217Codes::IRR,
			"Iranian Rial"s
		},
		{
			Iso4217Codes::ISK,
			"Iceland Krona"s
		},
		{
			Iso4217Codes::JMD,
			"Jamaican Dollar"s
		},
		{
			Iso4217Codes::JOD,
			"Jordanian Dinar"s
		},
		{
			Iso4217Codes::JPY,
			"Yen"s
		},
		{
			Iso4217Codes::KES,
			"Kenyan Shilling"s
		},
		{
			Iso4217Codes::KGS,
			"Som"s
		},
		{
			Iso4217Codes::KHR,
			"Riel"s
		},
		{
			Iso4217Codes::KMF,
			"Comorian Franc "s
		},
		{
			Iso4217Codes::KPW,
			"North Korean Won"s
		},
		{
			Iso4217Codes::KRW,
			"Won"s
		},
		{
			Iso4217Codes::KWD,
			"Kuwaiti Dinar"s
		},
		{
			Iso4217Codes::KYD,
			"Cayman Islands Dollar"s
		},
		{
			Iso4217Codes::KZT,
			"Tenge"s
		},
		{
			Iso4217Codes::LAK,
			"Lao Kip"s
		},
		{
			Iso4217Codes::LBP,
			"Lebanese Pound"s
		},
		{
			Iso4217Codes::LKR,
			"Sri Lanka Rupee"s
		},
		{
			Iso4217Codes::LRD,
			"Liberian Dollar"s
		},
		{
			Iso4217Codes::LSL,
			"Loti"s
		},
		{
			Iso4217Codes::LYD,
			"Libyan Dinar"s
		},
		{
			Iso4217Codes::MAD,
			"Moroccan Dirham"s
		},
		{
			Iso4217Codes::MDL,
			"Moldovan Leu"s
		},
		{
			Iso4217Codes::MGA,
			"Malagasy Ariary"s
		},
		{
			Iso4217Codes::MKD,
			"Denar"s
		},
		{
			Iso4217Codes::MMK,
			"Kyat"s
		},
		{
			Iso4217Codes::MNT,
			"Tugrik"s
		},
		{
			Iso4217Codes::MOP,
			"Pataca"s
		},
		{
			Iso4217Codes::MRU,
			"Ouguiya"s
		},
		{
			Iso4217Codes::MUR,
			"Mauritius Rupee"s
		},
		{
			Iso4217Codes::MVR,
			"Rufiyaa"s
		},
		{
			Iso4217Codes::MWK,
			"Malawi Kwacha"s
		},
		{
			Iso4217Codes::MXN,
			"Mexican Peso"s
		},
		{
			Iso4217Codes::MXV,
			"Mexican Unidad de Inversion (UDI)"s
		},
		{
			Iso4217Codes::MYR,
			"Malaysian Ringgit"s
		},
		{
			Iso4217Codes::MZN,
			"Mozambique Metical"s
		},
		{
			Iso4217Codes::NAD,
			"Namibia Dollar"s
		},
		{
			Iso4217Codes::NGN,
			"Naira"s
		},
		{
			Iso4217Codes::NIO,
			"Cordoba Oro"s
		},
		{
			Iso4217Codes::NOK,
			"Norwegian Krone"s
		},
		{
			Iso4217Codes::NPR,
			"Nepalese Rupee"s
		},
		{
			Iso4217Codes::NZD,
			"New Zealand Dollar"s
		},
		{
			Iso4217Codes::OMR,
			"Rial Omani"s
		},
		{
			Iso4217Codes::PAB,
			"Balboa"s
		},
		{
			Iso4217Codes::PEN,
			"Sol"s
		},
		{
			Iso4217Codes::PGK,
			"Kina"s
		},
		{
			Iso4217Codes::PHP,
			"Philippine Peso"s
		},
		{
			Iso4217Codes::PKR,
			"Pakistan Rupee"s
		},
		{
			Iso4217Codes::PLN,
			"Zloty"s
		},
		{
			Iso4217Codes::PYG,
			"Guarani"s
		},
		{
			Iso4217Codes::QAR,
			"Qatari Rial"s
		},
		{
			Iso4217Codes::RON,
			"Romanian Leu"s
		},
		{
			Iso4217Codes::RSD,
			"Serbian Dinar"s
		},
		{
			Iso4217Codes::RUB,
			"Russian Ruble"s
		},
		{
			Iso4217Codes::RWF,
			"Rwanda Franc"s
		},
		{
			Iso4217Codes::SAR,
			"Saudi Riyal"s
		},
		{
			Iso4217Codes::SBD,
			"Solomon Islands Dollar"s
		},
		{
			Iso4217Codes::SCR,
			"Seychelles Rupee"s
		},
		{
			Iso4217Codes::SDG,
			"Sudanese Pound"s
		},
		{
			Iso4217Codes::SEK,
			"Swedish Krona"s
		},
		{
			Iso4217Codes::SGD,
			"Singapore Dollar"s
		},
		{
			Iso4217Codes::SHP,
			"Saint Helena Pound"s
		},
		{
			Iso4217Codes::SLE,
			"Leone"s
		},
		{
			Iso4217Codes::SLL,
			"Leone"s
		},
		{
			Iso4217Codes::SOS,
			"Somali Shilling"s
		},
		{
			Iso4217Codes::SRD,
			"Surinam Dollar"s
		},
		{
			Iso4217Codes::SSP,
			"South Sudanese Pound"s
		},
		{
			Iso4217Codes::STN,
			"Dobra"s
		},
		{
			Iso4217Codes::SVC,
			"El Salvador Colon"s
		},
		{
			Iso4217Codes::SYP,
			"Syrian Pound"s
		},
		{
			Iso4217Codes::SZL,
			"Lilangeni"s
		},
		{
			Iso4217Codes::THB,
			"Baht"s
		},
		{
			Iso4217Codes::TJS,
			"Somoni"s
		},
		{
			Iso4217Codes::TMT,
			"Turkmenistan New Manat"s
		},
		{
			Iso4217Codes::TND,
			"Tunisian Dinar"s
		},
		{
			Iso4217Codes::TOP,
			"Pa’anga"s
		},
		{
			Iso4217Codes::TRY,
			"Turkish Lira"s
		},
		{
			Iso4217Codes::TTD,
			"Trinidad and Tobago Dollar"s
		},
		{
			Iso4217Codes::TWD,
			"New Taiwan Dollar"s
		},
		{
			Iso4217Codes::TZS,
			"Tanzanian Shilling"s
		},
		{
			Iso4217Codes::UAH,
			"Hryvnia"s
		},
		{
			Iso4217Codes::UGX,
			"Uganda Shilling"s
		},
		{
			Iso4217Codes::USD,
			"US Dollar"s
		},
		{
			Iso4217Codes::USN,
			"US Dollar (Next day)"s
		},
		{
			Iso4217Codes::UYI,
			"Uruguay Peso en Unidades Indexadas (UI)"s
		},
		{
			Iso4217Codes::UYU,
			"Peso Uruguayo"s
		},
		{
			Iso4217Codes::UYW,
			"Unidad Previsional"s
		},
		{
			Iso4217Codes::UZS,
			"Uzbekistan Sum"s
		},
		{
			Iso4217Codes::VED,
			"Bolívar Soberano"s
		},
		{
			Iso4217Codes::VES,
			"Bolívar Soberano"s
		},
		{
			Iso4217Codes::VND,
			"Dong"s
		},
		{
			Iso4217Codes::VUV,
			"Vatu"s
		},
		{
			Iso4217Codes::WST,
			"Tala"s
		},
		{
			Iso4217Codes::XAF,
			"CFA Franc BEAC"s
		},
		{
			Iso4217Codes::XAG,
			"Silver"s
		},
		{
			Iso4217Codes::XAU,
			"Gold"s
		},
		{
			Iso4217Codes::XBA,
			"Bond Markets Unit European Composite Unit (EURCO)"s
		},
		{
			Iso4217Codes::XBB,
			"Bond Markets Unit European Monetary Unit (E.M.U.-6)"s
		},
		{
			Iso4217Codes::XBC,
			"Bond Markets Unit European Unit of Account 9 (E.U.A.-9)"s
		},
		{
			Iso4217Codes::XBD,
			"Bond Markets Unit European Unit of Account 17 (E.U.A.-17)"s
		},
		{
			Iso4217Codes::XCD,
			"East Caribbean Dollar"s
		},
		{
			Iso4217Codes::XDR,
			"SDR (Special Drawing Right)"s
		},
		{
			Iso4217Codes::XOF,
			"CFA Franc BCEAO"s
		},
		{
			Iso4217Codes::XPD,
			"Palladium"s
		},
		{
			Iso4217Codes::XPF,
			"CFP Franc"s
		},
		{
			Iso4217Codes::XPT,
			"Platinum"s
		},
		{
			Iso4217Codes::XSU,
			"Sucre"s
		},
		{
			Iso4217Codes::XTS,
			"Codes specifically reserved for testing purposes"s
		},
		{
			Iso4217Codes::XUA,
			"ADB Unit of Account"s
		},
		{
			Iso4217Codes::XXX,
			"The codes assigned for transactions where no currency is involved"s
		},
		{
			Iso4217Codes::YER,
			"Yemeni Rial"s
		},
		{
			Iso4217Codes::ZAR,
			"Rand"s
		},
		{
			Iso4217Codes::ZMW,
			"Zambian Kwacha"s
		},
		{
			Iso4217Codes::ZWL,
			"Zimbabwe Dollar"s
		}
	};
	return codeNames.at(code);
}

const array<Iso4217Codes, numberOfIso4217Codes> pecunia::currency::allIso4217Codes
{
	{
		Iso4217Codes::AED,
		Iso4217Codes::AFN,
		Iso4217Codes::ALL,
		Iso4217Codes::AMD,
		Iso4217Codes::ANG,
		Iso4217Codes::AOA,
		Iso4217Codes::ARS,
		Iso4217Codes::AUD,
		Iso4217Codes::AWG,
		Iso4217Codes::AZN,
		Iso4217Codes::BAM,
		Iso4217Codes::BBD,
		Iso4217Codes::BDT,
		Iso4217Codes::BGN,
		Iso4217Codes::BHD,
		Iso4217Codes::BIF,
		Iso4217Codes::BMD,
		Iso4217Codes::BND,
		Iso4217Codes::BOB,
		Iso4217Codes::BOV,
		Iso4217Codes::BRL,
		Iso4217Codes::BSD,
		Iso4217Codes::BTN,
		Iso4217Codes::BWP,
		Iso4217Codes::BYN,
		Iso4217Codes::BZD,
		Iso4217Codes::CAD,
		Iso4217Codes::CDF,
		Iso4217Codes::CHE,
		Iso4217Codes::CHF,
		Iso4217Codes::CHW,
		Iso4217Codes::CLF,
		Iso4217Codes::CLP,
		Iso4217Codes::CNY,
		Iso4217Codes::COP,
		Iso4217Codes::COU,
		Iso4217Codes::CRC,
		Iso4217Codes::CUC,
		Iso4217Codes::CUP,
		Iso4217Codes::CVE,
		Iso4217Codes::CZK,
		Iso4217Codes::DJF,
		Iso4217Codes::DKK,
		Iso4217Codes::DOP,
		Iso4217Codes::DZD,
		Iso4217Codes::EGP,
		Iso4217Codes::ERN,
		Iso4217Codes::ETB,
		Iso4217Codes::EUR,
		Iso4217Codes::FJD,
		Iso4217Codes::FKP,
		Iso4217Codes::GBP,
		Iso4217Codes::GEL,
		Iso4217Codes::GHS,
		Iso4217Codes::GIP,
		Iso4217Codes::GMD,
		Iso4217Codes::GNF,
		Iso4217Codes::GTQ,
		Iso4217Codes::GYD,
		Iso4217Codes::HKD,
		Iso4217Codes::HNL,
		Iso4217Codes::HTG,
		Iso4217Codes::HUF,
		Iso4217Codes::IDR,
		Iso4217Codes::ILS,
		Iso4217Codes::INR,
		Iso4217Codes::IQD,
		Iso4217Codes::IRR,
		Iso4217Codes::ISK,
		Iso4217Codes::JMD,
		Iso4217Codes::JOD,
		Iso4217Codes::JPY,
		Iso4217Codes::KES,
		Iso4217Codes::KGS,
		Iso4217Codes::KHR,
		Iso4217Codes::KMF,
		Iso4217Codes::KPW,
		Iso4217Codes::KRW,
		Iso4217Codes::KWD,
		Iso4217Codes::KYD,
		Iso4217Codes::KZT,
		Iso4217Codes::LAK,
		Iso4217Codes::LBP,
		Iso4217Codes::LKR,
		Iso4217Codes::LRD,
		Iso4217Codes::LSL,
		Iso4217Codes::LYD,
		Iso4217Codes::MAD,
		Iso4217Codes::MDL,
		Iso4217Codes::MGA,
		Iso4217Codes::MKD,
		Iso4217Codes::MMK,
		Iso4217Codes::MNT,
		Iso4217Codes::MOP,
		Iso4217Codes::MRU,
		Iso4217Codes::MUR,
		Iso4217Codes::MVR,
		Iso4217Codes::MWK,
		Iso4217Codes::MXN,
		Iso4217Codes::MXV,
		Iso4217Codes::MYR,
		Iso4217Codes::MZN,
		Iso4217Codes::NAD,
		Iso4217Codes::NGN,
		Iso4217Codes::NIO,
		Iso4217Codes::NOK,
		Iso4217Codes::NPR,
		Iso4217Codes::NZD,
		Iso4217Codes::OMR,
		Iso4217Codes::PAB,
		Iso4217Codes::PEN,
		Iso4217Codes::PGK,
		Iso4217Codes::PHP,
		Iso4217Codes::PKR,
		Iso4217Codes::PLN,
		Iso4217Codes::PYG,
		Iso4217Codes::QAR,
		Iso4217Codes::RON,
		Iso4217Codes::RSD,
		Iso4217Codes::RUB,
		Iso4217Codes::RWF,
		Iso4217Codes::SAR,
		Iso4217Codes::SBD,
		Iso4217Codes::SCR,
		Iso4217Codes::SDG,
		Iso4217Codes::SEK,
		Iso4217Codes::SGD,
		Iso4217Codes::SHP,
		Iso4217Codes::SLE,
		Iso4217Codes::SLL,
		Iso4217Codes::SOS,
		Iso4217Codes::SRD,
		Iso4217Codes::SSP,
		Iso4217Codes::STN,
		Iso4217Codes::SVC,
		Iso4217Codes::SYP,
		Iso4217Codes::SZL,
		Iso4217Codes::THB,
		Iso4217Codes::TJS,
		Iso4217Codes::TMT,
		Iso4217Codes::TND,
		Iso4217Codes::TOP,
		Iso4217Codes::TRY,
		Iso4217Codes::TTD,
		Iso4217Codes::TWD,
		Iso4217Codes::TZS,
		Iso4217Codes::UAH,
		Iso4217Codes::UGX,
		Iso4217Codes::USD,
		Iso4217Codes::USN,
		Iso4217Codes::UYI,
		Iso4217Codes::UYU,
		Iso4217Codes::UYW,
		Iso4217Codes::UZS,
		Iso4217Codes::VED,
		Iso4217Codes::VES,
		Iso4217Codes::VND,
		Iso4217Codes::VUV,
		Iso4217Codes::WST,
		Iso4217Codes::XAF,
		Iso4217Codes::XAG,
		Iso4217Codes::XAU,
		Iso4217Codes::XBA,
		Iso4217Codes::XBB,
		Iso4217Codes::XBC,
		Iso4217Codes::XBD,
		Iso4217Codes::XCD,
		Iso4217Codes::XDR,
		Iso4217Codes::XOF,
		Iso4217Codes::XPD,
		Iso4217Codes::XPF,
		Iso4217Codes::XPT,
		Iso4217Codes::XSU,
		Iso4217Codes::XTS,
		Iso4217Codes::XUA,
		Iso4217Codes::XXX,
		Iso4217Codes::YER,
		Iso4217Codes::ZAR,
		Iso4217Codes::ZMW,
		Iso4217Codes::ZWL
	}
};
