; $Id: map_proj_init_common.pro,v 1.3 2004/05/12 20:27:49 chris Exp $
; Copyright (c) 1995-2001, Research Projections, Inc.  All rights reserved.
;       Unauthorized reproduction prohibited.


;---------------------------------------------------------------------------
; Undocumented routine to initialize the common block needed
; for MAP_PROJ_INIT.
;
; Use this code at your own risk. RSI reserves the right to modify or
; remove this routine.
;
; CT, RSI, April 2004.
;
pro map_proj_init_common

    compile_opt idl2, hidden

    ; Need to set a flag to avoid recursively calling ourself.
    inMapProjInitCommon = 1b ;  Do not remove!

; Include our common block.
@map_proj_init_commonblock

; How this table works:
;
; The GCTP projections expect a vector of 16 parameters to be passed in
; (only the first 13 are actually used). These parameters are given in
; the following table, using code words that correspond to
; MAP_PROJ_INIT keywords. When the user inputs a keyword, its position
; is looked up in the following table, and the parameter is filled in
; with the keyword value. Then the GCTP init routine is called with
; the 16-element array. The parameter position within the table is crucial.
;
; For convenience, the original IDL projections (the first 19 below)
; are also layed out using the same table format. In this case,
; the code words again correspond to MAP_PROJ_INIT keywords. However,
; these keywords are simply used directly within MAP_PROJ_IDL_INIT.
; The parameter position within the table is thus unimportant, but
; has been chosen to match the GCTP positions.
;
    projections = [ $
; --------------------------------------------------------------------------------------------
;   Code & Projection Id        | 0  | 1  | 2  | 3  | 4  | 5  | 6| 7| 8  | 9  | 10 | 11 | 12 |
; --------------------------------------------------------------------------------------------
; Built-in IDL Projections
'001 Stereographic              |sphe|    |    |    |clon|clat|rotm', $
'002 Orthographic               |sphe|    |    |    |clon|clat|rotm', $
'003 Lambert Conic              |sphe|    |spr1|spr2|clon|clat|rotm', $
'004 Lambert Azimuthal          |sphe|    |    |    |clon|clat|rotm', $
'005 Gnomonic                   |sphe|    |    |    |clon|clat|rotm', $
'006 Azimuthal Equidistant      |sphe|    |    |    |clon|clat|rotm', $
'007 Satellite                  |sphe|    |hght|tilt|clon|clat|rotm', $
'008 Cylindrical                |sphe|    |    |cazm|clon|clat|rotm', $
'009 Mercator                   |sphe|    |    |cazm|clon|clat|rotm', $
'010 Mollweide                  |sphe|    |    |cazm|clon|clat|rotm', $
'011 Sinusoidal                 |sphe|    |    |cazm|clon|clat|rotm', $
'012 Aitoff                     |sphe|    |    |    |clon|clat|rotm', $
'013 Hammer Aitoff              |sphe|    |    |    |clon|clat|rotm', $
'014 Albers Equal Area Conic    |sphe|    |spr1|spr2|clon|clat|rotm', $
'015 Transverse Mercator        |smaj|smin|sfac|    |clon|clat|rotm', $
'016 Miller Cylindrical         |sphe|    |    |cazm|clon|clat|rotm', $
'017 Robinson                   |sphe|    |    |cazm|clon|clat|rotm', $
'018 Lambert Ellipsoid Conic    |smaj|smin|spr1|spr2|clon|clat|rotm', $
'019 Goodes Homolosine          |sphe|    |    |    |clon|', $
; GCTP Projections
;'100 Geographic                 |    |    |    |    |    |    |  |  |',$
'101 UTM                        |clon|clat|zone|    |    |    |  |  |',$
'102 State Plane                |    |    |zone|    |    |    |  |  |',$
'103 Albers Equal Area          |smaj|smin|spr1|spr2|clon|clat|fe|fn|',$
'104 Lambert Conformal Conic    |smaj|smin|spr1|spr2|clon|clat|fe|fn|',$
'105 Mercator                   |smaj|smin|    |    |clon|slat|fe|fn|',$
'106 Polar Stereographic        |smaj|smin|    |    |clon|clat|fe|fn|',$
'107 Polyconic                  |smaj|smin|    |    |clon|clat|fe|fn|',$
'108 Equidistant Conic A        |smaj|smin|spar|    |clon|clat|fe|fn|0|',$
'208 Equidistant Conic B        |smaj|smin|spr1|spr2|clon|clat|fe|fn|1|',$
'109 Transverse Mercator        |smaj|smin|sfac|    |clon|clat|fe|fn|',$
'110 Stereographic              |sphe|    |    |    |clon|clat|fe|fn|',$
'111 Lambert Azimuthal          |sphe|    |    |    |clon|clat|fe|fn|',$
'112 Azimuthal                  |sphe|    |    |    |clon|clat|fe|fn|',$
'113 Gnomonic                   |sphe|    |    |    |clon|clat|fe|fn|',$
'114 Orthographic               |sphe|    |    |    |clon|clat|fe|fn|',$
'115 Near Side Perspective      |sphe|    |hght|    |clon|clat|fe|fn|',$;
'116 Sinusoidal                 |sphe|    |    |    |clon|    |fe|fn|',$
'117 Equirectangular            |sphe|    |    |    |clon|slat|fe|fn|',$
'118 Miller Cylindrical         |sphe|    |    |    |clon|    |fe|fn|',$
'119 Van der Grinten            |sphe|    |    |    |clon|clat|fe|fn|',$
'120 Hotine Oblique Mercator A  |smaj|smin|sfac|    |    |clat|fe|fn|lon1|lat1|lon2|lat2|0|',$
'220 Hotine Oblique Mercator B  |smaj|smin|sfac|azma|azml|clat|fe|fn|    |    |    |    |1|',$
'121 Robinson                   |sphe|    |    |    |clon|    |fe|fn|',$
'122 Space Oblique Mercator A   |smaj|smin|    |incl|ascl|    |fe|fn|psat|lrat|pflg|    |0|',$
'222 Space Oblique Mercator B   |smaj|smin|satn|path|    |    |fe|fn|    |    |    |    |1|',$
'123 Alaska Conformal           |smaj|smin|    |    |    |    |fe|fn|',$
'124 Interrupted Goode          |sphe|    |    |    |    |    |  |  |',$
'125 Mollweide                  |sphe|    |    |    |clon|    |fe|fn|',$
'126 Interrupted Mollweide      |sphe|    |    |    |    |    |  |  |',$
'127 Hammer                     |sphe|    |    |    |clon|    |fe|fn|',$
'128 Wagner IV                  |sphe|    |    |    |clon|    |fe|fn|',$
'129 Wagner VII                 |sphe|    |    |    |clon|    |fe|fn|',$
'130 Oblated Equal Area         |sphe|    |shpm|shpn|clon|clat|fe|fn|rota|',$
'131 Integerized Sinusoidal     |sphe|    |    |    |clon|    |fe|fn|izon|    |just|']
; --------------------------------------------------------------------------------------------

