/*
 * Copyright 2012 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.google.gwt.i18n.client.impl.cldr;

import com.google.gwt.core.client.JavaScriptObject;

// DO NOT EDIT - GENERATED FROM CLDR DATA

/**
 * Localized names for the "ko_KP" locale.
 */
public class LocalizedNamesImpl_ko_KP extends LocalizedNamesImpl_ko {

  @Override
  public String[] loadSortedRegionCodes() {
    return new String[] {
        "GH",
        "GA",
        "GY",
        "GM",
        "GG",
        "GP",
        "GT",
        "GU",
        "GD",
        "GR",
        "GL",
        "GN",
        "GW",
        "NA",
        "NR",
        "NG",
        "AQ",
        "SS",
        "ZA",
        "NL",
        "BQ",
        "NP",
        "NO",
        "NF",
        "NZ",
        "NC",
        "NU",
        "NE",
        "NI",
        "TW",
        "KR",
        "DK",
        "DM",
        "DO",
        "DE",
        "TL",
        "DG",
        "LA",
        "LR",
        "LV",
        "RU",
        "LB",
        "LS",
        "RO",
        "LU",
        "RW",
        "LY",
        "RE",
        "LT",
        "LI",
        "MG",
        "MQ",
        "MH",
        "YT",
        "MO",
        "MK",
        "MW",
        "MY",
        "ML",
        "IM",
        "MX",
        "MC",
        "MA",
        "MU",
        "MR",
        "MZ",
        "ME",
        "MS",
        "MD",
        "MV",
        "MT",
        "MN",
        "US",
        "VI",
        "UM",
        "MM",
        "FM",
        "VU",
        "BH",
        "BB",
        "VA",
        "BS",
        "BD",
        "BM",
        "BJ",
        "VE",
        "VN",
        "BE",
        "BY",
        "BZ",
        "BA",
        "BW",
        "BO",
        "BI",
        "BF",
        "BV",
        "BT",
        "MP",
        "BG",
        "BR",
        "BN",
        "WS",
        "SA",
        "GS",
        "SM",
        "ST",
        "MF",
        "BL",
        "PM",
        "EH",
        "SN",
        "RS",
        "EA",
        "SC",
        "LC",
        "VC",
        "KN",
        "SH",
        "SO",
        "SB",
        "SD",
        "SR",
        "LK",
        "SJ",
        "SZ",
        "SE",
        "CH",
        "ES",
        "SK",
        "SI",
        "SY",
        "SL",
        "SX",
        "SG",
        "AE",
        "AW",
        "AM",
        "AR",
        "AS",
        "IS",
        "HT",
        "IE",
        "AZ",
        "AF",
        "AD",
        "AL",
        "DZ",
        "AO",
        "AG",
        "AI",
        "AC",
        "ER",
        "EE",
        "EC",
        "ET",
        "SV",
        "GB",
        "VG",
        "IO",
        "YE",
        "OM",
        "QO",
        "AU",
        "AT",
        "HN",
        "AX",
        "WF",
        "JO",
        "UG",
        "UY",
        "UZ",
        "UA",
        "EU",
        "EZ",
        "UN",
        "IQ",
        "IR",
        "IL",
        "EG",
        "IT",
        "IN",
        "ID",
        "JP",
        "JM",
        "ZM",
        "JE",
        "GQ",
        "KP",
        "GE",
        "CN",
        "CF",
        "DJ",
        "GI",
        "ZW",
        "TD",
        "CZ",
        "CL",
        "IC",
        "CM",
        "CV",
        "KZ",
        "QA",
        "KH",
        "CA",
        "KE",
        "KY",
        "KM",
        "XK",
        "CR",
        "CC",
        "CI",
        "CO",
        "CG",
        "CD",
        "CU",
        "KW",
        "CK",
        "CW",
        "HR",
        "CX",
        "CP",
        "KG",
        "KI",
        "CY",
        "TJ",
        "TZ",
        "TH",
        "TC",
        "TR",
        "TG",
        "TK",
        "TO",
        "TM",
        "TV",
        "TN",
        "TT",
        "TA",
        "PA",
        "PY",
        "PK",
        "PG",
        "PW",
        "PS",
        "FO",
        "PE",
        "PT",
        "FK",
        "PL",
        "PR",
        "FR",
        "TF",
        "GF",
        "PF",
        "FJ",
        "FI",
        "PH",
        "PN",
        "HM",
        "HU",
        "HK",
    };
  }

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("KP", "조선민주주의인민공화국");
  }

  @Override
  protected JavaScriptObject loadNameMapNative() {
    return overrideMap(super.loadNameMapNative(), loadMyNameMap());
  }

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "KP": "조선민주주의인민공화국"
    };
  }-*/;
}
