# *   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\
 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 ro_MD.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_Cyrl_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_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 bn_IN.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_AG.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_CM.txt\
 en_DM.txt en_FJ.txt en_GB.txt en_GD.txt en_GH.txt\
 en_GI.txt en_GM.txt en_GY.txt en_HK.txt en_IN.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_MT.txt en_MU.txt en_MW.txt en_NA.txt en_NG.txt\
 en_NZ.txt en_PG.txt en_PH.txt en_PK.txt en_SB.txt\
 en_SC.txt en_SG.txt en_SL.txt en_SS.txt en_SZ.txt\
 en_TO.txt en_TT.txt en_TZ.txt en_UG.txt en_VC.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_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 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 kl.txt kln.txt\
 km.txt kn.txt ko.txt kok.txt ks.txt\
 ks_Arab.txt ksb.txt ksf.txt kw.txt lag.txt\
 lg.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_CW.txt nl_SR.txt nl_SX.txt nmg.txt nn.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_MO.txt pt_MZ.txt\
 pt_PT.txt pt_ST.txt rm.txt rn.txt ro.txt\
 rof.txt ru.txt ru_BY.txt ru_KG.txt ru_KZ.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 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

