# *   Copyright (C) 1998-2013, International Business Machines
# *   Corporation and others.  All Rights Reserved.
CURR_CLDR_VERSION = 24
# A list of txt's to build
# Note:
#
#   If you are thinking of modifying this file, READ THIS.
#
# Instead of changing this file [unless you want to check it back in],
# you should consider creating a 'reslocal.mk' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example 'reslocal.mk' files:
#
#  * To add an additional locale to the list:
#    _____________________________________________________
#    |  CURR_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  CURR_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt
#
#
# Generated by LDML2ICUConverter, from LDML source files.

# Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml)
CURR_SYNTHETIC_ALIAS = az_AZ.txt az_Latn_AZ.txt bs_BA.txt bs_Latn_BA.txt\
 en_NH.txt en_RH.txt fil_PH.txt ha_GH.txt ha_Latn_NE.txt\
 ha_Latn_NG.txt ha_NE.txt ha_NG.txt he_IL.txt id_ID.txt\
 in.txt in_ID.txt iw.txt iw_IL.txt ja_JP.txt\
 ja_JP_TRADITIONAL.txt kk_Cyrl_KZ.txt kk_KZ.txt ks_Arab_IN.txt ks_IN.txt\
 ky_Cyrl_KG.txt ky_KG.txt mn_Cyrl_MN.txt mn_MN.txt mo.txt\
 ms_BN.txt ms_Latn_MY.txt ms_MY.txt ms_SG.txt nb_NO.txt\
 nn_NO.txt no.txt no_NO.txt no_NO_NY.txt pa_Arab_PK.txt\
 pa_Guru_IN.txt pa_IN.txt pa_PK.txt sh.txt sh_BA.txt\
 sh_CS.txt sh_YU.txt shi_MA.txt shi_Tfng_MA.txt sr_BA.txt\
 sr_CS.txt sr_Cyrl_CS.txt sr_Cyrl_RS.txt sr_Cyrl_XK.txt sr_Cyrl_YU.txt\
 sr_Latn_BA.txt sr_Latn_CS.txt sr_Latn_ME.txt sr_Latn_RS.txt sr_Latn_YU.txt\
 sr_ME.txt sr_RS.txt sr_XK.txt sr_YU.txt th_TH.txt\
 th_TH_TRADITIONAL.txt tl.txt tl_PH.txt tzm_Latn_MA.txt tzm_MA.txt\
 uz_AF.txt uz_Arab_AF.txt uz_Latn_UZ.txt uz_UZ.txt vai_LR.txt\
 vai_Vaii_LR.txt zh_CN.txt zh_HK.txt zh_Hans_CN.txt zh_Hant_TW.txt\
 zh_MO.txt zh_SG.txt zh_TW.txt


# All aliases (to not be included under 'installed'), but not including root.
CURR_ALIAS_SOURCE = $(CURR_SYNTHETIC_ALIAS)