; Actual keyword names that correspond to the codes in the above table.
; This allows us to easily change keyword names if desired.
    keywords = [ $
    ; True keyword name     Code  isAngle
    ['CENTER_AZIMUTH',      'cazm','1'], $
    ['CENTER_LATITUDE',     'clat','1'], $
    ['CENTER_LONGITUDE',    'clon','1'], $
    ['FALSE_EASTING',       'fe',  '0'], $
    ['FALSE_NORTHING',      'fn',  '0'], $
    ['HEIGHT',              'hght','0'], $
    ['HOM_AZIM_LONGITUDE',  'azml','1'], $
    ['HOM_AZIM_ANGLE',      'azma','1'], $
    ['HOM_LATITUDE1',       'lat1','1'], $
    ['HOM_LATITUDE2',       'lat2','1'], $
    ['HOM_LONGITUDE1',      'lon1','1'], $
    ['HOM_LONGITUDE2',      'lon2','1'], $
    ['IS_ZONES',            'izon','0'], $
    ['IS_JUSTIFY',          'just','0'], $
    ['MERCATOR_SCALE',      'sfac','0'], $
    ['OEA_ANGLE',           'rota','1'], $
    ['OEA_SHAPEM',          'shpm','0'], $
    ['OEA_SHAPEN',          'shpn','0'], $
    ['ROTATION',            'rotm','1'], $
    ['SEMIMAJOR_AXIS',      'smaj','0'], $
    ['SEMIMINOR_AXIS',      'smin','0'], $
    ['SOM_INCLINATION',     'incl','1'], $
    ['SOM_LONGITUDE',       'ascl','1'], $
    ['SOM_PERIOD',          'psat','0'], $
    ['SOM_RATIO',           'lrat','0'], $
    ['SOM_FLAG',            'pflg','0'], $
    ['SOM_LANDSAT_NUMBER',  'satn','0'], $
    ['SOM_LANDSAT_PATH',    'path','0'], $
    ['SPHERE_RADIUS',       'sphe','0'], $
    ['STANDARD_PARALLEL',   'spar','1'], $
    ['STANDARD_PAR1',       'spr1','1'], $
    ['STANDARD_PAR2',       'spr2','1'], $
    ['SAT_TILT',            'tilt','1'], $
    ['TRUE_SCALE_LATITUDE', 'slat','1'], $
    ['ZONE',                'zone','0']]

    np = N_ELEMENTS(projections)
    c_ProjNames = STRARR(np)
    c_ProjNumber = INTARR(np)
    c_ProjParameters = STRARR(16,np)
    keywordCodes = keywords[1,*]
    c_keywordNames = keywords[0,*]

    ; Split up the projection table into names, number and parameters.
    for i=0,np-1 do begin
        projParams = STRSPLIT(projections[i], '|', $
            /EXTRACT, /PRESERVE_NULL)
        c_ProjNames[i] = STRTRIM(STRMID(projParams[0], 4), 2)
        c_ProjNumber[i] = FIX(STRMID(projParams[0], 0, 3))
        c_ProjParameters[0,i] = STRTRIM(projParams[1:*], 2)
    endfor
    c_ProjCompressNames = STRCOMPRESS(c_ProjNames, /REMOVE_ALL)

    ; Convert our projection numbers to GCTP package numbers.
    c_ProjNumToGCTP = (c_ProjNumber > 100) mod 100
    ; In GCTP package, Integerized Sinusoidal is #99
    c_ProjNumToGCTP[WHERE(c_ProjNumber eq 131)] = 99

    ; Replace shorthand keyword codes with actual keyword names.
    for i=0,N_ELEMENTS(keywordCodes)-1 do begin
        c_ProjParameters[WHERE(c_ProjParameters eq keywordCodes[i])] = $
            c_keywordNames[i]
    endfor

;   Dump projections and parameters out to a file.
;    for i=0,np-1 do printf,1,strcompress(c_projnumber[i],/rem)+'|'+ $
;       c_projnames[i]+'|'+ string(c_projparameters[ $
;       where(c_projparameters[*,i] ne ''),i],format='(16(A,:,", "))')

    ; Names of parameters which are angles.
    c_ParamIsAngle = keywords[2,*] eq '1'

    ; Taken from gctp/sphdz.c
    ;               SUPPORTED DATUMS
    ; Note: Spaces within these names are ignored.
    datums = [ $
        ; Name                    Semimajor      Semiminor
        ['Clarke 1866',          '6378206.4',    '6356583.8'], $
        ['Clarke 1880',          '6378249.145',  '6356514.86955'], $
        ['Bessel',               '6377397.155',  '6356078.96284'], $
        ['International 1967',   '6378157.5',    '6356772.2'], $
        ['International 1909',   '6378388.0',    '6356911.94613'], $
        ['WGS 72',               '6378135.0',    '6356750.519915'], $
        ['Everest',              '6377276.3452', '6356075.4133'], $
        ['WGS 66',               '6378145.0',    '6356759.769356'], $
        ['GRS1980/WGS84',        '6378137.0',    '6356752.31414'], $
        ['Airy',                 '6377563.396',  '6356256.91'], $
        ['Modified Everest',     '6377304.063',  '6356103.039'], $
        ['Modified Airy',        '6377340.189',  '6356034.448'], $
        ['Walbeck',              '6378137.0',    '6356752.314245'], $
        ['Southeast Asia',       '6378155.0',    '6356773.3205'], $
        ['Australian National',  '6378160.0',    '6356774.719'], $
        ['Krassovsky',           '6378245.0',    '6356863.0188'], $
        ['Hough',                '6378270.0',    '6356794.343479'], $
        ['Mercury 1960',         '6378166.0',    '6356784.283666'], $
        ['Modified Mercury 1968','6378150.0',    '6356768.337303'], $
        ['Sphere',               '6370997.0',    '6370997.0']]

    c_DatumNames = REFORM(datums[0,*])
    c_DatumMajor = REFORM(DOUBLE(datums[1,*]))
    c_DatumMinor = REFORM(DOUBLE(datums[2,*]))

    c_StatePlane_NAD27names = [ $
        'Alabama East', $ ; 101
        'Alabama West', $ ; 102
        'Alaska 1', $ ; 5001
        'Alaska 2', $ ; 5002
        'Alaska 3', $ ; 5003
        'Alaska 4', $ ; 5004
        'Alaska 5', $ ; 5005
        'Alaska 6', $ ; 5006
        'Alaska 7', $ ; 5007
        'Alaska 8', $ ; 5008
        'Alaska 9', $ ; 5009
        'Alaska 10', $ ; 5010
        'Arizona East', $ ; 201
        'Arizona Central', $ ; 202
        'Arizona West', $ ; 203
        'Arkansas North', $ ; 301
        'Arkansas South', $ ; 302
        'California I', $ ; 401
        'California II', $ ; 402
        'California III', $ ; 403
        'California IV', $ ; 404
        'California V', $ ; 405
        'California VI', $ ; 406
        'California VII', $ ; 407
        'Colorado North', $ ; 501
        'Colorado Central', $ ; 502
        'Colorado South', $ ; 503
        'Connecticut', $ ; 600
        'Delaware', $ ; 700
        'Florida East', $ ; 901
        'Florida West', $ ; 902
        'Florida North', $ ; 903
        'Georgia East', $ ; 1001
        'Georgia West', $ ; 1002
        'Hawaii 1', $ ; 5101
        'Hawaii 2', $ ; 5102
        'Hawaii 3', $ ; 5103
        'Hawaii 4', $ ; 5104
        'Hawaii 5', $ ; 5105
        'Idaho East', $ ; 1101
        'Idaho Central', $ ; 1102
        'Idaho West', $ ; 1103
        'Illinois East', $ ; 1201
        'Illinois West', $ ; 1202
        'Indiana East', $ ; 1301
        'Indiana West', $ ; 1302
        'Iowa North', $ ; 1401
        'Iowa South', $ ; 1402
        'Kansas North', $ ; 1501
        'Kansas South', $ ; 1502
        'Kentucky North', $ ; 1601
        'Kentucky South', $ ; 1602
        'Louisiana North', $ ; 1701
        'Louisiana South', $ ; 1702
        'Louisiana Offshore', $ ; 1703
        'Maine East', $ ; 1801
        'Maine West', $ ; 1802
        'Maryland', $ ; 1900
        'Mass Mainland', $ ; 2001
        'Mass Island', $ ; 2002
        'Michigan East', $ ; 2101
        'Michigan Central', $ ; 2102
        'Michigan West', $ ; 2103
        'Michigan North', $ ; 2111
        'Michigan Central', $ ; 2112
        'Michigan South', $ ; 2113
        'Minnesota North', $ ; 2201
        'Minnesota Central', $ ; 2202
        'Minnesota South', $ ; 2203
        'Mississippi East', $ ; 2301
        'Mississippi West', $ ; 2302
        'Missouri East', $ ; 2401
        'Missouri Central', $ ; 2402
        'Missouri West', $ ; 2403
        'Montana North', $ ; 2501
        'Montana Central', $ ; 2502
        'Montana South', $ ; 2503
        'Nebraska North', $ ; 2601
        'Nebraska South', $ ; 2602
        'Nevada East', $ ; 2701
        'Nevada Central', $ ; 2702
        'Nevada West', $ ; 2703
        'New Hamshire', $ ; 2800
        'New Jersey', $ ; 2900
        'New Mexico East', $ ; 3001
        'New Mexico Central', $ ; 3002
        'New Mexico West', $ ; 3003
        'New York East', $ ; 3101
        'New York Central', $ ; 3102
        'New York West', $ ; 3103
        'New York Long Island', $ ; 3104
        'North Carolina', $ ; 3200
        'North Dakota North', $ ; 3301
        'North Dakota South', $ ; 3302
        'Ohio North', $ ; 3401
        'Ohio South', $ ; 3402
        'Oklahoma North', $ ; 3501
        'Oklahoma South', $ ; 3502
        'Oregon North', $ ; 3601
        'Oregon South', $ ; 3602
        'Penn North', $ ; 3701
        'Penn South', $ ; 3702
        'Rhode Island', $ ; 3800
        'South Carolina North', $ ; 3901
        'South Carolina South', $ ; 3902
        'South Dakota North', $ ; 4001
        'South Dakota South', $ ; 4002
        'Tennessee', $ ; 4100
        'Texas North', $ ; 4201
        'Texas North Central', $ ; 4202
        'Texas Central', $ ; 4203
        'Texas South Central', $ ; 4204
        'Texas South', $ ; 4205
        'Utah North', $ ; 4301
        'Utah Central', $ ; 4302
        'Utah South', $ ; 4303
        'Vermont', $ ; 4400
        'Virginia North', $ ; 4501
        'Virginia South', $ ; 4502
        'Washington North', $ ; 4601
        'Washington South', $ ; 4602
        'West Virginia North', $ ; 4701
        'West Virginia South', $ ; 4702
        'Wisconsin North', $ ; 4801
        'Wisconsin Central', $ ; 4802
        'Wisconsin South', $ ; 4803
        'Wyoming East', $ ; 4901
        'Wyoming East Central', $ ; 4902
        'Wyoming West Central', $ ; 4903
        'Wyoming West', $ ; 4904
        'Puerto Rico/Virgin Islands 1', $ ; 5201
        'Virgin Islands/St. Croix', $ ; 5202
        'American Samoa', $ ; 5300
        'Guam Island'] ; 5400

    c_StatePlane_NAD27numbers = [ $
        101,102,5001,5002,5003,5004,5005,5006,5007,5008, $
        5009,5010,201,202,203,301,302,401,402,403, $
        404,405,406,407,501,502,503,600,700,901, $
        902,903,1001,1002,5101,5102,5103,5104,5105,1101, $
        1102,1103,1201,1202,1301,1302,1401,1402,1501,1502, $
        1601,1602,1701,1702,1703,1801,1802,1900,2001,2002, $
        2101,2102,2103,2111,2112,2113,2201,2202,2203,2301, $
        2302,2401,2402,2403,2501,2502,2503,2601,2602,2701, $
        2702,2703,2800,2900,3001,3002,3003,3101,3102,3103, $
        3104,3200,3301,3302,3401,3402,3501,3502,3601,3602, $
        3701,3702,3800,3901,3902,4001,4002,4100,4201,4202, $
        4203,4204,4205,4301,4302,4303,4400,4501,4502,4601, $
        4602,4701,4702,4801,4802,4803,4901,4902,4903,4904, $
        5201,5202,5300,5400]

    c_StatePlane_NAD83names = [ $
        'Alabama East', $ ; 101
        'Alabama West', $ ; 102
        'Alaska 1', $ ; 5001
        'Alaska 2', $ ; 5002
        'Alaska 3', $ ; 5003
        'Alaska 4', $ ; 5004
        'Alaska 5', $ ; 5005
        'Alaska 6', $ ; 5006
        'Alaska 7', $ ; 5007
        'Alaska 8', $ ; 5008
        'Alaska 9', $ ; 5009
        'Alaska 10', $ ; 5010
        'Arizona East', $ ; 201
        'Arizona Central', $ ; 202
        'Arizona West', $ ; 203
        'Arkansas North', $ ; 301
        'Arkansas South', $ ; 302
        'California I', $ ; 401
        'California II', $ ; 402
        'California III', $ ; 403
        'California IV', $ ; 404
        'California V', $ ; 405
        'California VI', $ ; 406
        'Colorado North', $ ; 501
        'Colorado Central', $ ; 502
        'Colorado South', $ ; 503
        'Connecticut', $ ; 600
        'Delaware', $ ; 700
        'Florida East', $ ; 901
        'Florida West', $ ; 902
        'Florida North', $ ; 903
        'Georgia East', $ ; 1001
        'Georgia West', $ ; 1002
        'Hawaii 1', $ ; 5101
        'Hawaii 2', $ ; 5102
        'Hawaii 3', $ ; 5103
        'Hawaii 4', $ ; 5104
        'Hawaii 5', $ ; 5105
        'Idaho East', $ ; 1101
        'Idaho Central', $ ; 1102
        'Idaho West', $ ; 1103
        'Illinois East', $ ; 1201
        'Illinois West', $ ; 1202
        'Indiana East', $ ; 1301
        'Indiana West', $ ; 1302
        'Iowa North', $ ; 1401
        'Iowa South', $ ; 1402
        'Kansas North', $ ; 1501
        'Kansas South', $ ; 1502
        'Kentucky North', $ ; 1601
        'Kentucky South', $ ; 1602
        'Louisiana North', $ ; 1701
        'Louisiana South', $ ; 1702
        'Louisiana Offshore', $ ; 1703
        'Maine East', $ ; 1801
        'Maine West', $ ; 1802
        'Maryland', $ ; 1900
        'Mass Mainland', $ ; 2001
        'Mass Island', $ ; 2002
        'Michigan North', $ ; 2111
        'Michigan Central', $ ; 2112
        'Michigan South', $ ; 2113
        'Minnesota North', $ ; 2201
        'Minnesota Central', $ ; 2202
        'Minnesota South', $ ; 2203
        'Mississippi East', $ ; 2301
        'Mississippi West', $ ; 2302
        'Missouri East', $ ; 2401
        'Missouri Central', $ ; 2402
        'Missouri West', $ ; 2403
        'Montana', $ ; 2500
        'Nebraska', $ ; 2600
        'Nevada East', $ ; 2701
        'Nevada Central', $ ; 2702
        'Nevada West', $ ; 2703
        'New Hamshire', $ ; 2800
        'New Jersey', $ ; 2900
        'New Mexico East', $ ; 3001
        'New Mexico Central', $ ; 3002
        'New Mexico West', $ ; 3003
        'New York East', $ ; 3101
        'New York Central', $ ; 3102
        'New York West', $ ; 3103
        'New York Long Island', $ ; 3104
        'North Carolina', $ ; 3200
        'North Dakota North', $ ; 3301
        'North Dakota South', $ ; 3302
        'Ohio North', $ ; 3401
        'Ohio South', $ ; 3402
        'Oklahoma North', $ ; 3501
        'Oklahoma South', $ ; 3502
        'Oregon North', $ ; 3601
        'Oregon South', $ ; 3602
        'Penn North', $ ; 3701
        'Penn South', $ ; 3702
        'Rhode Island', $ ; 3800
        'South Carolina', $ ; 3900
        'South Dakota North', $ ; 4001
        'South Dakota South', $ ; 4002
        'Tennessee', $ ; 4100
        'Texas North', $ ; 4201
        'Texas North Central', $ ; 4202
        'Texas Central', $ ; 4203
        'Texas South Central', $ ; 4204
        'Texas South', $ ; 4205
        'Utah North', $ ; 4301
        'Utah Central', $ ; 4302
        'Utah South', $ ; 4303
        'Vermont', $ ; 4400
        'Virginia North', $ ; 4501
        'Virginia South', $ ; 4502
        'Washington North', $ ; 4601
        'Washington South', $ ; 4602
        'West Virginia North', $ ; 4701
        'West Virginia South', $ ; 4702
        'Wisconsin North', $ ; 4801
        'Wisconsin Central', $ ; 4802
        'Wisconsin South', $ ; 4803
        'Wyoming East', $ ; 4901
        'Wyoming East Central', $ ; 4902
        'Wyoming West Central', $ ; 4903
        'Wyoming West', $ ; 4904
        'Puerto Rico/Virgin Islands'] ; 5200

    c_StatePlane_NAD83numbers = [ $
        101,102,5001,5002,5003,5004,5005,5006,5007,5008, $
        5009,5010,201,202,203,301,302,401,402,403, $
        404,405,406,501,502,503,600,700,901,902, $
        903,1001,1002,5101,5102,5103,5104,5105,1101,1102, $
        1103,1201,1202,1301,1302,1401,1402,1501,1502,1601, $
        1602,1701,1702,1703,1801,1802,1900,2001,2002,2111, $
        2112,2113,2201,2202,2203,2301,2302,2401,2402,2403, $
        2500,2600,2701,2702,2703,2800,2900,3001,3002,3003, $
        3101,3102,3103,3104,3200,3301,3302,3401,3402,3501, $
        3502,3601,3602,3701,3702,3800,3900,4001,4002,4100, $
        4201,4202,4203,4204,4205,4301,4302,4303,4400,4501, $
        4502,4601,4602,4701,4702,4801,4802,4803,4901,4902, $
        4903,4904,5200]

end