# Ordinary resources
CURR_SOURCE = af.txt af_NA.txt agq.txt ak.txt\
 am.txt ar.txt ar_DJ.txt ar_ER.txt ar_LB.txt\
 ar_SO.txt ar_SS.txt as.txt asa.txt az.txt\
 az_Cyrl.txt az_Latn.txt bas.txt be.txt bem.txt\
 bez.txt bg.txt bm.txt bn.txt bo.txt\
 bo_IN.txt br.txt brx.txt bs.txt bs_Cyrl.txt\
 bs_Latn.txt ca.txt ca_FR.txt cgg.txt chr.txt\
 cs.txt cy.txt da.txt dav.txt de.txt\
 de_CH.txt de_LU.txt dje.txt dua.txt dyo.txt\
 dz.txt ebu.txt ee.txt el.txt en.txt\
 en_001.txt en_150.txt en_AG.txt en_AI.txt en_AU.txt\
 en_BB.txt en_BE.txt en_BM.txt en_BS.txt en_BW.txt\
 en_BZ.txt en_CA.txt en_CC.txt en_CK.txt en_CM.txt\
 en_CX.txt en_DG.txt en_DM.txt en_ER.txt en_FJ.txt\
 en_FK.txt en_FM.txt en_GB.txt en_GD.txt en_GG.txt\
 en_GH.txt en_GI.txt en_GM.txt en_GY.txt en_HK.txt\
 en_IE.txt en_IM.txt en_IN.txt en_IO.txt en_JE.txt\
 en_JM.txt en_KE.txt en_KI.txt en_KN.txt en_KY.txt\
 en_LC.txt en_LR.txt en_LS.txt en_MG.txt en_MO.txt\
 en_MS.txt en_MT.txt en_MU.txt en_MW.txt en_NA.txt\
 en_NF.txt en_NG.txt en_NR.txt en_NU.txt en_NZ.txt\
 en_PG.txt en_PH.txt en_PK.txt en_PN.txt en_PW.txt\
 en_RW.txt en_SB.txt en_SC.txt en_SD.txt en_SG.txt\
 en_SH.txt en_SL.txt en_SS.txt en_SX.txt en_SZ.txt\
 en_TC.txt en_TK.txt en_TO.txt en_TT.txt en_TV.txt\
 en_TZ.txt en_UG.txt en_VC.txt en_VG.txt en_VU.txt\
 en_WS.txt en_ZA.txt en_ZM.txt en_ZW.txt eo.txt\
 es.txt es_AR.txt es_BO.txt es_CL.txt es_CO.txt\
 es_CR.txt es_CU.txt es_DO.txt es_EC.txt es_GT.txt\
 es_HN.txt es_MX.txt es_NI.txt es_PA.txt es_PE.txt\
 es_PH.txt es_PR.txt es_PY.txt es_SV.txt es_US.txt\
 es_UY.txt es_VE.txt et.txt eu.txt ewo.txt\
 fa.txt fa_AF.txt ff.txt fi.txt fil.txt\
 fo.txt fr.txt fr_BI.txt fr_CA.txt fr_CD.txt\
 fr_CH.txt fr_DJ.txt fr_DZ.txt fr_GN.txt fr_HT.txt\
 fr_KM.txt fr_LU.txt fr_MG.txt fr_MR.txt fr_MU.txt\
 fr_RW.txt fr_SC.txt fr_SY.txt fr_TN.txt fr_VU.txt\
 ga.txt gl.txt gsw.txt gu.txt guz.txt\
 gv.txt ha.txt ha_Latn.txt ha_Latn_GH.txt haw.txt\
 he.txt hi.txt hr.txt hr_BA.txt hu.txt\
 hy.txt id.txt ig.txt ii.txt is.txt\
 it.txt it_CH.txt ja.txt jgo.txt jmc.txt\
 ka.txt kab.txt kam.txt kde.txt kea.txt\
 khq.txt ki.txt kk.txt kk_Cyrl.txt kkj.txt\
 kl.txt kln.txt km.txt kn.txt ko.txt\
 kok.txt ks.txt ks_Arab.txt ksb.txt ksf.txt\
 kw.txt ky.txt ky_Cyrl.txt lag.txt lg.txt\
 lkt.txt ln.txt ln_AO.txt lo.txt lt.txt\
 lu.txt luo.txt luy.txt lv.txt mas.txt\
 mas_TZ.txt mer.txt mfe.txt mg.txt mgh.txt\
 mgo.txt mk.txt ml.txt mn.txt mn_Cyrl.txt\
 mr.txt ms.txt ms_Latn.txt ms_Latn_BN.txt ms_Latn_SG.txt\
 mt.txt mua.txt my.txt naq.txt nb.txt\
 nd.txt ne.txt ne_IN.txt nl.txt nl_AW.txt\
 nl_BQ.txt nl_CW.txt nl_SR.txt nl_SX.txt nmg.txt\
 nn.txt nnh.txt nus.txt nyn.txt om.txt\
 om_KE.txt or.txt pa.txt pa_Arab.txt pa_Guru.txt\
 pl.txt ps.txt pt.txt pt_AO.txt pt_CV.txt\
 pt_GW.txt pt_MO.txt pt_MZ.txt pt_PT.txt pt_ST.txt\
 pt_TL.txt rm.txt rn.txt ro.txt ro_MD.txt\
 rof.txt ru.txt ru_BY.txt ru_KG.txt ru_KZ.txt\
 ru_MD.txt rw.txt rwk.txt saq.txt sbp.txt\
 seh.txt ses.txt sg.txt shi.txt shi_Latn.txt\
 shi_Tfng.txt si.txt sk.txt sl.txt sn.txt\
 so.txt so_DJ.txt so_ET.txt so_KE.txt sq.txt\
 sq_MK.txt sr.txt sr_Cyrl.txt sr_Cyrl_BA.txt sr_Latn.txt\
 sv.txt sw.txt sw_UG.txt swc.txt ta.txt\
 ta_LK.txt ta_MY.txt ta_SG.txt te.txt teo.txt\
 teo_KE.txt th.txt ti.txt ti_ER.txt to.txt\
 tr.txt twq.txt tzm.txt tzm_Latn.txt uk.txt\
 ur.txt uz.txt uz_Arab.txt uz_Cyrl.txt uz_Latn.txt\
 vai.txt vai_Latn.txt vai_Vaii.txt vi.txt vun.txt\
 xog.txt yav.txt yo.txt yo_BJ.txt zgh.txt\
 zh.txt zh_Hans.txt zh_Hans_HK.txt zh_Hans_MO.txt zh_Hans_SG.txt\
 zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt

